diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/AUTHORS ns-3.43/AUTHORS
--- ns-3.42/AUTHORS	2024-05-29 15:29:46.824072800 -0700
+++ ns-3.43/AUTHORS	2024-10-09 16:41:09.752655300 -0700
@@ -30,12 +30,14 @@
 Apoorva Bhargava (apoorvabhargava13@gmail.com)
 Avakash Bhat (avakash261@gmail.com)
 Kavya Bhat (kavyabhat@gmail.com)
+Sanjay Bhat (sanjubhat2004@gmail.com)
 Raj Bhattacharjea (raj.b@gatech.edu)
 Mathew Bielejeski (bielejeski1@llnl.gov)
 Timo Bingmann (timo.bingmann@student.kit.edu)
 Doug Blough (doug.blough@gatech.edu)
 Julien Boite (juboite@gmail.com)
 Biljana Bojovic (bbojovic@cttc.es)
+Andreas Boltres (andreas.boltres@partner.kit.edu)
 Elena Borovkova (borokovaes@iitp.ru)
 Rahul Bothra (rrbothra@gmail.com)
 Caleb Bowers (caleb.bowers@nel.navy.mil, cbowers1020@gmail.com)
@@ -44,7 +46,6 @@
 Dan Broyles (muxman@sbcglobal.net)
 Jonathan Brugge (j.d.brugge@student.utwente.nl)
 Junling Bu (linlinjavaer@gmail.com)
-Alessio Bugetti (alessiobugetti98@gmail.com)
 Elena Buchatskaia (borovkovaes@iitp.ru)
 Alessio Bugetti (alessiobugetti98@gmail.com)
 Nuno Cardoso (nunopcardoso@gmail.com)
@@ -76,6 +77,7 @@
 Sébastien Deronne (sebastien.deronne@gmail.com)
 Ameya Deshpande (ameyanrd@outlook.com)
 Zhiheng Dong (dzh2077@gmail.com)
+@donghuiyong at GitLab.com
 Christoph Döpmann (doepmanc@informatik.hu-berlin.de)
 Jordan Dorham (dorham1@llnl.gov)
 Craig Dowell (craigdo@ee.washington.edu)
@@ -96,8 +98,10 @@
 Eric Gamess (egamess@gmail.com)
 Shiva Gantha (ganthashiva@gmail.com)
 Yida Gao (yidapb@gmail.com)
+Vikas Gaur (vikasgaurdws@gmail.com)
 Thomas Geithner (thomas.geithner@dai-labor.de)
 Ashim Ghosh (ashim.atiit@gmail.com)
+@Ghostyhands at GitLab.com
 Martin Giachino (martin.giachino@gmail.com,giachino@fing.edu.uy)
 Nichit Bodhak Goel (nichit93@gmail.com)
 Tom Goff (tgoff@tgoff.net)
@@ -144,6 +148,7 @@
 Liu Jian (liujatp@gmail.com)
 Sascha Alexander Jopen (jopen@informatik.uni-bonn.de)
 Piotr Jurkiewicz (piotr.jerzy.jurkiewicz@gmail.com)
+Kakadus1 (j.dittrich2303@gmail.com)
 Evgeny Kalishenko (ydginster@gmail.com)
 Raghuram Kannan (raghuramkannan40@gmail.com)
 Vignesh Kannan (vignesh2496@gmail.com)
@@ -152,6 +157,7 @@
 Konstantinos Katsaros (dinos.katsaros@gmail.com)
 Bhaskar Kataria (www.bhaskar.com7@gmail.com)
 Nils Kattenbeck (nils.kattenbeck@rwth-aachen.de)
+Nakayama Kenjiro (nakayamakenjiro@gmail.com)
 Morteza Kheirkhah (m.kheirkhah@sussex.ac.uk)
 Jörg Christian Kirchhof (christian.kirchhof@rwth-aachen.de)
 Ohad Klausner
@@ -261,6 +267,7 @@
 Andrea Ranieri (andreran@uno.it)
 Bruno Ranieri (Yrrsinn@googlemail.com)
 Deepti Rajagopal (deeptir96@gmail.com)
+Satyarth Ratnani (satyarthratnani@gmail.com)
 Varun Reddy (varunamarreddy@gmail.com)
 Ken Renard (kenneth.renard@arl.army.mil)
 Getachew Redieteab (getachew.redieteab@orange.com)
@@ -270,7 +277,7 @@
 Matias Richart (mrichart@fing.edu.uy)
 George F. Riley (riley@ece.gatech.edu)
 Juergen Rinas (jrinas@gmx.de)
-Robert-ML
+@Robert-ML at GitLab.com
 Sebastian Rohde (sebastian.rohde@tu-dortmund.de)
 Karsten Roscher (sfx@rocktale.de)
 Ali Rostami (a.rostami@rutgers.edu)
@@ -300,6 +307,7 @@
 Guowang Shi (shiguowang2007@gmail.com)
 Phillip Sitbon (phillip.sitbon@gmail.com)
 Pedro Silva (pmms@inesctec.pt)
+Aniket Singh (aniketsingh84646@gmail.com)
 Siddharth Singh (siddharth12375@gmail.com)
 Anirudh Sivaraman (sk.anirudh@gmail.com)
 Steven Smith (smith84@llnl.gov)
@@ -313,6 +321,7 @@
 Greg Steinbrecher (grs@fb.com)
 YunQiang Su (wzssyqa@gmail.com)
 Brian Swenson (bswenson3@gatech.edu)
+Jay C. Surani (jaysurani333@gmail.com)
 Lalith Suresh  (suresh.lalith@gmail.com)
 Szymon Szott (szott@kt.agh.edu.pl)
 Mohit P. Tahiliani (tahiliani.nitk@gmail.com)
@@ -331,6 +340,7 @@
 Frederic Urbani (frederic.urbani@inria.fr)
 Andras Varga (andras@omnetpp.org)
 Shrinidhi Anil Varna (shrinidhi99.varna@gmail.com)
+Silviu-Leonard Vatamanelu (silviu48vatamanelu@gmail.com)
 Sebastien Vincent (vincent@clarinet.u-strasbg.fr)
 Guillaume Vu-Brugier (gvubrugier@gmail.com)
 Tom Wambold (tom5760@gmail.com)
@@ -343,6 +353,7 @@
 He Wu (mdzz@u.washington.edu)
 Xiuchao Wu (xiuchao@amazon.com)
 Aron Wussler (aron@wussler.it)
+wzfelix <wzfhrb.cn@gmail.com>
 Heran Yang (heran55@126.com)
 Yoshihiko Yazawa (yoshiyaz@gmail.com)
 Menglei Zhang (menglei@nyu.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/3rd-party/colored-messages.cmake ns-3.43/build-support/3rd-party/colored-messages.cmake
--- ns-3.42/build-support/3rd-party/colored-messages.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/3rd-party/colored-messages.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -1,3 +1,4 @@
+# cmake-format: off
 # Copyright (c) 2013 Fraser Hutchison
 #
 # This program is free software; you can redistribute it and/or modify it under
@@ -12,7 +13,6 @@
 # You should have received a copy of the GNU General Public License along with
 # this program; if not, write to the Free Software Foundation, Inc., 59 Temple
 # Place, Suite 330, Boston, MA  02111-1307 USA
-# cmake-format: off
 #
 # Author: Fraser Hutchison <fraser@casperlabs.io>
 # Modified by: Gabriel Ferreira <gabrielcarvfer@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/3rd-party/find-program-hints.cmake ns-3.43/build-support/3rd-party/find-program-hints.cmake
--- ns-3.42/build-support/3rd-party/find-program-hints.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/3rd-party/find-program-hints.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -1,4 +1,5 @@
 disable_cmake_warnings()
+string(REPLACE ";" "/bin;" syspaths "${CMAKE_SYSTEM_PREFIX_PATH};")
 set(3RD_PARTY_FIND_PROGRAM_HINTS
     # find_program HINTS for Doxygen
     # https://gitlab.kitware.com/cmake/cmake/-/blob/master/Modules/FindDoxygen.cmake
@@ -18,5 +19,6 @@
     "[HKEY_LOCAL_MACHINE\\SOFTWARE\\ATT\\Graphviz;InstallPath]/bin"
     /Applications/Graphviz.app/Contents/MacOS
     /Applications/Utilities/Graphviz.app/Contents/MacOS
+    ${syspaths}
 )
 enable_cmake_warnings()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/3rd-party/netanim-cmakelists.cmake ns-3.43/build-support/3rd-party/netanim-cmakelists.cmake
--- ns-3.42/build-support/3rd-party/netanim-cmakelists.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/3rd-party/netanim-cmakelists.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2017-2021 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/cmake-format.yaml ns-3.43/build-support/cmake-format.yaml
--- ns-3.42/build-support/cmake-format.yaml	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/cmake-format.yaml	2024-10-09 16:41:09.760655400 -0700
@@ -56,6 +56,14 @@
             CMAKE_PACKAGES : '*'
             EXECUTABLES : '*'
             PYTHON_PACKAGES : '*'
+    copy_headers:
+        kwargs:
+            PUBLIC_HEADER_OUTPUT_DIR: '1'
+            DEPRECATED_HEADER_OUTPUT_DIR: '1'
+            PRIVATE_HEADER_OUTPUT_DIR: '1'
+            PUBLIC_HEADER_FILES: '*'
+            DEPRECATED_HEADER_FILES: '*'
+            PRIVATE_HEADER_FILES: '*'
 
 format:
   tab_size: 2
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-check-dependencies.cmake ns-3.43/build-support/custom-modules/ns3-check-dependencies.cmake
--- ns-3.42/build-support/custom-modules/ns3-check-dependencies.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-check-dependencies.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-cmake-package.cmake ns-3.43/build-support/custom-modules/ns3-cmake-package.cmake
--- ns-3.42/build-support/custom-modules/ns3-cmake-package.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-cmake-package.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2017-2021 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-compiler-and-linker-support.cmake ns-3.43/build-support/custom-modules/ns3-compiler-and-linker-support.cmake
--- ns-3.42/build-support/custom-modules/ns3-compiler-and-linker-support.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-compiler-and-linker-support.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-compiler-workarounds.cmake ns-3.43/build-support/custom-modules/ns3-compiler-workarounds.cmake
--- ns-3.42/build-support/custom-modules/ns3-compiler-workarounds.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-compiler-workarounds.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -1,16 +1,5 @@
 # Copyright (c) 2022 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-configtable.cmake ns-3.43/build-support/custom-modules/ns3-configtable.cmake
--- ns-3.42/build-support/custom-modules/ns3-configtable.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-configtable.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -202,8 +202,8 @@
 
   set(really-enabled-modules ${ns3-libs};${ns3-contrib-libs})
   if(${ENABLE_TESTS})
-    list(APPEND really-enabled-modules libtest) # test is an object library and
-                                                # is treated differently
+    list(APPEND really-enabled-modules test) # test is an object library and
+    # is treated differently
   endif()
   if(really-enabled-modules)
     print_formatted_table_with_modules(
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-contributions.cmake ns-3.43/build-support/custom-modules/ns3-contributions.cmake
--- ns-3.42/build-support/custom-modules/ns3-contributions.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-contributions.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2017-2021 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-coverage.cmake ns-3.43/build-support/custom-modules/ns3-coverage.cmake
--- ns-3.42/build-support/custom-modules/ns3-coverage.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-coverage.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2017-2021 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
@@ -29,6 +18,7 @@
     message(FATAL_ERROR "LCOV is required but it is not installed.")
   endif()
 
+  set(zero_counters)
   if(${NS3_COVERAGE_ZERO_COUNTERS})
     set(zero_counters "--lcov-zerocounters")
   endif()
@@ -43,8 +33,32 @@
   add_custom_target(
     coverage_gcc
     COMMAND lcov -o ns3.info -c --directory ${CMAKE_BINARY_DIR} ${zero_counters}
-    COMMAND genhtml ns3.info
     WORKING_DIRECTORY ${CMAKE_OUTPUT_DIRECTORY}/coverage
     DEPENDS run_test_py
   )
+
+  add_custom_target(
+    coverage_html
+    COMMAND genhtml ns3.info
+    WORKING_DIRECTORY ${CMAKE_OUTPUT_DIRECTORY}/coverage
+    DEPENDS coverage_gcc
+  )
+
+  # Convert lcov results to cobertura (compatible with gitlab)
+  check_deps(cobertura_deps EXECUTABLES c++filt PYTHON_PACKAGES lcov_cobertura)
+  if(cobertura_deps)
+    message(
+      WARNING
+        "Code coverage conversion from LCOV to Cobertura requires missing dependencies: ${cobertura_deps}"
+    )
+  else()
+    add_custom_target(
+      coverage_cobertura
+      COMMAND
+        lcov_cobertura ${CMAKE_OUTPUT_DIRECTORY}/coverage/ns3.info --output
+        ${CMAKE_OUTPUT_DIRECTORY}/coverage/cobertura.xml --demangle
+      WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+      DEPENDS coverage_gcc
+    )
+  endif()
 endif()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-executables.cmake ns-3.43/build-support/custom-modules/ns3-executables.cmake
--- ns-3.42/build-support/custom-modules/ns3-executables.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-executables.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -168,8 +168,20 @@
     return()
   endif()
 
-  # Search for python examples
-  file(GLOB_RECURSE python_examples ${path}/*.py)
+  # Search for example scripts in the directory and its immediate children
+  # directories
+  set(python_examples)
+  file(GLOB examples_subdirs LIST_DIRECTORIES TRUE ${path}/*)
+  foreach(subdir ${path} ${examples_subdirs})
+    if(NOT (IS_DIRECTORY ${subdir}))
+      continue()
+    endif()
+    file(GLOB python_examples_subdir ${subdir}/*.py)
+    list(APPEND python_examples ${python_examples_subdir})
+  endforeach()
+
+  # Add example scripts to the list
+  list(REMOVE_DUPLICATES python_examples)
   foreach(python_example ${python_examples})
     if(NOT (${python_example} MATCHES "examples-to-run"))
       set(ns3-execs-py "${python_example};${ns3-execs-py}"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-fetch-optional-modules-dependencies.cmake ns-3.43/build-support/custom-modules/ns3-fetch-optional-modules-dependencies.cmake
--- ns-3.42/build-support/custom-modules/ns3-fetch-optional-modules-dependencies.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-fetch-optional-modules-dependencies.cmake	2024-10-09 16:41:09.760655400 -0700
@@ -85,9 +85,4 @@
   add_dependencies(${libbrite} brite_dep)
   add_dependencies(${libclick} click_dep)
   add_dependencies(${libopenflow} openflow_dep)
-  if(NOT ${XCODE})
-    add_dependencies(${libbrite}-obj brite_dep)
-    add_dependencies(${libclick}-obj click_dep)
-    add_dependencies(${libopenflow}-obj openflow_dep)
-  endif()
 endmacro()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-filter-modules.cmake ns-3.43/build-support/custom-modules/ns3-filter-modules.cmake
--- ns-3.42/build-support/custom-modules/ns3-filter-modules.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-filter-modules.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-find-external-library.cmake ns-3.43/build-support/custom-modules/ns3-find-external-library.cmake
--- ns-3.42/build-support/custom-modules/ns3-find-external-library.cmake	2024-05-29 15:29:46.832072700 -0700
+++ ns-3.43/build-support/custom-modules/ns3-find-external-library.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
@@ -111,6 +100,9 @@
       # directories
       $ENV{PATH} # Search for libraries in PATH directories
   )
+  if(library_search_paths)
+    list(REMOVE_DUPLICATES library_search_paths)
+  endif()
   enable_cmake_warnings()
   # cmake-format: off
     #
@@ -223,6 +215,9 @@
       # ns-3-dev/build
       ${CMAKE_INSTALL_PREFIX} # Search for headers in the install
   )
+  if(header_search_paths)
+    list(REMOVE_DUPLICATES header_search_paths)
+  endif()
 
   set(not_found_headers)
   set(include_dirs)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-hidden-settings.cmake ns-3.43/build-support/custom-modules/ns3-hidden-settings.cmake
--- ns-3.42/build-support/custom-modules/ns3-hidden-settings.cmake	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/build-support/custom-modules/ns3-hidden-settings.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-lock.cmake ns-3.43/build-support/custom-modules/ns3-lock.cmake
--- ns-3.42/build-support/custom-modules/ns3-lock.cmake	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/build-support/custom-modules/ns3-lock.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2017-2021 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
@@ -126,6 +115,8 @@
     set(lock_filename .lock-ns3_darwin_build)
   elseif(WIN32)
     set(lock_filename .lock-ns3_win32_build)
+  elseif(BSD)
+    set(lock_filename .lock-ns3_bsd_build)
   else()
     message(FATAL_ERROR "Platform not supported")
   endif()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-module-macros.cmake ns-3.43/build-support/custom-modules/ns3-module-macros.cmake
--- ns-3.42/build-support/custom-modules/ns3-module-macros.cmake	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/build-support/custom-modules/ns3-module-macros.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2017-2021 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
@@ -47,6 +36,40 @@
   endforeach()
 endfunction(copy_headers_before_building_lib)
 
+function(copy_headers)
+  # Argument parsing
+  set(options)
+  set(oneValueArgs PUBLIC_HEADER_OUTPUT_DIR DEPRECATED_HEADER_OUTPUT_DIR
+                   PRIVATE_HEADER_OUTPUT_DIR
+  )
+  set(multiValueArgs PUBLIC_HEADER_FILES DEPRECATED_HEADER_FILES
+                     PRIVATE_HEADER_FILES
+  )
+  cmake_parse_arguments(
+    "CP" "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN}
+  )
+  if((DEFINED CP_PUBLIC_HEADER_OUTPUT_DIR) AND (DEFINED CP_PUBLIC_HEADER_FILES))
+    copy_headers_before_building_lib(
+      "" "${CP_PUBLIC_HEADER_OUTPUT_DIR}" "${CP_PUBLIC_HEADER_FILES}" public
+    )
+  endif()
+  if((DEFINED CP_DEPRECATED_HEADER_OUTPUT_DIR) AND (DEFINED
+                                                    CP_DEPRECATED_HEADER_FILES)
+  )
+    copy_headers_before_building_lib(
+      "" "${CP_DEPRECATED_HEADER_OUTPUT_DIR}" "${CP_DEPRECATED_HEADER_FILES}"
+      deprecated
+    )
+  endif()
+  if((DEFINED CP_PRIVATE_HEADER_OUTPUT_DIR) AND (DEFINED CP_PRIVATE_HEADER_FILES
+                                                )
+  )
+    copy_headers_before_building_lib(
+      "" "${CP_PRIVATE_HEADER_OUTPUT_DIR}" "${CP_PRIVATE_HEADER_FILES}" private
+    )
+  endif()
+endfunction()
+
 function(remove_lib_prefix prefixed_library library)
   # Check if there is a lib prefix
   string(FIND "${prefixed_library}" "lib" lib_pos)
@@ -129,74 +152,32 @@
 
   # Add library to a global list of libraries
   if("${FOLDER}" MATCHES "src")
-    set(ns3-libs "${lib${BLIB_LIBNAME}};${ns3-libs}"
+    set(ns3-libs "${BLIB_LIBNAME};${ns3-libs}"
         CACHE INTERNAL "list of processed upstream modules"
     )
   else()
-    set(ns3-contrib-libs "${lib${BLIB_LIBNAME}};${ns3-contrib-libs}"
+    set(ns3-contrib-libs "${BLIB_LIBNAME};${ns3-contrib-libs}"
         CACHE INTERNAL "list of processed contrib modules"
     )
   endif()
 
-  if(NOT ${XCODE})
-    # Create object library with sources and headers, that will be used in
-    # lib-ns3-static and the shared library
-    add_library(
-      ${lib${BLIB_LIBNAME}-obj} OBJECT "${BLIB_SOURCE_FILES}"
-                                       "${BLIB_HEADER_FILES}"
-    )
-
-    if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${BLIB_IGNORE_PCH}))
-      target_precompile_headers(${lib${BLIB_LIBNAME}-obj} REUSE_FROM stdlib_pch)
-    endif()
-
-    # Create shared library with previously created object library (saving
-    # compilation time for static libraries)
-    add_library(
-      ${lib${BLIB_LIBNAME}} SHARED $<TARGET_OBJECTS:${lib${BLIB_LIBNAME}-obj}>
-    )
-  else()
-    # Xcode and CMake don't play well when using object libraries, so we have a
-    # specific path for that
-    add_library(${lib${BLIB_LIBNAME}} SHARED "${BLIB_SOURCE_FILES}")
+  # Create the module shared library
+  add_library(${BLIB_LIBNAME} SHARED "${BLIB_SOURCE_FILES}")
 
-    if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${BLIB_IGNORE_PCH}))
-      target_precompile_headers(${lib${BLIB_LIBNAME}} REUSE_FROM stdlib_pch)
-    endif()
-  endif()
+  # Set alias
+  add_library(ns3::${BLIB_LIBNAME} ALIAS ${BLIB_LIBNAME})
 
-  add_library(ns3::${lib${BLIB_LIBNAME}} ALIAS ${lib${BLIB_LIBNAME}})
+  # Reuse PCH
+  if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${BLIB_IGNORE_PCH}))
+    target_precompile_headers(${BLIB_LIBNAME} REUSE_FROM stdlib_pch)
+  endif()
 
   # Associate public headers with library for installation purposes
-  set(config_headers)
-  if("${BLIB_LIBNAME}" STREQUAL "core")
-    set(config_headers ${CMAKE_HEADER_OUTPUT_DIRECTORY}/config-store-config.h
-                       ${CMAKE_HEADER_OUTPUT_DIRECTORY}/core-config.h
-    )
-    if(${ENABLE_BUILD_VERSION})
-      list(APPEND config_headers
-           ${CMAKE_HEADER_OUTPUT_DIRECTORY}/version-defines.h
-      )
-    endif()
-
-    # Enable examples as tests suites
-    if(${ENABLE_EXAMPLES} AND ${ENABLE_TESTS})
-      if(NOT ${XCODE})
-        target_compile_definitions(
-          ${lib${BLIB_LIBNAME}}-obj PRIVATE NS3_ENABLE_EXAMPLES
-        )
-      else()
-        target_compile_definitions(
-          ${lib${BLIB_LIBNAME}} PRIVATE NS3_ENABLE_EXAMPLES
-        )
-      endif()
-    endif()
-  endif()
   set_target_properties(
-    ${lib${BLIB_LIBNAME}}
+    ${BLIB_LIBNAME}
     PROPERTIES
       PUBLIC_HEADER
-      "${BLIB_HEADER_FILES};${BLIB_DEPRECATED_HEADER_FILES};${config_headers};${CMAKE_HEADER_OUTPUT_DIRECTORY}/${BLIB_LIBNAME}-module.h"
+      "${BLIB_HEADER_FILES};${BLIB_DEPRECATED_HEADER_FILES};${CMAKE_HEADER_OUTPUT_DIRECTORY}/${BLIB_LIBNAME}-module.h"
       PRIVATE_HEADER "${BLIB_PRIVATE_HEADER_FILES}"
       RUNTIME_OUTPUT_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} # set output
                                                                  # directory for
@@ -204,35 +185,75 @@
   )
 
   if(${NS3_CLANG_TIMETRACE})
-    add_dependencies(timeTraceReport ${lib${BLIB_LIBNAME}})
+    add_dependencies(timeTraceReport ${BLIB_LIBNAME})
   endif()
 
-  # Split ns and non-ns libraries to manage their propagation properly
-  set(non_ns_libraries_to_link ${CMAKE_THREAD_LIBS_INIT})
+  build_lib_reexport_third_party_libraries(
+    "${BLIB_LIBNAME}" "${BLIB_LIBRARIES_TO_LINK}"
+  )
 
-  set(ns_libraries_to_link)
+  # set output name of library
+  set_target_properties(
+    ${BLIB_LIBNAME}
+    PROPERTIES OUTPUT_NAME ns${NS3_VER}-${BLIB_LIBNAME}${build_profile_suffix}
+  )
 
-  foreach(library ${BLIB_LIBRARIES_TO_LINK})
-    remove_lib_prefix("${library}" module_name)
+  # Export compile definitions as interface definitions, propagating local
+  # definitions to other modules and scratches
+  build_lib_export_definitions_as_interface_definitions(${BLIB_LIBNAME})
 
-    # Ignore the case where the library dependency name match the ns-3 module
-    # since it is most likely is due to brite, click and openflow collisions.
-    # All the ns-3 module targets should be prefixed with 'lib' to be
-    # differentiable.
-    if("${library}" STREQUAL "${BLIB_LIBNAME}")
-      list(APPEND non_ns_libraries_to_link ${library})
-      continue()
-    endif()
+  # Write a module header that includes all headers from that module
+  write_module_header("${BLIB_LIBNAME}" "${BLIB_HEADER_FILES}")
 
-    # Check if the module exists in the ns-3 modules list or if it is a
-    # 3rd-party library
-    if(${module_name} IN_LIST ns3-all-enabled-modules)
-      list(APPEND ns_libraries_to_link ${library})
-    else()
-      list(APPEND non_ns_libraries_to_link ${library})
-    endif()
-    unset(module_name)
-  endforeach()
+  # Check if headers actually exist to prevent copying errors during
+  # installation (includes the module header created above)
+  build_lib_check_headers(${BLIB_LIBNAME})
+
+  # Copy all header files to outputfolder/include before each build
+  copy_headers(
+    PUBLIC_HEADER_OUTPUT_DIR ${CMAKE_HEADER_OUTPUT_DIRECTORY}
+    PUBLIC_HEADER_FILES ${BLIB_HEADER_FILES}
+    DEPRECATED_HEADER_OUTPUT_DIR ${CMAKE_HEADER_OUTPUT_DIRECTORY}
+    DEPRECATED_HEADER_FILES ${BLIB_DEPRECATED_HEADER_FILES}
+    PRIVATE_HEADER_OUTPUT_DIR ${CMAKE_HEADER_OUTPUT_DIRECTORY}
+    PRIVATE_HEADER_FILES ${BLIB_PRIVATE_HEADER_FILES}
+  )
+
+  # Scan for C++ and Python examples and return a list of C++ examples (which
+  # can be set as dependencies of examples-as-test test suites)
+  build_lib_scan_examples(module_examples)
+
+  # Build tests if requested
+  build_lib_tests(
+    "${BLIB_LIBNAME}" "${BLIB_IGNORE_PCH}" "${FOLDER}" "${BLIB_TEST_SOURCES}"
+  )
+
+  # Handle package export
+  install(
+    TARGETS ${BLIB_LIBNAME}
+    EXPORT ns3ExportTargets
+    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/
+    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/
+    RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}/
+    PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ns3"
+    PRIVATE_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ns3"
+  )
+  if(${NS3_VERBOSE})
+    message(STATUS "Processed ${FOLDER}")
+  endif()
+endfunction()
+
+function(build_lib_reexport_third_party_libraries libname libraries_to_link)
+  # Separate ns-3 and non-ns-3 libraries to manage their propagation properly
+  separate_ns3_from_non_ns3_libs(
+    "${libname}" "${libraries_to_link}" ns_libraries_to_link
+    non_ns_libraries_to_link
+  )
+
+  set(ns3-external-libs "${non_ns_libraries_to_link};${ns3-external-libs}"
+      CACHE INTERNAL
+            "list of non-ns libraries to link to NS3_STATIC and NS3_MONOLIB"
+  )
 
   if(NOT ${NS3_REEXPORT_THIRD_PARTY_LIBRARIES})
     # ns-3 libraries are linked publicly, to make sure other modules can find
@@ -259,7 +280,7 @@
     # with NS3_REEXPORT_THIRD_PARTY_LIBRARIES, we export all 3rd-party library
     # include directories, allowing consumers of this module to include and link
     # the 3rd-party code with no additional setup
-    get_target_includes(${lib${BLIB_LIBNAME}} exported_include_directories)
+    get_target_includes(${libname} exported_include_directories)
 
     string(REPLACE "-I" "" exported_include_directories
                    "${exported_include_directories}"
@@ -288,39 +309,22 @@
                    "${exported_include_directories}"
     )
   endif()
-
-  target_link_libraries(
-    ${lib${BLIB_LIBNAME}} ${exported_libraries} ${private_libraries}
-  )
-
-  if(NOT ${XCODE})
-    target_link_libraries(
-      ${lib${BLIB_LIBNAME}}-obj PRIVATE ${ns_libraries_to_link}
-    )
-  endif()
-
-  # set output name of library
-  set_target_properties(
-    ${lib${BLIB_LIBNAME}}
-    PROPERTIES OUTPUT_NAME ns${NS3_VER}-${BLIB_LIBNAME}${build_profile_suffix}
-  )
+  # Set public and private headers linked to the module library
+  target_link_libraries(${libname} ${exported_libraries} ${private_libraries})
 
   # export include directories used by this library so that it can be used by
   # 3rd-party consumers of ns-3 using find_package(ns3) this will automatically
   # add the build/include path to them, so that they can ns-3 headers with
   # <ns3/something.h>
   target_include_directories(
-    ${lib${BLIB_LIBNAME}}
-    PUBLIC $<BUILD_INTERFACE:${CMAKE_OUTPUT_DIRECTORY}/include>
-           $<INSTALL_INTERFACE:include>
+    ${libname} PUBLIC $<BUILD_INTERFACE:${CMAKE_OUTPUT_DIRECTORY}/include>
+                      $<INSTALL_INTERFACE:include>
     INTERFACE ${exported_include_directories}
   )
+endfunction()
 
-  # Export definitions as interface definitions, propagating local definitions
-  # to other modules and scratches
-  get_target_property(
-    target_definitions ${lib${BLIB_LIBNAME}} COMPILE_DEFINITIONS
-  )
+function(build_lib_export_definitions_as_interface_definitions libname)
+  get_target_property(target_definitions ${libname} COMPILE_DEFINITIONS)
   if(${target_definitions} STREQUAL "target_definitions-NOTFOUND")
     set(target_definitions)
   endif()
@@ -329,62 +333,116 @@
   list(REMOVE_DUPLICATES exported_definitions)
   list(REMOVE_ITEM exported_definitions "")
   set_target_properties(
-    ${lib${BLIB_LIBNAME}} PROPERTIES INTERFACE_COMPILE_DEFINITIONS
-                                     "${exported_definitions}"
+    ${libname} PROPERTIES INTERFACE_COMPILE_DEFINITIONS
+                          "${exported_definitions}"
   )
+endfunction()
 
-  set(ns3-external-libs "${non_ns_libraries_to_link};${ns3-external-libs}"
-      CACHE INTERNAL
-            "list of non-ns libraries to link to NS3_STATIC and NS3_MONOLIB"
+# cmake-format: off
+#
+# This macro processes a ns-3 module example
+#
+# Arguments:
+# NAME = example name (e.g. command-line-example)
+# LIBNAME = parent library (e.g. core)
+# SOURCE_FILES = "cmake;list;of;.cc;files;"
+# HEADER_FILES = "cmake;list;of;public;.h;files;"
+# LIBRARIES_TO_LINK = "cmake;list;of;${library_names};"
+#
+function(build_lib_example)
+  # Argument parsing
+  set(options IGNORE_PCH)
+  set(oneValueArgs NAME)
+  set(multiValueArgs SOURCE_FILES HEADER_FILES LIBRARIES_TO_LINK)
+  cmake_parse_arguments("BLIB_EXAMPLE" "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
+
+  # Get path src/module or contrib/module
+  string(REPLACE "${PROJECT_SOURCE_DIR}/" "" FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
+
+  # cmake-format: on
+  check_for_missing_libraries(
+    missing_dependencies "${BLIB_EXAMPLE_LIBRARIES_TO_LINK}"
   )
-  if(${NS3_STATIC} OR ${NS3_MONOLIB})
-    set(lib-ns3-static-objs
-        "$<TARGET_OBJECTS:${lib${BLIB_LIBNAME}-obj}>;${lib-ns3-static-objs}"
-        CACHE
-          INTERNAL
-          "list of object files from module used by NS3_STATIC and NS3_MONOLIB"
-    )
-  endif()
 
-  # Write a module header that includes all headers from that module
-  write_module_header("${BLIB_LIBNAME}" "${BLIB_HEADER_FILES}")
+  # Check if a module example should be built
+  build_lib_check_examples_and_tests_filtered_in(${BLIB_LIBNAME} filtered_in)
 
-  # Check if headers actually exist to prevent copying errors during
-  # installation
-  get_target_property(headers_to_check ${lib${BLIB_LIBNAME}} PUBLIC_HEADER)
-  set(missing_headers)
-  foreach(header ${headers_to_check})
-    if(NOT ((EXISTS ${header}) OR (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${header})
-           )
-    )
-      list(APPEND missing_headers ${header})
+  if((NOT missing_dependencies) AND ${filtered_in})
+    # Convert boolean into text to forward argument
+    set(IGNORE_PCH)
+    if(${BLIB_EXAMPLE_IGNORE_PCH})
+      set(IGNORE_PCH "IGNORE_PCH")
     endif()
-  endforeach()
-  if(missing_headers)
-    message(
-      FATAL_ERROR "Missing header files for ${BLIB_LIBNAME}: ${missing_headers}"
+    # Create executable with sources and headers
+    # cmake-format: off
+    build_exec(
+      EXECNAME ${BLIB_EXAMPLE_NAME}
+      SOURCE_FILES ${BLIB_EXAMPLE_SOURCE_FILES}
+      HEADER_FILES ${BLIB_EXAMPLE_HEADER_FILES}
+      LIBRARIES_TO_LINK
+        ${BLIB_LIBNAME} ${BLIB_EXAMPLE_LIBRARIES_TO_LINK}
+        ${ns3-optional-visualizer-lib}
+      EXECUTABLE_DIRECTORY_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${FOLDER}/
+      ${IGNORE_PCH}
     )
+    # cmake-format: on
   endif()
+endfunction()
 
-  # Copy all header files to outputfolder/include before each build
-  copy_headers_before_building_lib(
-    ${BLIB_LIBNAME} ${CMAKE_HEADER_OUTPUT_DIRECTORY} "${BLIB_HEADER_FILES}"
-    public
-  )
-  if(BLIB_PRIVATE_HEADER_FILES)
-    copy_headers_before_building_lib(
-      ${BLIB_LIBNAME} ${CMAKE_HEADER_OUTPUT_DIRECTORY}
-      "${BLIB_PRIVATE_HEADER_FILES}" private
-    )
+# Check if module examples and tests should be built or not
+#
+# Arguments: libname (e.g. core, wifi), filtered_in (return boolean)
+function(build_lib_check_examples_and_tests_filtered_in libname filtered_in)
+  set(in ON)
+  if(NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
+    set(in OFF)
+    if(${libname} IN_LIST NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
+      set(in ON)
+    endif()
   endif()
+  set(${filtered_in} ${in} PARENT_SCOPE)
+endfunction()
 
-  if(BLIB_DEPRECATED_HEADER_FILES)
-    copy_headers_before_building_lib(
-      ${BLIB_LIBNAME} ${CMAKE_HEADER_OUTPUT_DIRECTORY}
-      "${BLIB_DEPRECATED_HEADER_FILES}" deprecated
-    )
-  endif()
+# Separate the LIBRARIES_TO_LINK list into ns-3 modules and external libraries
+#
+# Arguments: libname (e.g. core, wifi), libraries_to_link (input list),
+# ns_libraries_to_link and non_ns_libraries_to_link (output lists)
+function(separate_ns3_from_non_ns3_libs libname libraries_to_link
+         ns_libraries_to_link non_ns_libraries_to_link
+)
+  set(non_ns_libs ${CMAKE_THREAD_LIBS_INIT})
+  set(ns_libs)
+  foreach(library ${libraries_to_link})
+    remove_lib_prefix("${library}" module_name)
+
+    # In case the dependency library matches the ns-3 module, we are most likely
+    # dealing with brite, click and openflow collisions. All the ns-3 module
+    # targets used to be prefixed with 'lib' to be differentiable, but now we
+    # are dropping it. To disambiguate them two, we assume these external
+    # libraries are shared libraries by adding suffixes.
+    if("${library}" STREQUAL "${libname}")
+      list(APPEND non_ns_libs ${library}${CMAKE_SHARED_LIBRARY_SUFFIX})
+      continue()
+    endif()
+
+    # Check if the module exists in the ns-3 modules list or if it is a
+    # 3rd-party library
+    if(${module_name} IN_LIST ns3-all-enabled-modules)
+      list(APPEND ns_libs ${library})
+    else()
+      list(APPEND non_ns_libs ${library})
+    endif()
+    unset(module_name)
+  endforeach()
+  set(${ns_libraries_to_link} ${ns_libs} PARENT_SCOPE)
+  set(${non_ns_libraries_to_link} ${non_ns_libs} PARENT_SCOPE)
+endfunction()
 
+# This macro scans for C++ and Python examples for a given module and return a
+# list of C++ examples
+#
+# Arguments: module_cpp_examples = return list of C++ examples
+function(build_lib_scan_examples module_cpp_examples)
   # Build lib examples if requested
   set(examples_before ${ns3-execs-clean})
   foreach(example_folder example;examples)
@@ -399,153 +457,113 @@
   endforeach()
   set(module_examples ${ns3-execs-clean})
 
-  # Filter only module examples
-  foreach(example ${examples_before})
-    list(REMOVE_ITEM module_examples ${example})
-  endforeach()
-  unset(examples_before)
+  # Return a list of module c++ examples (current examples - previous examples)
+  list(REMOVE_ITEM module_examples "${examples_before}")
+  set(${module_cpp_examples} ${module_examples} PARENT_SCOPE)
+endfunction()
 
-  # Check if the module tests should be built
-  set(filtered_in ON)
-  if(NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
-    set(filtered_in OFF)
-    if(${BLIB_LIBNAME} IN_LIST NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
-      set(filtered_in ON)
+# This macro builds the test library for the module library
+#
+# Arguments: libname (e.g. core), ignore_pch (TRUE/FALSE), folder (src/contrib),
+# sources (list of .cc's)
+function(build_lib_tests libname ignore_pch folder test_sources)
+  if(${ENABLE_TESTS})
+    # Check if the module tests should be built
+    build_lib_check_examples_and_tests_filtered_in(${libname} filtered_in)
+    if(NOT ${filtered_in})
+      return()
     endif()
-  endif()
-
-  # Build tests if requested
-  if(${ENABLE_TESTS} AND ${filtered_in})
-    list(LENGTH BLIB_TEST_SOURCES test_source_len)
+    list(LENGTH test_sources test_source_len)
     if(${test_source_len} GREATER 0)
-      # Create BLIB_LIBNAME of output library test of module
-      set(test${BLIB_LIBNAME} lib${BLIB_LIBNAME}-test CACHE INTERNAL "")
+      # Create libname of output library test of module
+      set(test${libname} ${libname}-test CACHE INTERNAL "")
 
       # Create shared library containing tests of the module on UNIX and just
       # the object file that will be part of test-runner on Windows
       if(WIN32)
         set(ns3-libs-tests
-            "$<TARGET_OBJECTS:${test${BLIB_LIBNAME}}>;${ns3-libs-tests}"
+            "$<TARGET_OBJECTS:${test${libname}}>;${ns3-libs-tests}"
             CACHE INTERNAL "list of test libraries"
         )
-        add_library(${test${BLIB_LIBNAME}} OBJECT "${BLIB_TEST_SOURCES}")
+        add_library(${test${libname}} OBJECT "${test_sources}")
       else()
-        set(ns3-libs-tests "${test${BLIB_LIBNAME}};${ns3-libs-tests}"
+        set(ns3-libs-tests "${test${libname}};${ns3-libs-tests}"
             CACHE INTERNAL "list of test libraries"
         )
-        add_library(${test${BLIB_LIBNAME}} SHARED "${BLIB_TEST_SOURCES}")
+        add_library(${test${libname}} SHARED "${test_sources}")
 
         # Link test library to the module library
         if(${NS3_MONOLIB})
           target_link_libraries(
-            ${test${BLIB_LIBNAME}} ${LIB_AS_NEEDED_PRE} ${lib-ns3-monolib}
+            ${test${libname}} ${LIB_AS_NEEDED_PRE} ${lib-ns3-monolib}
             ${LIB_AS_NEEDED_POST}
           )
         else()
           target_link_libraries(
-            ${test${BLIB_LIBNAME}} ${LIB_AS_NEEDED_PRE} ${lib${BLIB_LIBNAME}}
+            ${test${libname}} ${LIB_AS_NEEDED_PRE} ${libname}
             "${BLIB_LIBRARIES_TO_LINK}" ${LIB_AS_NEEDED_POST}
           )
         endif()
         set_target_properties(
-          ${test${BLIB_LIBNAME}}
+          ${test${libname}}
           PROPERTIES OUTPUT_NAME
-                     ns${NS3_VER}-${BLIB_LIBNAME}-test${build_profile_suffix}
+                     ns${NS3_VER}-${libname}-test${build_profile_suffix}
         )
       endif()
       target_compile_definitions(
-        ${test${BLIB_LIBNAME}} PRIVATE NS_TEST_SOURCEDIR="${FOLDER}/test"
+        ${test${libname}} PRIVATE NS_TEST_SOURCEDIR="${folder}/test"
       )
-      if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${BLIB_IGNORE_PCH}))
-        target_precompile_headers(${test${BLIB_LIBNAME}} REUSE_FROM stdlib_pch)
+      if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${ignore_pch}))
+        target_precompile_headers(${test${libname}} REUSE_FROM stdlib_pch)
       endif()
 
       # Add dependency between tests and examples used as tests
-      if(${ENABLE_EXAMPLES})
-        foreach(source_file ${BLIB_TEST_SOURCES})
-          file(READ ${source_file} source_file_contents)
-          foreach(example_as_test ${module_examples})
-            string(FIND "${source_file_contents}" "${example_as_test}"
-                        is_sub_string
-            )
-            if(NOT (${is_sub_string} EQUAL -1))
-              add_dependencies(test-runner-examples-as-tests ${example_as_test})
-            endif()
-          endforeach()
-        endforeach()
-      endif()
+      examples_as_tests_dependencies("${module_examples}" "${test_sources}")
     endif()
   endif()
-
-  # Handle package export
-  install(
-    TARGETS ${lib${BLIB_LIBNAME}}
-    EXPORT ns3ExportTargets
-    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/
-    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/
-    RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR}/
-    PUBLIC_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ns3"
-    PRIVATE_HEADER DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/ns3"
-  )
-  if(${NS3_VERBOSE})
-    message(STATUS "Processed ${FOLDER}")
-  endif()
 endfunction()
 
-# cmake-format: off
-#
-# This macro processes a ns-3 module example
-#
-# Arguments:
-# NAME = example name (e.g. command-line-example)
-# LIBNAME = parent library (e.g. core)
-# SOURCE_FILES = "cmake;list;of;.cc;files;"
-# HEADER_FILES = "cmake;list;of;public;.h;files;"
-# LIBRARIES_TO_LINK = "cmake;list;of;${library_names};"
+# This macro scans for C++ examples used by examples-as-tests suites
 #
-function(build_lib_example)
-  # Argument parsing
-  set(options IGNORE_PCH)
-  set(oneValueArgs NAME)
-  set(multiValueArgs SOURCE_FILES HEADER_FILES LIBRARIES_TO_LINK)
-  cmake_parse_arguments("BLIB_EXAMPLE" "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
-
-  # Get path src/module or contrib/module
-  string(REPLACE "${PROJECT_SOURCE_DIR}/" "" FOLDER "${CMAKE_CURRENT_SOURCE_DIR}")
-
-  # cmake-format: on
-  check_for_missing_libraries(
-    missing_dependencies "${BLIB_EXAMPLE_LIBRARIES_TO_LINK}"
-  )
-
-  # Check if a module example should be built
-  set(filtered_in ON)
-  if(NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
-    set(filtered_in OFF)
-    if(${BLIB_LIBNAME} IN_LIST NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
-      set(filtered_in ON)
-    endif()
+# Arguments: module_cpp_examples = list of C++ example executable names,
+# module_test_sources = list of C++ sources with tests
+function(examples_as_tests_dependencies module_cpp_examples module_test_sources)
+  if(${ENABLE_EXAMPLES})
+    foreach(source_file ${module_test_sources})
+      file(READ ${source_file} source_file_contents)
+      foreach(example_as_test ${module_cpp_examples})
+        string(FIND "${source_file_contents}" "${example_as_test}"
+                    is_sub_string
+        )
+        if(NOT (${is_sub_string} EQUAL -1))
+          add_dependencies(test-runner-examples-as-tests ${example_as_test})
+        endif()
+      endforeach()
+    endforeach()
   endif()
+endfunction()
 
-  if((NOT missing_dependencies) AND ${filtered_in})
-    # Convert boolean into text to forward argument
-    set(IGNORE_PCH)
-    if(${BLIB_EXAMPLE_IGNORE_PCH})
-      set(IGNORE_PCH "IGNORE_PCH")
+# This macro checks if all headers from a module actually exist or are missing
+#
+# Arguments: target_name = module name (e.g. core, wifi)
+function(build_lib_check_headers target_name)
+  # Retrieve target properties containing the public (which include deprecated)
+  # and private headers
+  get_target_property(headers_to_check ${target_name} PUBLIC_HEADER)
+  get_target_property(headers_to_check2 ${target_name} PRIVATE_HEADER)
+  list(APPEND headers_to_check ${headers_to_check2})
+  set(missing_headers)
+  foreach(header ${headers_to_check})
+    if(NOT ((EXISTS ${header}) OR (EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${header})
+           )
+    )
+      list(APPEND missing_headers ${header})
     endif()
-    # Create executable with sources and headers
-    # cmake-format: off
-    build_exec(
-      EXECNAME ${BLIB_EXAMPLE_NAME}
-      SOURCE_FILES ${BLIB_EXAMPLE_SOURCE_FILES}
-      HEADER_FILES ${BLIB_EXAMPLE_HEADER_FILES}
-      LIBRARIES_TO_LINK
-        ${lib${BLIB_LIBNAME}} ${BLIB_EXAMPLE_LIBRARIES_TO_LINK}
-        ${ns3-optional-visualizer-lib}
-      EXECUTABLE_DIRECTORY_PATH ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${FOLDER}/
-      ${IGNORE_PCH}
+  endforeach()
+  if(missing_headers)
+    message(
+      FATAL_ERROR "Missing header files for ${target_name}: ${missing_headers}"
     )
-    # cmake-format: on
   endif()
 endfunction()
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-ns3rc-parser.cmake ns-3.43/build-support/custom-modules/ns3-ns3rc-parser.cmake
--- ns-3.42/build-support/custom-modules/ns3-ns3rc-parser.cmake	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/build-support/custom-modules/ns3-ns3rc-parser.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-output-directory.cmake ns-3.43/build-support/custom-modules/ns3-output-directory.cmake
--- ns-3.42/build-support/custom-modules/ns3-output-directory.cmake	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/build-support/custom-modules/ns3-output-directory.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-platform-support.cmake ns-3.43/build-support/custom-modules/ns3-platform-support.cmake
--- ns-3.42/build-support/custom-modules/ns3-platform-support.cmake	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/build-support/custom-modules/ns3-platform-support.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
@@ -28,9 +17,26 @@
   endif()
 endif()
 
+# cmake-format: off
+# Windows injects **BY DEFAULT** its %PATH% into WSL $PATH
+# Detect and warn users how to disable path injection
+# cmake-format: on
+if("$ENV{PATH}" MATCHES "/mnt/c/")
+  message(
+    WARNING
+      "To prevent Windows path injection on WSL, append the following to /etc/wsl.conf, then use `wsl --shutdown` to restart the WSL VM:
+[interop]
+appendWindowsPath = false"
+  )
+endif()
+
 # Set Linux flag if on Linux
 if(UNIX AND NOT APPLE)
-  set(LINUX TRUE)
+  if("${CMAKE_SYSTEM_NAME}" STREQUAL "Linux")
+    set(LINUX TRUE)
+  else()
+    set(BSD TRUE)
+  endif()
   add_definitions(-D__LINUX__)
 endif()
 
@@ -64,8 +70,8 @@
 endif()
 
 if(${XCODE})
-  # Is that so hard not to break people's CI, AAPL? Why would you output the
-  # targets to a Debug/Release subfolder? Why?
+  # Prevent multi-config generators from placing output files into per
+  # configuration directory
   foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
     string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
     set(CMAKE_RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/custom-modules/ns3-vcpkg-hunter.cmake ns-3.43/build-support/custom-modules/ns3-vcpkg-hunter.cmake
--- ns-3.42/build-support/custom-modules/ns3-vcpkg-hunter.cmake	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/build-support/custom-modules/ns3-vcpkg-hunter.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2017-2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/macros-and-definitions.cmake ns-3.43/build-support/macros-and-definitions.cmake
--- ns-3.42/build-support/macros-and-definitions.cmake	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/build-support/macros-and-definitions.cmake	2024-10-09 16:41:09.764655400 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2017-2021 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License version 2 as published by the Free
-# Software Foundation;
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
-# details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc., 59 Temple
-# Place, Suite 330, Boston, MA  02111-1307 USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
@@ -92,19 +81,13 @@
 endmacro()
 
 macro(library_target_name libname targetname)
-  set(${targetname} lib${libname})
+  set(${targetname} ${libname})
 endmacro()
 
 macro(clear_global_cached_variables)
   # clear cache variables
   unset(build_profile CACHE)
   unset(build_profile_suffix CACHE)
-  set(lib-ns3-static-objs
-      ""
-      CACHE
-        INTERNAL
-        "list of object files from module used by NS3_STATIC and NS3_MONOLIB"
-  )
   set(ns3-contrib-libs "" CACHE INTERNAL "list of processed contrib modules")
   set(ns3-example-folders "" CACHE INTERNAL "list of example folders")
   set(ns3-execs "" CACHE INTERNAL "list of c++ executables")
@@ -121,7 +104,6 @@
   mark_as_advanced(
     build_profile
     build_profile_suffix
-    lib-ns3-static-objs
     ns3-contrib-libs
     ns3-example-folders
     ns3-execs
@@ -199,7 +181,8 @@
   set(ENABLE_TESTS OFF)
   if(${NS3_TESTS} OR ${ns3rc_tests_enabled})
     set(ENABLE_TESTS ON)
-    enable_testing()
+    # CTest creates a TEST target that conflicts with ns-3 test library
+    # enable_testing()
   else()
     list(REMOVE_ITEM libs_to_build test)
   endif()
@@ -220,6 +203,13 @@
     unset(CMAKE_VERBOSE_MAKEFILE CACHE)
   endif()
 
+  if(${NS3_FORCE_LOCAL_DEPENDENCIES})
+    set(CMAKE_FIND_FRAMEWORK NEVER)
+    set(CMAKE_FIND_APPBUNDLE NEVER)
+    set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE)
+    set(CMAKE_FIND_USE_SYSTEM_ENVIRONMENT_PATH FALSE)
+  endif()
+
   # Set warning level and warning as errors
   if(${NS3_WARNINGS})
     if(DEFINED MSVC)
@@ -319,10 +309,17 @@
   if("${CMAKE_FORMAT_PROGRAM}" STREQUAL "CMAKE_FORMAT_PROGRAM-NOTFOUND")
     message(${HIGHLIGHTED_STATUS} "Proceeding without cmake-format")
   else()
-    file(GLOB_RECURSE MODULES_CMAKE_FILES src/**/CMakeLists.txt
-         contrib/**/CMakeLists.txt examples/**/CMakeLists.txt
-         scratch/**/CMakeLists.txt
+    file(
+      GLOB
+      MODULES_CMAKE_FILES
+      src/**/CMakeLists.txt
+      contrib/**/CMakeLists.txt
+      src/**/examples/CMakeLists.txt
+      contrib/**/examples/CMakeLists.txt
+      examples/**/CMakeLists.txt
+      scratch/**/CMakeLists.txt
     )
+    file(GLOB_RECURSE SCRATCH_CMAKE_FILES scratch/**/CMakeLists.txt)
     file(
       GLOB
       INTERNAL_CMAKE_FILES
@@ -341,7 +338,7 @@
       COMMAND
         ${CMAKE_FORMAT_PROGRAM} -c
         ${PROJECT_SOURCE_DIR}/build-support/cmake-format-modules.yaml -i
-        ${MODULES_CMAKE_FILES}
+        ${MODULES_CMAKE_FILES} ${SCRATCH_CMAKE_FILES}
     )
     add_custom_target(
       cmake-format-check
@@ -684,14 +681,6 @@
         "Bindings: python bindings require Python, but it could not be found"
       )
       set(ENABLE_PYTHON_BINDINGS_REASON "missing dependency: python")
-    elseif(APPLE AND "${CMAKE_SYSTEM_PROCESSOR}" STREQUAL "arm64")
-      # Warn users that Cppyy on ARM Macs isn't supported yet
-      message(${HIGHLIGHTED_STATUS}
-              "Bindings: macOS silicon detected -- see issue 930"
-      )
-      set(ENABLE_PYTHON_BINDINGS_REASON
-          "macOS silicon detected -- see issue 930"
-      )
     else()
       check_deps(missing_packages PYTHON_PACKAGES cppyy)
       if(missing_packages)
@@ -1159,7 +1148,11 @@
   set(PLATFORM_UNSUPPORTED_POST "features. Continuing without them.")
   # Remove from libs_to_build all incompatible libraries or the ones that
   # dependencies couldn't be installed
-  if(APPLE OR WSLv1 OR WIN32)
+  if(APPLE
+     OR WSLv1
+     OR WIN32
+     OR BSD
+  )
     set(ENABLE_TAP OFF)
     set(ENABLE_EMU OFF)
     set(ENABLE_FDNETDEV FALSE)
@@ -1188,7 +1181,6 @@
   set(ns3-all-enabled-modules)
   set(ns3-libs-tests)
   set(ns3-contrib-libs)
-  set(lib-ns3-static-objs)
   set(ns3-external-libs)
 
   foreach(libname ${scanned_modules})
@@ -1388,8 +1380,8 @@
   set(filtered_in ON)
   if(NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
     set(filtered_in OFF)
-    foreach(filtered_module NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
-      if(${filtered_module} IN_LIST EXAMPLE_LIBRARIES_TO_LINK)
+    foreach(required_module ${EXAMPLE_LIBRARIES_TO_LINK})
+      if(${required_module} IN_LIST NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
         set(filtered_in ON)
       endif()
     endforeach()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/build-support/version-defines-template.h ns-3.43/build-support/version-defines-template.h
--- ns-3.42/build-support/version-defines-template.h	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/build-support/version-defines-template.h	2024-10-09 16:41:09.764655400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathew Bielejeski <bielejeski1@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/CHANGES.md ns-3.43/CHANGES.md
--- ns-3.42/CHANGES.md	2024-05-29 15:30:03.724115800 -0700
+++ ns-3.43/CHANGES.md	2024-10-09 16:41:36.356755000 -0700
@@ -13,6 +13,49 @@
 
 This file is a best-effort approach to solving this issue; we will do our best but can guarantee that there will be things that fall through the cracks, unfortunately. If you, as a user, can suggest improvements to this file based on your experience, please contribute a patch or drop us a note on ns-developers mailing list.
 
+Changes from ns-3.42 to ns-3.43
+-------------------------------
+
+### New API
+
+* (applications) A new trace source `BulkSendApplication::TcpRetransmission` has been added for tracing TCP retranmissions.
+* (core) Added `LaplacianRandomVariable` class implementing the Laplacian random variable, and `LargestExtremeValueRandomVariable` class implementing the Largest Extreme Value random variable.
+* (lr-wpan) Added a new test to `lr-wpan-cca-test.cc` suite. The added test demonstrates a known CCA vulnerability window.
+* (tcp) A new trace source `TcpSocketBase::LastRtt` has been added for tracing the last RTT sample observed. The existing trace source `TcpSocketBase::Rtt` is still providing the smoothed RTT, although it had been incorrectly documented as providing the last RTT.
+* (wifi) Added a new trace source to `WifiPhy`: **PhyRxMacHeaderEnd**, which is fired when the reception of the MAC header of an MPDU is completed and provides the MAC header and the remaining PSDU duration. The trace source is actually fired when the new **NotifyMacHdrRxEnd** attribute of `WifiPhy` is set to true (it is set to false by default).
+* (wifi) WifiHelper::SetStandard() method now accepts selected string values in addition to enum argument.
+* (wifi) Added a new method **SetPcapCaptureType** to `WifiPhyHelper` to control how PCAPs are generated for MLD devices.
+
+### Changes to existing API
+
+* (core) Deprecated struct `TypeTraits`. Functionality provided by the standard library header `<type_traits>` should be used instead.
+* (core) Add `AddDeprecatedName` to TypeId. This allows for TypeIds to transition to name TypeIds that use namespaces while still supporting the old name.
+* (energy) Energy module TypeId now uses the name that includes the namespace `ns3::energy`, the old name is now deprecated.
+* (energy) Documentation was extended and reformatted.
+* (lr-wpan) Lr-wpan module TypeId now uses the name that includes the namespace `ns3::lrwpan`, the old name is now deprecated.
+* (lr-wpan) Attribute `macBeaconPayload` in `MacPibAttributes` is now a std::vector<uint8_t> instead of a packet pointer.
+* (lr-wpan) Removes the word `address` from the MAC address prefix when `LOG_PREFIX_FUNC` is used.
+* (lr-wpan) Removes the word `address` from the CSMA-CA logs prefix when `LOG_PREFIX_FUNC` is used.
+* (lr-wpan) Added `AssignStreams` function to the MAC.
+* (lr-wpan) Attribute `macRxOnWhenIdle` added to the supported attributes in `MacPibAttributes`.
+* (lr-wpan) Attribute `macPromiscuousMode` added to the supported attributes in `MacPibAttributes`.
+* (lr-wpan) Attribute `macAssociatePermit` added to the supported attributes in `MacPibAttributes`.
+* (lr-wpan) Attribute `pCurrentChannel` added to the supported attributes in `MacPibAttributes`.
+* (lr-wpan) Attribute `pCurrentPage` added to the supported attributes in `MacPibAttributes`.
+* (lr-wpan) Documentation was extended and reformatted.
+* (wifi) The `WifiHelper::AssignStreams()` method has been made static.
+* (wifi) Attribute `ChannelSettings` has been changed to allow configuration of non-contiguous operating channels by specifying each 80 MHz segment. It has changed from TupleValue to AttributeContainerValue, but the configuration of contiguous channels using a StringValue still works as before.
+
+### Changes to build system
+
+* Module libraries targets names have their "lib" prefixes removed. This affects target selection within IDEs and ns-3 importing via CMake.
+
+### Changed behavior
+
+* (lr-wpan) Beacons are now transmitted using CSMA-CA when requested from a beacon request command.
+* (lr-wpan) Upon a beacon request command, beacons are transmitted after a jitter to reduce the probability of collisions.
+* (tcp) TCP Proportional Rate Reduction (PRR) recovery has been aligned to the updates in draft-ietf-tcpm-prr-rfc6937bis
+
 Changes from ns-3.41 to ns-3.42
 -------------------------------
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/CMakeLists.txt ns-3.43/CMakeLists.txt
--- ns-3.42/CMakeLists.txt	2024-05-29 15:29:46.828072800 -0700
+++ ns-3.43/CMakeLists.txt	2024-10-09 16:41:09.756655500 -0700
@@ -11,9 +11,9 @@
 file(STRINGS VERSION NS3_VER)
 
 # minimum compiler versions
-set(AppleClang_MinVersion 11.0.0)
-set(Clang_MinVersion 10.0.0)
-set(GNU_MinVersion 9.1.0)
+set(AppleClang_MinVersion 13.1.6)
+set(Clang_MinVersion 11.0.0)
+set(GNU_MinVersion 10.1.0)
 
 # common options
 option(NS3_ASSERT "Enable assert on failure" OFF)
@@ -60,6 +60,11 @@
 option(NS3_FETCH_OPTIONAL_COMPONENTS
        "Fetch Brite, Click and Openflow dependencies" OFF
 )
+option(
+  NS3_FORCE_LOCAL_DEPENDENCIES
+  "Only search applications, headers, libraries on explicitly set directories"
+  OFF
+)
 option(NS3_GSL "Build with GSL support" ON)
 option(NS3_GTK3 "Build with GTK3 support" ON)
 option(NS3_LINK_TIME_OPTIMIZATION "Build with link-time optimization" OFF)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/CONTRIBUTING.md ns-3.43/CONTRIBUTING.md
--- ns-3.42/CONTRIBUTING.md	2024-05-29 15:29:46.828072800 -0700
+++ ns-3.43/CONTRIBUTING.md	2024-10-09 16:41:09.756655500 -0700
@@ -2,8 +2,12 @@
 
 *This file is heavily inspired by Atom's [CONTRIBUTING.md file](https://raw.githubusercontent.com/atom/atom/master/CONTRIBUTING.md).*
 
+ns-3 is a free, open source software project that welcomes contributions from users worldwide.
+
 The following is a set of guidelines for contributing to ns-3, which are hosted in the [nsnam organization](https://gitlab.com/nsnam) on GitLab.com. These are mostly guidelines, not rules. Use your best judgment, and feel free to propose changes to this document in a merge request.
 
+The full documentation about how to contribute to ns-3 is available in the [ns-3 Contributing Code](http://www.nsnam.org/developers/contributing-code) website.
+
 ## Table Of Contents
 
 * [I do not want to read this whole thing, I just have a question](#i-do-not-want-to-read-this-whole-thing-i-just-have-a-question)
@@ -156,10 +160,11 @@
 
 ### Git Commit Messages
 
-* Use the present tense ("Add feature" not "Added feature")
-* Use the imperative mood ("Move cursor to..." not "Moves cursor to...")
+* Use the present tense (e.g., "Add feature" not "Added feature")
+* Use the imperative mood (e.g., "Move cursor to..." not "Moves cursor to...")
 * Limit the first line to 72 characters or less
-* Reference issues in the first line, by prepending `[#issue]`
+* Reference the modules edited in the commit, except if the change applies to many modules (e.g., "core, network: ...")
+* If a commit fixes an issue, add "(fixes #issue)" to the commit message (e.g., "core: (fixes #issue) ...")
 
 ### C++ Styleguide
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/contributing/source/coding-style.rst ns-3.43/doc/contributing/source/coding-style.rst
--- ns-3.42/doc/contributing/source/coding-style.rst	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/doc/contributing/source/coding-style.rst	2024-10-09 16:41:09.764655400 -0700
@@ -21,6 +21,11 @@
 to define and enforce the C++ coding style. Clang-format can be easily integrated
 with modern IDEs or run manually on the command-line.
 
+Besides clang-format, |ns3| adopts other coding-style guidelines that are not covered
+by clang-format, which are explained in this document.
+Read the ``check-style-clang-format.py`` section below for information on how to
+use this Python script to check and fix all formatting guidelines followed by |ns3|.
+
 Clang-format installation
 =========================
 
@@ -86,10 +91,34 @@
 Clang-format Git integration
 ============================
 
-Clang-format can be integrated with Git to reformat existing Git patches, such as
+Clang-format integrates with Git to format Git commits or changes not yet committed, such as
 pending merge requests on the GitLab repository. The full documentation is available on
 `clang-format Git integration <https://clang.llvm.org/docs/ClangFormat.html#git-integration>`_
 
+To fix the formatting of files with Git, run the following commands in the |ns3| main directory.
+These commands do not change past commits. Instead, the reformatted files are left in the
+workspace. These changes should be squashed to the corresponding commits, in order to fix them.
+
+.. sourcecode:: console
+
+  # Fix all commits of the current branch, relative to the master branch
+  git clang-format master
+
+  # Fix all staged changes (i.e., changes that have been `git add`ed):
+  git clang-format
+
+  # Fix all changes staged and unstaged:
+  git clang-format -f
+
+  # Fix specific files:
+  git clang-format path_to_file
+
+  # Check what formatting changes are needed (if no files provided, check all staged files):
+  git clang-format --diff
+
+Note that this only fixes formatting issues related to clang-format.
+For other |ns3| coding style guidelines, read the ``check-style-clang-format.py`` section below.
+
 In addition to Git patches,
 `clang-format-diff <https://clang.llvm.org/docs/ClangFormat.html#script-for-patch-reformatting>`_
 can also be used to reformat existing patches produced with the ``diff`` tool.
@@ -121,15 +150,25 @@
 We recommend running this script over your newly introduced C++ files prior to submission
 as a Merge Request.
 
-The script has multiple modes of operation. By default, the script checks if
-source code files are well formatted, if there are no #include headers from the same
-module with the "ns3/" prefix, and text files do not have trailing whitespace
-nor tabs. The process returns a zero exit code if all files adhere to these rules.
+The script performs multiple style checks. By default, the script runs the following checks:
+
+* Check code formatting using clang-format. Respects clang-format guards.
+* Check if local ``#include`` headers do not use the "ns3/" prefix. Respects clang-format guards.
+* Check if there are no trailing whitespace. Always checked.
+* Check if there are no tabs. Respects clang-format guards.
+* Check if source code files use SPDX licenses rather than GPL license text. Respects clang-format guards.
+
+The process returns a zero exit code if all files adhere to these rules.
 If there are files that do not comply with the rules, the process returns a non-zero
 exit code and lists the respective files. This mode is useful for developers editing
 their code and for the GitLab CI/CD pipeline to check if the codebase is well formatted.
 All checks are enabled by default. Users can disable specific checks using the corresponding
-flags: ``--no-include-prefixes``, ``--no-formatting``, ``--no-whitespace`` and ``--no-tabs``.
+flags:
+
+* ``--no-formatting``
+* ``--no-include-prefixes``
+* ``--no-whitespace``
+* ``--no-tabs``
 
 Additional information about the formatting issues detected by the script can be enabled
 by adding the ``-v, --verbose`` flag.
@@ -161,8 +200,8 @@
   # Specific directory or file
   /path/to/utils/check-style-clang-format.py --fix absolute_or_relative/path/to/directory_or_file
 
-  # Modified files
-  git diff --name-only | xargs ./utils/check-style-clang-format.py --fix
+  # Files modified by the current branch, relative to the master branch
+  git diff --name-only master | xargs ./utils/check-style-clang-format.py --fix
 
 Clang-tidy
 **********
@@ -620,18 +659,7 @@
   /*
    * Copyright (c) YEAR COPYRIGHTHOLDER
    *
-   * This program is free software; you can redistribute it and/or modify
-   * it under the terms of the GNU General Public License version 2 as
-   * published by the Free Software Foundation;
-   *
-   * This program is distributed in the hope that it will be useful,
-   * but WITHOUT ANY WARRANTY; without even the implied warranty of
-   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   * GNU General Public License for more details.
-   *
-   * You should have received a copy of the GNU General Public License
-   * along with this program; if not, write to the Free Software
-   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+   * SPDX-License-Identifier: GPL-2.0-only
    *
    * Author: MyName <myemail@example.com>
    */
@@ -666,7 +694,7 @@
        * A detailed description of the purpose of the method.
        *
        * \param firstParam a short description of the purpose of this parameter
-       * \returns a short description of what is returned from this function.
+       * \return a short description of what is returned from this function.
        */
       int DoSomething(int firstParam);
 
@@ -690,7 +718,7 @@
   /*
    * Copyright (c) YEAR COPYRIGHTHOLDER
    *
-   * 3-paragraph GPL blurb
+   * SPDX-License-Identifier: GPL-2.0-only
    *
    * Author: MyName <myemail@foo.com>
    */
@@ -803,7 +831,6 @@
 When declaring variables that are easily deducible from context, prefer to declare them
 with ``auto`` instead of repeating the type name. Not only does this improve code readability,
 by making lines shorter, but it also facilitates future code refactoring.
-When declaring variables, prefer to use direct-initialization, to avoid repeating the type name.
 
 .. sourcecode:: cpp
 
@@ -817,12 +844,74 @@
   auto* ptr = new int[10];
   auto m = static_cast<uint8_t>(97 + (i % 26));
 
+
+Initialization
+==============
+
+When declaring variables, prefer to use direct-initialization, to avoid repeating the type name.
+
+.. sourcecode:: cpp
+
   // Avoid splitting the declaration and initialization of variables
   Ipv4Address ipv4Address = Ipv4Address("192.168.0.1")
 
   // Prefer to use direct-initialization
   Ipv4Address ipv4Address("192.168.0.1")
 
+Variables with no default constructor or of primitive types should be initialized when declared.
+
+Variables with default constructors do not need to be explicitly initialized, since the compiler
+already does that. An example of this is the ``ns3::Time`` class, which will initialize to zero.
+
+Member variables of structs and classes should be initialized unless the member has a default
+constructor that guarantees initialization.  Preferably, variables should be initialized together
+with the declaration (in the header file). Alternatively, they can be initialized in the default
+constructor (in the implementation file), and you may see instances of this in the codebase, but
+direct initialization upon declaration is preferred going forward.
+
+If all member variables of a class / struct are directly initialized (see above), they do not
+require explicit default initialization. But if not all variables are initialized, those
+non-initialized variables will contain garbage. Therefore, initializing the class object with
+``{}`` allows all member variables to always be initialized -- either with the provided default
+initialization or with the primitive type's default value (typically 0).
+
+C++ supports two syntax choices for direct initialization, either ``()`` or ``{}``.  There are
+various tradeoffs in the choices for more complicated types (consult the C++ literature on
+brace vs. parentheses initialization), but for the fundamental types like ``double``, either is
+acceptable (please use consistently within files).
+
+Regarding ``ns3::Time``, do not initialize to non-zero integer values as follows, assuming
+that it will be converted to nanoseconds:
+
+.. sourcecode:: cpp
+
+  Time t{1000000};  // This is disallowed
+
+The value will be interpreted according to the current resolution, which is ambiguous.  A
+user's program may have already changed the resolution from the default of nanoseconds to
+something else by the time of this initialization, and it will be instead interpreted according
+to 10^6 * the new resolution unit.
+
+Time initialization to raw floating-point values is additionally fraught, because of rounding.  Doing
+so with small values has led to bugs in practice such as timer timeout values of zero time.
+
+When declaring or manipulating ``Time`` objects with known values, prefer to use integer-based representations and
+arguments over floating-point fractions, where possible, because integer-based is faster.
+This means preferring the use of ``NanoSeconds``, ``MicroSeconds``, and ``MilliSeconds`` over
+``Seconds``.  For example, to represent a tenth of a second, prefer ``MilliSeconds(100)``
+to ``Seconds(0.1)``.
+
+To summarize Time declaration and initialization, consider the following examples and comments:
+
+.. sourcecode:: cpp
+
+  Time t;  // OK, will be value-initialized to integer zero
+  Time t{MilliSeconds(100)};  // OK, fastest, no floating point involved
+  Time t{"100ms"}; // OK, will perform a string conversion; integer would be faster
+  Time t{Seconds(0.1)};  // OK, will invoke Seconds(double); integer would be faster
+  Time t{100000000}; // NOT OK, is interpreted differently when ``Time::SetResolution()`` called
+  Time t{0.1}; // NOT OK, will round to zero; see above and also merge request !2007
+
 Comments
 ========
 
@@ -1477,6 +1566,18 @@
         ...
     };
 
+- When checking whether a Time value is zero, use ``Time::IsZero()`` rather than comparing it to a zero-valued time object with ``operator==``, to avoid construction of a temporary.  Similar guidance applies to the related functions ``Time::IsPositive()``, ``Time::IsNegative()``, ``Time::IsStrictlyPositive``, and ``Time::IsStrictlyNegative()``.
+
+  .. sourcecode:: cpp
+
+    Time t = ...;
+    // prefer the below:
+    if (t.IsStrictlyPositive())
+    {...}
+    // to this alternative:
+    if (t > Seconds(0))
+    {...}
+
 Clang-tidy rules
 ================
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/contributing/source/conf.py ns-3.43/doc/contributing/source/conf.py
--- ns-3.42/doc/contributing/source/conf.py	2024-05-29 15:30:03.724115800 -0700
+++ ns-3.43/doc/contributing/source/conf.py	2024-10-09 16:41:36.356755000 -0700
@@ -49,9 +49,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.42"
+version = "ns-3.43"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.42"
+release = "ns-3.43"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/contributing/source/enhancements.rst ns-3.43/doc/contributing/source/enhancements.rst
--- ns-3.42/doc/contributing/source/enhancements.rst	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/doc/contributing/source/enhancements.rst	2024-10-09 16:41:09.764655400 -0700
@@ -113,8 +113,8 @@
 request.  The following steps are recommended to smooth the process.
 
 If you are new to public Git repositories, you may want to read
-`this overview of merge requests <https://docs.gitlab.com/ee/user/project/merge_requests/getting_started.html>`_.  If you are familiar with GitHub
-pull requests, the GitLab.com merge requests are very similar.
+`this overview of merge requests <https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html>`_.
+If you are familiar with GitHub pull requests, the GitLab.com merge requests are very similar.
 
 In brief, you will want to fork ns-3-dev into your own namespace (i.e.,
 fork the repository into your personal GitLab.com account, via the user
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/contributing/source/general.rst ns-3.43/doc/contributing/source/general.rst
--- ns-3.42/doc/contributing/source/general.rst	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/doc/contributing/source/general.rst	2024-10-09 16:41:09.768655500 -0700
@@ -98,9 +98,7 @@
   /*
    * Copyright (c) 2005,2006 INRIA
    *
-   * This program is free software; you can redistribute it and/or modify
-   * it under the terms of the GNU General Public License version 2 as
-   * published by the Free Software Foundation;
+   * SPDX-License-Identifier: GPL-2.0-only
 
 Copyright on existing files
 ===========================
@@ -115,9 +113,7 @@
    * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
    * Copyright (c) 2018 Fraunhofer ESK : RLF extensions
    *
-   * This program is free software; you can redistribute it and/or modify
-   * it under the terms of the GNU General Public License version 2 as
-   * published by the Free Software Foundation;
+   * SPDX-License-Identifier: GPL-2.0-only
 
 Here, Fraunhofer ESK added extensions to support radio link failure (RLF),
 and the copyright statement clarifies the extension (separated from the
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/contributing.txt ns-3.43/doc/contributing.txt
--- ns-3.42/doc/contributing.txt	2024-05-29 15:29:46.836073000 -0700
+++ ns-3.43/doc/contributing.txt	1969-12-31 16:00:00.000000000 -0800
@@ -1,7 +0,0 @@
-Contributing to the ns-3 project
---------------------------------
-
-ns-3 is a free, open source software project that welcomes contributions
-from users worldwide.  Please see the following web page for how to
-contribute:
-http://www.nsnam.org/developers/contributing-code/
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/doxygen.conf ns-3.43/doc/doxygen.conf
--- ns-3.42/doc/doxygen.conf	2024-05-29 15:29:46.840072900 -0700
+++ ns-3.43/doc/doxygen.conf	2024-10-09 16:41:09.768655500 -0700
@@ -1881,7 +1881,7 @@
 # If left blank no extra packages will be included.
 # This tag requires that the tag GENERATE_LATEX is set to YES.
 
-EXTRA_PACKAGES         = amsmath,amssymb
+EXTRA_PACKAGES         = amsmath,amssymb,physics
 
 # The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
 # the generated LaTeX document. The header should contain everything until the
@@ -2299,6 +2299,7 @@
                          ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME \
                          NS_UNUSED_GLOBAL \
                          NS_DEPRECATED \
+                         NS_DEPRECATED_3_43 \
                          NS_DEPRECATED_3_42 \
                          NS_DEPRECATED_3_41 \
                          NS_DEPRECATED_3_40
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/doxygen.warnings.report.sh ns-3.43/doc/doxygen.warnings.report.sh
--- ns-3.42/doc/doxygen.warnings.report.sh	2024-05-29 15:29:46.840072900 -0700
+++ ns-3.43/doc/doxygen.warnings.report.sh	2024-10-09 16:41:09.768655500 -0700
@@ -22,7 +22,7 @@
 # Options ------------------------------
 #
 
-# One line sysnopsis, continue
+# One line synopsis, continue
 function synopsis_short
 {
     echo "Usage: $me [-beithv] [-s <log-file> | -l | -w] [-m <module>] [-f <regex>] [-F <regex>]"
@@ -305,6 +305,12 @@
 
 else
 
+    # We're going to modify doxygen.conf
+    # In case the user ^C's out of this we need to restore
+    # doxygen.conf, otherwise weird things happen.
+    # function restore_doxygen_conf defined below
+    trap restore_doxygen_conf INT
+
     # Modify doxygen.conf to generate all the warnings
     # We keep dot active to generate graphs in the documentation
     # (see for example PacketTagList) and warn about ill-formed
@@ -333,6 +339,14 @@
     DIRECTORY_GRAPH = no
 EOF
 
+    # Swap back to original config
+    function restore_doxygen_conf()
+    {
+        if [ -e $conf.bak ]; then
+            rm -f $conf
+            mv -f $conf.bak $conf
+        fi
+    }
 
     intro_h="introspected-doxygen.h"
     if [ $skip_intro -eq 1 ]; then
@@ -350,17 +364,11 @@
         status_report $? "./ns3 run print-introspected-doxygen"
     fi
 
-    # Waf insists on writing cruft to stdout
-    sed -i.bak -E '/^Waf:/d' doc/$intro_h
-    rm doc/$intro_h.bak
-
     verbose -n "Rebuilding doxygen docs with full errors"
     (cd "$ROOT" && ./ns3 docs doxygen-no-build >&6 2>&6 )
     status_report $? "./ns3 docs doxygen-no-build"
 
-    # Swap back to original config
-    rm -f $conf
-    mv -f $conf.bak $conf
+    restore_doxygen_conf
 fi
 
 # Filter log file
@@ -442,9 +450,21 @@
     sed 's/^[ \t]*//;s/[ \t]*$//'             \
     )
 
+# This is to catch LaTeX formula errors.
+# In this case the output is of the form:
+# "error: Problems running latex." followed by
+# "Check your installation or look for typos in _formulas.tex and check _formulas.log!"
+# and
+# "Check your installation or look for typos in _formulas_dark.tex and check _formulas_dark.log!"
+# Hence, the count can be two.
+latexWarns=$(                                 \
+    grep "Problems running latex" "$LOG"    | \
+    wc -l                                   | \
+    sed 's/^[ \t]*//;s/[ \t]*$//'             \
+    )
 
 # Total number of warnings
-warncount=$((modwarncount + addlparam + misplacedWarns))
+warncount=$((modwarncount + addlparam + misplacedWarns + latexWarns))
 
 # List of files appearing in the log
 if [ ! -z "$filter_log_results" ]
@@ -497,7 +517,7 @@
 echo "Report of Doxygen warnings"
 echo "----------------------------------------"
 echo
-echo "(All counts are lower bounds.)"
+echo "(All counts are approximate.)"
 echo
 echo "Warnings by module/directory:"
 echo
@@ -529,6 +549,27 @@
 printf "%6d files with warnings\n" $filecount
 echo
 echo
+if [ $latexWarns -ne 0 ] ; then
+    html_output=`dirname $LOG`
+    if [ $skip_doxy -eq 1 ]; then
+        html_output+="/html"
+    else
+        html_output+="/html-warn"
+    fi
+    echo "----------------------------------------"
+    echo "There are LaTeX warnings, probably math"
+    echo "  Inspect the generated LaTeX input files"
+    echo "  '$html_output/_formulas.tex'"
+    echo "  (and '$html_output/_formulas_dark.tex')."
+    echo "  as well as the LaTeX run log"
+    echo "  '$html_output/_formulas.log'"
+    echo
+    echo "The LaTeX log is:"
+    echo "$(<$html_output/_formulas.log )"
+    echo "----------------------------------------"
+    echo
+    echo
+fi
 echo "Doxygen Warnings Summary"
 echo "----------------------------------------"
 printf "%6d directories\n" $modcount
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/installation/source/conf.py ns-3.43/doc/installation/source/conf.py
--- ns-3.42/doc/installation/source/conf.py	2024-05-29 15:30:03.724115800 -0700
+++ ns-3.43/doc/installation/source/conf.py	2024-10-09 16:41:36.356755000 -0700
@@ -49,9 +49,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.42"
+version = "ns-3.43"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.42"
+release = "ns-3.43"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/installation/source/macos.rst ns-3.43/doc/installation/source/macos.rst
--- ns-3.42/doc/installation/source/macos.rst	2024-05-29 15:29:46.840072900 -0700
+++ ns-3.43/doc/installation/source/macos.rst	2024-10-09 16:41:09.768655500 -0700
@@ -108,9 +108,12 @@
   | Building Doxygen            | ``doxygen graphviz imagemagick`` | ``doxygen graphviz``     |
   |                             |                                  | ``ImageMagick``          |
   +-----------------------------+----------------------------------+--------------------------+
-  | Sphinx documentation        | ``sphinx-doc texlive``           | ``texlive``              |
-  |                             |                                  | ``pyXX-sphinx``, with    |
-  |                             |                                  | `XX`` the Python version |
+  | Sphinx documentation        | ``sphinx-doc texlive``           | ``dia texlive``          |
+  |                             |                                  | ``texlive-fonts-extra``  |
+  |                             |                                  | ``texlive-latex-extra``  |
+  |                             |                                  | ``py3XX-sphinx``, with   |
+  |                             |                                  | `XX`` the Python minor   |
+  |                             |                                  | version such as `12`     |
   +-----------------------------+----------------------------------+--------------------------+
   | Eigen3                      | ``eigen``                        | ``eigen3``               |
   +-----------------------------+----------------------------------+--------------------------+
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/installation/source/quick-start.rst ns-3.43/doc/installation/source/quick-start.rst
--- ns-3.42/doc/installation/source/quick-start.rst	2024-05-29 15:29:46.840072900 -0700
+++ ns-3.43/doc/installation/source/quick-start.rst	2024-10-09 16:41:09.768655500 -0700
@@ -42,13 +42,13 @@
   |                    | or ``tar`` and ``bunzip2``           | No minimum version           |
   |                    | (for Web download)                   |                              |
   +--------------------+--------------------------------------+------------------------------+
-  | **Compiler**       | ``g++``                              | >= 9                         |
+  | **Compiler**       | ``g++``                              | >= 10                        |
   +                    +                                      +                              +
-  |                    | or ``clang++``                       | >= 10                        |
+  |                    | or ``clang++``                       | >= 11                        |
   +--------------------+--------------------------------------+------------------------------+
-  | **Configuration**  | ``python3``                          | >= 3.5                       |
+  | **Configuration**  | ``python3``                          | >= 3.8                       |
   +--------------------+--------------------------------------+------------------------------+
-  | **Build system**   | ``cmake``,                           | >= 3.10                      |
+  | **Build system**   | ``cmake``,                           | >= 3.13                      |
   +                    +                                      +                              +
   |                    | and at least one of:                 | No minimum version           |
   |                    | ``make``, ``ninja``, or ``Xcode``    |                              |
@@ -80,13 +80,13 @@
 
 There are two main options:
 
-1. Download a release tarball.  This will unpack to a directory such as ``ns-allinone-3.42``
+1. Download a release tarball.  This will unpack to a directory such as ``ns-allinone-3.43``
 containing |ns3| and some other programs.  Below is a command-line download using ``wget``,
 but a browser download will also work::
 
-  $ wget https://www.nsnam.org/releases/ns-allinone-3.42.tar.bz2
-  $ tar xfj ns-allinone-3.42.tar.bz2
-  $ cd ns-allinone-3.42/ns-3.42
+  $ wget https://www.nsnam.org/releases/ns-allinone-3.43.tar.bz2
+  $ tar xfj ns-allinone-3.43.tar.bz2
+  $ cd ns-allinone-3.43/ns-3.43
 
 2. Clone |ns3| from the Git repository.  The ``ns-3-allinone`` can be cloned, as well as
 ``ns-3-dev`` by itself.  Below, we illustrate the latter::
@@ -99,7 +99,7 @@
 the |ns3| ``master`` branch, which is a development branch.  All |ns3| releases are tagged
 in Git, so if you would then like to check out a past release, you can do so as follows::
 
-  $ git checkout -b ns-3.42-release ns-3.42
+  $ git checkout -b ns-3.43-release ns-3.43
 
 In this quick-start, we are omitting download and build instructions for optional |ns3| modules,
 the ``NetAnim`` animator, Python bindings, and ``NetSimulyzer``.  The
@@ -125,41 +125,43 @@
 Depending on how fast your CPU is, the configuration command can take anywhere from a few
 seconds to a minute.
 
-Then, use the ``ns3`` program to build the |ns3| module libraries and executables::
-
-  $ ./ns3 build
-
-Build times vary based on the number of CPU cores, the speed of the CPU and memory, and the mode
-of the build (whether debug mode, which is faster, or the default or optimized modes, which are
-slower).  Additional configuration (not covered here) can be used to limit the scope of the
-build, and the ``ccache``, if installed, can speed things up.  In general, plan on the build
-taking a few minutes on faster workstations.
-
 You should see some output such as below, if successful::
 
-  'build' finished successfully (44.159s)
-
-  Modules built:
+  Modules configured to be built:
   antenna                   aodv                      applications
   bridge                    buildings                 config-store
   core                      csma                      csma-layout
   dsdv                      dsr                       energy
   fd-net-device             flow-monitor              internet
   internet-apps             lr-wpan                   lte
-  mesh                      mobility                  mpi
-  netanim (no Python)       network                   nix-vector-routing
-  olsr                      point-to-point            point-to-point-layout
-  propagation               sixlowpan                 spectrum
-  stats                     tap-bridge                test (no Python)
-  topology-read             traffic-control           uan
-  virtual-net-device        visualizer                wifi
-  wimax
+  mesh                      mobility                  netanim
+  network                   nix-vector-routing        olsr
+  point-to-point            point-to-point-layout     propagation
+  sixlowpan                 spectrum                  stats
+  tap-bridge                test                      topology-read
+  traffic-control           uan                       virtual-net-device
+  wifi                      wimax
+
+  Modules that cannot be built:
+  brite                     click                     mpi
+  openflow                  visualizer
+
+Do not be concerned about the list of modules that cannot be built; these modules are all optional
+and require some extra dependencies, but are not needed for initial exploration of |ns3|.
 
-  Modules not built (see ns-3 tutorial for explanation):
-  brite                     click                     openflow
+Then, use the ``ns3`` program to build the |ns3| module libraries and executables::
+
+  $ ./ns3 build
 
+Build times vary based on the number of CPU cores, the speed of the CPU and memory, and the mode
+of the build (whether debug mode, which is faster, or the default or optimized modes, which are
+slower).  Additional configuration (not covered here) can be used to limit the scope of the
+build, and the ``ccache``, if installed, can speed things up.  In general, plan on the build
+taking a few minutes on faster workstations.
 
-Once complete, you can run the unit tests to check your build::
+At the end of the build, if successful, the output will report on the underlying ``cmake``
+build command that was invoked by the ``ns3`` program.  Once the build is complete, you can
+run the unit tests to check your build::
 
   $ ./test.py
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/installation/source/windows.rst ns-3.43/doc/installation/source/windows.rst
--- ns-3.42/doc/installation/source/windows.rst	2024-05-29 15:29:46.840072900 -0700
+++ ns-3.43/doc/installation/source/windows.rst	2024-10-09 16:41:09.768655500 -0700
@@ -161,119 +161,22 @@
 
 .. sourcecode:: console
 
-  /c/ns-3-dev/ MINGW64$ pacman -S mingw-w64-x86_64-imagemagick mingw-w64-x86_64-doxygen mingw-w64-x86_64-graphviz
-
-For unknown reasons, the texlive packages in Msys2 are broken,
-so we recommend manually installing the official Texlive.
-
-.. _Texlive for Windows: https://tug.org/texlive/windows.html
-
-Start by installing `Texlive for Windows`_. It can be installed either via the network installer or
-directly from the ISO with all optional packages.
-
-To install it with the network installer, start by creating a texlive folder and downloading the
-texlive configuration profile below. You can change the installation directory (starting with
-``C:/texlive/2022``).
-
-.. sourcecode:: text
-
-    selected_scheme scheme-custom
-    TEXDIR C:/texlive/2022
-    TEXMFCONFIG ~/.texlive2022/texmf-config
-    TEXMFHOME ~/texmf
-    TEXMFLOCAL C:/texlive/texmf-local
-    TEXMFSYSCONFIG C:/texlive/2022/texmf-config
-    TEXMFSYSVAR C:/texlive/2022/texmf-var
-    TEXMFVAR ~/.texlive2022/texmf-var
-    binary_win32 1
-    collection-basic 1
-    collection-bibtexextra 1
-    collection-binextra 1
-    collection-context 1
-    collection-fontsrecommended 1
-    collection-fontutils 1
-    collection-games 1
-    collection-humanities 1
-    collection-langenglish 1
-    collection-latex 1
-    collection-latexextra 1
-    collection-latexrecommended 1
-    collection-luatex 1
-    collection-mathscience 1
-    collection-metapost 1
-    collection-music 1
-    collection-pictures 1
-    collection-plaingeneric 1
-    collection-pstricks 1
-    collection-publishers 1
-    collection-texworks 1
-    collection-wintools 1
-    collection-xetex 1
-    instopt_adjustpath 1
-    instopt_adjustrepo 1
-    instopt_letter 0
-    instopt_portable 0
-    instopt_write18_restricted 1
-    tlpdbopt_autobackup 1
-    tlpdbopt_backupdir tlpkg/backups
-    tlpdbopt_create_formats 1
-    tlpdbopt_desktop_integration 1
-    tlpdbopt_file_assocs 1
-    tlpdbopt_generate_updmap 0
-    tlpdbopt_install_docfiles 0
-    tlpdbopt_install_srcfiles 0
-    tlpdbopt_post_code 1
-    tlpdbopt_sys_bin /usr/local/bin
-    tlpdbopt_sys_info /usr/local/share/info
-    tlpdbopt_sys_man /usr/local/share/man
-    tlpdbopt_w32_multi_user 0
-
-
-Then, download Texlive's web installer and unpack it to the texlive directory,
-and run the installer.
-
-.. sourcecode:: console
-
-    ~$ wget https://linorg.usp.br/CTAN/systems/texlive/tlnet/install-tl.zip
-    ~$ python3 -c "import shutil; shutil.unpack_archive('install-tl.zip', './')"
-    ~$ cd install-tl-*
-    ~/install-tl-20220923$ .\install-tl-windows.bat --no-gui --lang en -profile ..\texlive.profile
-
-After the installation finishes, add the installation directory to the PATH environment variable.
-
-.. sourcecode:: console
-
-    setx PATH "%PATH%;C:\texlive\2022\bin\win32" /m
-    C:\ns-3-dev\> set MSYSTEM MINGW64
-    C:\ns-3-dev\> bash
-    /c/ns-3-dev/ MINGW64$ echo "export PATH=$PATH:/c/texlive/2022/bin/win32" >> ~/.bashrc
+  /c/ns-3-dev/ MINGW64$ pacman -S mingw-w64-x86_64-imagemagick mingw-w64-x86_64-doxygen mingw-w64-x86_64-graphviz mingw-w64-x86_64-texlive-full
 
 The ns-3 manual, models and tutorial
 ++++++++++++++++++++++++++++++++++++
 
 These documents are written in reStructuredText for Sphinx (doc/tutorial, doc/manual, doc/models).
-The figures are typically written in dia.
+The figures are typically written in Dia.
 
 The documents can be generated into multiple formats, one of them being pdf,
 which requires the same Latex setup for doxygen.
 
-Sphinx can be installed via Msys2's package manager:
-
-.. sourcecode:: console
-
-  /c/ns-3-dev/ MINGW64$ pacman -S mingw-w64-x86_64-python-sphinx
-
-.. _Dia: https://sourceforge.net/projects/dia-installer/
-
-`Dia`_ on the other hand needs to be downloaded and installed manually.
-After installing it, or unzipping the package (example below), add Dia/bin to the PATH.
+Sphinx and Dia can be installed via Msys2's package manager:
 
 .. sourcecode:: console
 
-    C:\ns-3-dev\> setx PATH "%PATH%;C:\dia_0.97.2_win32\bin" /m
-    C:\ns-3-dev\> set MSYSTEM MINGW64
-    C:\ns-3-dev\> bash
-    /c/ns-3-dev/ MINGW64$ echo "export PATH=$PATH:/c/dia_0.97.2_win32/bin" >> ~/.bashrc
+  /c/ns-3-dev/ MINGW64$ pacman -S mingw-w64-x86_64-python-sphinx mingw-w64-x86_64-dia mingw-w64-x86_64-texlive-full
 
 GNU Scientific Library (GSL)
 ++++++++++++++++++++++++++++
@@ -308,6 +211,15 @@
 
   /c/ns-3-dev/ MINGW64$ pacman -S mingw-w64-x86_64-boost
 
+Support for click module
++++++++++++++++++++++++++++
+
+Requires autotools, which can be installed with the following.
+
+.. sourcecode:: console
+
+  /c/ns-3-dev/ MINGW64$ pacman -S mingw-w64-x86_64-autotools
+
 Windows 10 Docker container
 ***************************
 
@@ -396,9 +308,9 @@
 ******************
 
 .. _VirtualBox: https://www.virtualbox.org/
-.. _Vagrant: https://www.vagrantup.com/
+.. _Vagrant: https://developer.hashicorp.com/vagrant/docs
 .. _virtual machine: https://www.redhat.com/en/topics/virtualization/what-is-a-virtual-machine
-.. _boxes available: https://app.vagrantup.com/boxes/search
+.. _boxes available: https://vagrantcloud.com/boxes/search
 
 As an alternative to manually setting up all dependencies required by ns-3,
 one can use a pre-packaged `virtual machine`_. There are many ways to do that,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/manual/source/conf.py ns-3.43/doc/manual/source/conf.py
--- ns-3.42/doc/manual/source/conf.py	2024-05-29 15:30:03.724115800 -0700
+++ ns-3.43/doc/manual/source/conf.py	2024-10-09 16:41:36.356755000 -0700
@@ -74,9 +74,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.42"
+version = "ns-3.43"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.42"
+release = "ns-3.43"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/manual/source/documentation.rst ns-3.43/doc/manual/source/documentation.rst
--- ns-3.42/doc/manual/source/documentation.rst	2024-05-29 15:29:46.872073000 -0700
+++ ns-3.43/doc/manual/source/documentation.rst	2024-10-09 16:41:09.800655600 -0700
@@ -555,7 +555,7 @@
      *  \ingroup foo
      *
      *  FooBar packet type.
-    */
+     */
     class FooBar
 
 * Did you know ``typedefs`` can have formal arguments?  This enables
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/manual/source/random-variables.rst ns-3.43/doc/manual/source/random-variables.rst
--- ns-3.42/doc/manual/source/random-variables.rst	2024-05-29 15:29:46.876073000 -0700
+++ ns-3.43/doc/manual/source/random-variables.rst	2024-10-09 16:41:09.804655600 -0700
@@ -263,6 +263,8 @@
 * class :cpp:class:`EmpiricalRandomVariable`
 * class :cpp:class:`BinomialRandomVariable`
 * class :cpp:class:`BernoulliRandomVariable`
+* class :cpp:class:`LaplacianRandomVariable`
+* class :cpp:class:`LargestExtremeValueRandomVariable`
 
 Semantics of RandomVariableStream objects
 *****************************************
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/manual/source/working-with-cmake.rst ns-3.43/doc/manual/source/working-with-cmake.rst
--- ns-3.42/doc/manual/source/working-with-cmake.rst	2024-05-29 15:29:46.876073000 -0700
+++ ns-3.43/doc/manual/source/working-with-cmake.rst	2024-10-09 16:41:09.804655600 -0700
@@ -399,10 +399,12 @@
 
   ~/ns-3-dev/cmake-cache$ cmake --build . --target target_name
 
-Where target_name is a valid target name. Module libraries are prefixed with ``lib`` (e.g. libcore),
-executables from the scratch folder are prefixed with ``scratch_`` (e.g. scratch_scratch-simulator).
-Executables targets have their source file name without the ".cc" prefix
-(e.g. sample-simulator.cc => sample-simulator).
+Where target_name is a valid target name.
+Since ns-3.43, module libraries CMake targets are named the same as the module name (e.g. core, wifi, lte).
+From ns-3.36 to 3.42, module library targets were prefixed with ``lib`` (e.g. libcore, libwifi, liblte).
+Executables from the scratch folder are prefixed with ``scratch_`` (e.g. scratch_scratch-simulator).
+Executables targets are named the same as their source file containing the `main` function,
+without the ".cc" prefix (e.g. sample-simulator.cc => sample-simulator).
 
 
 Adding a new module
@@ -615,7 +617,6 @@
 
 In the CMake build command line, notice the scratch-simulator has a ``scratch_`` prefix.
 That is true for all the CMake scratch targets. This is done to guarantee globally unique names.
-Similarly, library-related targets have ``lib`` as a prefix (e.g. ``libcore``, ``libnetwork``).
 
 .. _RPATH: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_RPATH.html
 
@@ -2361,26 +2362,16 @@
 
     # Add library to a global list of libraries
     if("${FOLDER}" MATCHES "src")
-      set(ns3-libs "${lib${BLIB_LIBNAME}};${ns3-libs}"
+      set(ns3-libs "${BLIB_LIBNAME};${ns3-libs}"
           CACHE INTERNAL "list of processed upstream modules"
       )
     else()
-      set(ns3-contrib-libs "${lib${BLIB_LIBNAME}};${ns3-contrib-libs}"
+      set(ns3-contrib-libs "${BLIB_LIBNAME};${ns3-contrib-libs}"
           CACHE INTERNAL "list of processed contrib modules"
       )
     endif()
 
-In the following block, we check if we are working with Xcode, which does
-not handle correctly CMake object libraries (.o files).
-
-In other platforms,
-we build an object file ``add_library(${lib${BLIB_LIBNAME}-obj} OBJECT "${BLIB_SOURCE_FILES}...)``
-and a shared library ``add_library(${lib${BLIB_LIBNAME}} SHARED ...)``.
-
-The object library contains the actual source files (``${BLIB_SOURCE_FILES}``),
-but is not linked, which mean we can reuse the object to build the static version of the libraries.
-Notice the shared library uses the object file as its source files
-``$<TARGET_OBJECTS:${lib${BLIB_LIBNAME}-obj}``.
+We build a shared library using CMake's ``add_library(${BLIB_LIBNAME} SHARED ...)``.
 
 Notice that we can also reuse precompiled headers created previously to speed up the
 parsing phase of the compilation.
@@ -2390,41 +2381,17 @@
 
   function(build_lib)
     # ...
-    if(NOT ${XCODE})
-      # Create object library with sources and headers, that will be used in
-      # lib-ns3-static and the shared library
-      add_library(
-        ${lib${BLIB_LIBNAME}-obj} OBJECT "${BLIB_SOURCE_FILES}"
-                                        "${BLIB_HEADER_FILES}"
-      )
-
-      if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${IGNORE_PCH}))
-        target_precompile_headers(${lib${BLIB_LIBNAME}-obj} REUSE_FROM stdlib_pch)
-      endif()
-
-      # Create shared library with previously created object library (saving
-      # compilation time for static libraries)
-      add_library(
-        ${lib${BLIB_LIBNAME}} SHARED $<TARGET_OBJECTS:${lib${BLIB_LIBNAME}-obj}>
-      )
-    else()
-      # Xcode and CMake don't play well when using object libraries, so we have a
-      # specific path for that
-      add_library(${lib${BLIB_LIBNAME}} SHARED "${BLIB_SOURCE_FILES}")
+    add_library(${BLIB_LIBNAME} SHARED "${BLIB_SOURCE_FILES}")
 
-      if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${IGNORE_PCH}))
-        target_precompile_headers(${lib${BLIB_LIBNAME}} REUSE_FROM stdlib_pch)
-      endif()
+    if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${IGNORE_PCH}))
+      target_precompile_headers(${BLIB_LIBNAME} REUSE_FROM stdlib_pch)
     endif()
     # ...
   endfunction()
 
-In the next code block, we create an alias to ``libmodule``, ``ns3::libmodule``,
+In the next code block, we create an alias to ``module``, ``ns3::module``,
 which can later be used when importing |ns3| with CMake's ``find_package(ns3)``.
 
-Then, we associate configured headers (``config-store-config``, ``core-config.h`` and
-``version-defines.h``) to the core module.
-
 And finally associate all of the public headers of the module to that library,
 to make sure CMake will be refreshed in case one of them changes.
 
@@ -2432,24 +2399,14 @@
 
   function(build_lib)
     # ...
-    add_library(ns3::${lib${BLIB_LIBNAME}} ALIAS ${lib${BLIB_LIBNAME}})
+    add_library(ns3::${BLIB_LIBNAME} ALIAS ${BLIB_LIBNAME})
 
     # Associate public headers with library for installation purposes
-    if("${BLIB_LIBNAME}" STREQUAL "core")
-      set(config_headers ${CMAKE_HEADER_OUTPUT_DIRECTORY}/config-store-config.h
-                        ${CMAKE_HEADER_OUTPUT_DIRECTORY}/core-config.h
-      )
-      if(${NS3_ENABLE_BUILD_VERSION})
-        list(APPEND config_headers
-            ${CMAKE_HEADER_OUTPUT_DIRECTORY}/version-defines.h
-        )
-      endif()
-    endif()
     set_target_properties(
-      ${lib${BLIB_LIBNAME}}
+      ${BLIB_LIBNAME}
       PROPERTIES
         PUBLIC_HEADER
-        "${BLIB_HEADER_FILES};${BLIB_DEPRECATED_HEADER_FILES};${config_headers};${CMAKE_HEADER_OUTPUT_DIRECTORY}/${BLIB_LIBNAME}-module.h"
+        "${BLIB_HEADER_FILES};${BLIB_DEPRECATED_HEADER_FILES};${CMAKE_HEADER_OUTPUT_DIRECTORY}/${BLIB_LIBNAME}-module.h"
     )
     # ...
   endfunction()
@@ -2457,42 +2414,50 @@
 In the next code block, we make the library a dependency to the ClangAnalyzer's time trace report,
 which measures which step of compilation took most time and which files were responsible for that.
 
-Then, the |ns3| libraries are separated from non-|ns3| libraries, that can be propagated or not
-for libraries/executables linked to the current |ns3| module being processed.
+.. sourcecode:: cmake
+
+  function(build_lib)
+    # ...
+
+    build_lib_reexport_third_party_libraries(
+      "${BLIB_LIBNAME}" "${BLIB_LIBRARIES_TO_LINK}"
+    )
+
+    # ...
+  endfunction(build_lib)
+
+The ``build_lib_reexport_third_party_libraries`` macro then separates |ns3| libraries from non-|ns3| libraries.
+The non-|ns3| can be automatically propagated, or not, to libraries/executables linked to the current |ns3| module being processed.
+
+.. sourcecode:: cmake
+
+    function(build_lib_reexport_third_party_libraries libname libraries_to_link)
+      # Separate ns-3 and non-ns-3 libraries to manage their propagation properly
+      separate_ns3_from_non_ns3_libs(
+        "${libname}" "${libraries_to_link}" ns_libraries_to_link
+        non_ns_libraries_to_link
+      )
+
+      set(ns3-external-libs "${non_ns_libraries_to_link};${ns3-external-libs}"
+          CACHE INTERNAL
+                "list of non-ns libraries to link to NS3_STATIC and NS3_MONOLIB"
+      )
+      # ...
+    endfunction()
 
 The default is propagating these third-party libraries and their include directories, but this
 can be turned off by setting ``NS3_REEXPORT_THIRD_PARTY_LIBRARIES=OFF``
 
 .. sourcecode:: cmake
 
-  function(build_lib)
+  function(build_lib_reexport_third_party_libraries libname libraries_to_link)
     # ...
-    if(${NS3_CLANG_TIMETRACE})
-      add_dependencies(timeTraceReport ${lib${BLIB_LIBNAME}})
-    endif()
-
-    # Split ns and non-ns libraries to manage their propagation properly
-    set(non_ns_libraries_to_link)
-    set(ns_libraries_to_link)
-
-    foreach(library ${BLIB_LIBRARIES_TO_LINK})
-      remove_lib_prefix("${library}" module_name)
-
-      # Check if the module exists in the ns-3 modules list
-      # or if it is a 3rd-party library
-      if(${module_name} IN_LIST ns3-all-enabled-modules)
-        list(APPEND ns_libraries_to_link ${library})
-      else()
-        list(APPEND non_ns_libraries_to_link ${library})
-      endif()
-      unset(module_name)
-    endforeach()
 
     if(NOT ${NS3_REEXPORT_THIRD_PARTY_LIBRARIES})
       # ns-3 libraries are linked publicly, to make sure other modules can find
       # each other without being directly linked
       set(exported_libraries PUBLIC ${LIB_AS_NEEDED_PRE} ${ns_libraries_to_link}
-                            ${LIB_AS_NEEDED_POST}
+                             ${LIB_AS_NEEDED_POST}
       )
 
       # non-ns-3 libraries are linked privately, not propagating unnecessary
@@ -2506,20 +2471,40 @@
     else()
       # we export everything by default when NS3_REEXPORT_THIRD_PARTY_LIBRARIES=ON
       set(exported_libraries PUBLIC ${LIB_AS_NEEDED_PRE} ${ns_libraries_to_link}
-                            ${non_ns_libraries_to_link} ${LIB_AS_NEEDED_POST}
+                             ${non_ns_libraries_to_link} ${LIB_AS_NEEDED_POST}
       )
       set(private_libraries)
 
       # with NS3_REEXPORT_THIRD_PARTY_LIBRARIES, we export all 3rd-party library
       # include directories, allowing consumers of this module to include and link
       # the 3rd-party code with no additional setup
-      get_target_includes(${lib${BLIB_LIBNAME}} exported_include_directories)
+      get_target_includes(${libname} exported_include_directories)
+
       string(REPLACE "-I" "" exported_include_directories
-                    "${exported_include_directories}"
+                     "${exported_include_directories}"
       )
-      string(REPLACE "${CMAKE_OUTPUT_DIRECTORY}/include" ""
-                    exported_include_directories
-                    "${exported_include_directories}"
+
+      # include directories prefixed in the source or binary directory need to be
+      # treated differently
+      set(new_exported_include_directories)
+      foreach(directory ${exported_include_directories})
+        string(FIND "${directory}" "${PROJECT_SOURCE_DIR}" is_prefixed_in_subdir)
+        if(${is_prefixed_in_subdir} GREATER_EQUAL 0)
+          string(SUBSTRING "${directory}" ${is_prefixed_in_subdir} -1
+                           directory_path
+          )
+          list(APPEND new_exported_include_directories
+               $<BUILD_INTERFACE:${directory_path}>
+          )
+        else()
+          list(APPEND new_exported_include_directories ${directory})
+        endif()
+      endforeach()
+      set(exported_include_directories ${new_exported_include_directories})
+
+      string(REPLACE "${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/include" ""
+                     exported_include_directories
+                     "${exported_include_directories}"
       )
     endif()
     # ...
@@ -2528,21 +2513,14 @@
 After the lists of libraries to link that should be exported (``PUBLIC``) and
 not exported (``PRIVATE``) are built, we can link them with ``target_link_libraries``.
 
-Next, we set the output name of the module library to ``n3version-modulename`` (+ optional build suffix).
-
 .. sourcecode:: cmake
 
-  function(build_lib)
+  function(build_lib_reexport_third_party_libraries libname libraries_to_link)
     # ...
-    target_link_libraries(
-      ${lib${BLIB_LIBNAME}} ${exported_libraries} ${private_libraries}
-    )
 
-    # set output name of library
-    set_target_properties(
-      ${lib${BLIB_LIBNAME}}
-      PROPERTIES OUTPUT_NAME ns${NS3_VER}-${BLIB_LIBNAME}${build_profile_suffix}
-    )
+    # Set public and private headers linked to the module library
+    target_link_libraries(${libname} ${exported_libraries} ${private_libraries})
+
     # ...
   endfunction()
 
@@ -2551,43 +2529,20 @@
 
 .. sourcecode:: cmake
 
-  function(build_lib)
+  function(build_lib_reexport_third_party_libraries libname libraries_to_link)
     # ...
     # export include directories used by this library so that it can be used by
     # 3rd-party consumers of ns-3 using find_package(ns3) this will automatically
     # add the build/include path to them, so that they can ns-3 headers with
     # <ns3/something.h>
     target_include_directories(
-      ${lib${BLIB_LIBNAME}}
-      PUBLIC $<BUILD_INTERFACE:${CMAKE_OUTPUT_DIRECTORY}/include>
-            $<INSTALL_INTERFACE:include>
+      ${libname} PUBLIC $<BUILD_INTERFACE:${CMAKE_OUTPUT_DIRECTORY}/include>
+                        $<INSTALL_INTERFACE:include>
       INTERFACE ${exported_include_directories}
     )
     # ...
   endfunction()
 
-We append the list of third-party/external libraries for each processed module,
-and append a list of object libraries that can be later used for the static |ns3| build.
-
-.. sourcecode:: cmake
-
-  function(build_lib)
-    # ...
-    set(ns3-external-libs "${non_ns_libraries_to_link};${ns3-external-libs}"
-        CACHE INTERNAL
-              "list of non-ns libraries to link to NS3_STATIC and NS3_MONOLIB"
-    )
-    if(${NS3_STATIC} OR ${NS3_MONOLIB})
-      set(lib-ns3-static-objs
-          "$<TARGET_OBJECTS:${lib${BLIB_LIBNAME}-obj}>;${lib-ns3-static-objs}"
-          CACHE
-            INTERNAL
-            "list of object files from module used by NS3_STATIC and NS3_MONOLIB"
-      )
-    endif()
-    # ...
-  endfunction()
-
 The following block creates the ``${BLIB_LIBNAME}-module.h`` header for user scripts,
 and copies header files from ``src/module`` and ``contrib/module`` to the ``include/ns3`` directory.
 
@@ -2598,77 +2553,99 @@
     # Write a module header that includes all headers from that module
     write_module_header("${BLIB_LIBNAME}" "${BLIB_HEADER_FILES}")
 
+    # ...
+
     # Copy all header files to outputfolder/include before each build
-    copy_headers_before_building_lib(
-      ${BLIB_LIBNAME} ${CMAKE_HEADER_OUTPUT_DIRECTORY} "${BLIB_HEADER_FILES}"
-      public
-    )
-    if(BLIB_DEPRECATED_HEADER_FILES)
-      copy_headers_before_building_lib(
-        ${BLIB_LIBNAME} ${CMAKE_HEADER_OUTPUT_DIRECTORY}
-        "${BLIB_DEPRECATED_HEADER_FILES}" deprecated
-      )
-    endif()
+    copy_headers(
+      PUBLIC_HEADER_OUTPUT_DIR ${CMAKE_HEADER_OUTPUT_DIRECTORY}
+      PUBLIC_HEADER_FILES ${BLIB_HEADER_FILES}
+      DEPRECATED_HEADER_OUTPUT_DIR ${CMAKE_HEADER_OUTPUT_DIRECTORY}
+      DEPRECATED_HEADER_FILES ${BLIB_DEPRECATED_HEADER_FILES}
+      PRIVATE_HEADER_OUTPUT_DIR ${CMAKE_HEADER_OUTPUT_DIRECTORY}
+      PRIVATE_HEADER_FILES ${BLIB_PRIVATE_HEADER_FILES}
+    )
     # ...
   endfunction()
 
 The following block creates the test library for the module currently being processed.
+Note that it handles Windows vs non-Windows differently, since Windows requires all
+used linked symbols to be used, which results in our test-runner being unable to
+be dynamically linked to ns-3 modules. To solve that, we create the test libraries
+for the different modules as object libraries instead, and statically link to the
+test-runner executable.
 
 .. sourcecode:: cmake
 
   function(build_lib)
     # ...
-    # Check if the module tests should be built
-    set(filtered_in ON)
-    if(NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
-      set(filtered_in OFF)
-      if(${BLIB_LIBNAME} IN_LIST NS3_FILTER_MODULE_EXAMPLES_AND_TESTS)
-        set(filtered_in ON)
-      endif()
-    endif()
+    build_lib_tests(
+        "${BLIB_LIBNAME}" "${BLIB_IGNORE_PCH}" "${FOLDER}" "${BLIB_TEST_SOURCES}"
+      )
+    # ...
+  endfunction()
 
-    # Build tests if requested
-    if(${ENABLE_TESTS} AND ${filtered_in})
-      list(LENGTH BLIB_TEST_SOURCES test_source_len)
+  # This macro builds the test library for the module library
+  #
+  # Arguments: libname (e.g. core), ignore_pch (TRUE/FALSE), folder (src/contrib),
+  # sources (list of .cc's)
+  function(build_lib_tests libname ignore_pch folder test_sources)
+    if(${ENABLE_TESTS})
+      # Check if the module tests should be built
+      build_lib_check_examples_and_tests_filtered_in(${libname} filtered_in)
+      if(NOT ${filtered_in})
+        return()
+      endif()
+      list(LENGTH test_sources test_source_len)
       if(${test_source_len} GREATER 0)
-        # Create BLIB_LIBNAME of output library test of module
-        set(test${BLIB_LIBNAME} lib${BLIB_LIBNAME}-test CACHE INTERNAL "")
-        set(ns3-libs-tests "${test${BLIB_LIBNAME}};${ns3-libs-tests}"
-            CACHE INTERNAL "list of test libraries"
-        )
-
-        # Create shared library containing tests of the module
-        add_library(${test${BLIB_LIBNAME}} SHARED "${BLIB_TEST_SOURCES}")
+        # Create libname of output library test of module
+        set(test${libname} ${libname}-test CACHE INTERNAL "")
 
-        # Link test library to the module library
-        if(${NS3_MONOLIB})
-          target_link_libraries(
-            ${test${BLIB_LIBNAME}} ${LIB_AS_NEEDED_PRE} ${lib-ns3-monolib}
-            ${LIB_AS_NEEDED_POST}
+        # Create shared library containing tests of the module on UNIX and just
+        # the object file that will be part of test-runner on Windows
+        if(WIN32)
+          set(ns3-libs-tests
+              "$<TARGET_OBJECTS:${test${libname}}>;${ns3-libs-tests}"
+              CACHE INTERNAL "list of test libraries"
           )
+          add_library(${test${libname}} OBJECT "${test_sources}")
         else()
-          target_link_libraries(
-            ${test${BLIB_LIBNAME}} ${LIB_AS_NEEDED_PRE} ${lib${BLIB_LIBNAME}}
-            "${BLIB_LIBRARIES_TO_LINK}" ${LIB_AS_NEEDED_POST}
+          set(ns3-libs-tests "${test${libname}};${ns3-libs-tests}"
+              CACHE INTERNAL "list of test libraries"
           )
-        endif()
-        set_target_properties(
-          ${test${BLIB_LIBNAME}}
-          PROPERTIES OUTPUT_NAME
-                    ns${NS3_VER}-${BLIB_LIBNAME}-test${build_profile_suffix}
-        )
+          add_library(${test${libname}} SHARED "${test_sources}")
 
+          # Link test library to the module library
+          if(${NS3_MONOLIB})
+            target_link_libraries(
+              ${test${libname}} ${LIB_AS_NEEDED_PRE} ${lib-ns3-monolib}
+              ${LIB_AS_NEEDED_POST}
+            )
+          else()
+            target_link_libraries(
+              ${test${libname}} ${LIB_AS_NEEDED_PRE} ${libname}
+              "${BLIB_LIBRARIES_TO_LINK}" ${LIB_AS_NEEDED_POST}
+            )
+          endif()
+          set_target_properties(
+            ${test${libname}}
+            PROPERTIES OUTPUT_NAME
+                       ns${NS3_VER}-${libname}-test${build_profile_suffix}
+          )
+        endif()
         target_compile_definitions(
-          ${test${BLIB_LIBNAME}} PRIVATE NS_TEST_SOURCEDIR="${FOLDER}/test"
+          ${test${libname}} PRIVATE NS_TEST_SOURCEDIR="${folder}/test"
         )
-        if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${IGNORE_PCH}))
-          target_precompile_headers(${test${BLIB_LIBNAME}} REUSE_FROM stdlib_pch)
+        if(${PRECOMPILE_HEADERS_ENABLED} AND (NOT ${ignore_pch}))
+          target_precompile_headers(${test${libname}} REUSE_FROM stdlib_pch)
         endif()
+
+        # Add dependency between tests and examples used as tests
+        examples_as_tests_dependencies("${module_examples}" "${test_sources}")
       endif()
     endif()
-    # ...
   endfunction()
 
+
 The following block checks for examples subdirectories and add them to parse their
 CMakeLists.txt file, creating the examples. It also scans for python examples.
 
@@ -2676,18 +2653,36 @@
 
   function(build_lib)
     # ...
+
+    # Scan for C++ and Python examples and return a list of C++ examples (which
+    # can be set as dependencies of examples-as-test test suites)
+    build_lib_scan_examples(module_examples)
+
+    # ...
+  endfunction()
+
+  # This macro scans for C++ and Python examples for a given module and return a
+  # list of C++ examples
+  #
+  # Arguments: module_cpp_examples = return list of C++ examples
+  function(build_lib_scan_examples module_cpp_examples)
     # Build lib examples if requested
-    if(${ENABLE_EXAMPLES})
-      foreach(example_folder example;examples)
-        if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${example_folder})
+    set(examples_before ${ns3-execs-clean})
+    foreach(example_folder example;examples)
+      if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${example_folder})
+        if(${ENABLE_EXAMPLES})
           if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${example_folder}/CMakeLists.txt)
             add_subdirectory(${example_folder})
           endif()
-          scan_python_examples(${CMAKE_CURRENT_SOURCE_DIR}/${example_folder})
         endif()
-      endforeach()
-    endif()
-    # ...
+        scan_python_examples(${CMAKE_CURRENT_SOURCE_DIR}/${example_folder})
+      endif()
+    endforeach()
+    set(module_examples ${ns3-execs-clean})
+
+    # Return a list of module c++ examples (current examples - previous examples)
+    list(REMOVE_ITEM module_examples ${examples_before})
+    set(${module_cpp_examples} ${module_examples} PARENT_SCOPE)
   endfunction()
 
 In the next code block we add the library to the ``ns3ExportTargets``, later used for installation.
@@ -2699,7 +2694,7 @@
     # ...
     # Handle package export
     install(
-      TARGETS ${lib${BLIB_LIBNAME}}
+      TARGETS ${BLIB_LIBNAME}
       EXPORT ns3ExportTargets
       ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}/
       LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}/
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/models/source/conf.py ns-3.43/doc/models/source/conf.py
--- ns-3.42/doc/models/source/conf.py	2024-05-29 15:30:03.724115800 -0700
+++ ns-3.43/doc/models/source/conf.py	2024-10-09 16:41:36.356755000 -0700
@@ -74,9 +74,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.42"
+version = "ns-3.43"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.42"
+release = "ns-3.43"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/ns3_html_theme/get_version.sh ns-3.43/doc/ns3_html_theme/get_version.sh
--- ns-3.42/doc/ns3_html_theme/get_version.sh	2024-05-29 15:29:46.876073000 -0700
+++ ns-3.43/doc/ns3_html_theme/get_version.sh	2024-10-09 16:41:09.804655600 -0700
@@ -137,13 +137,13 @@
 outf="doc/ns3_html_theme/static/ns3_version.js"
 
 # Distance from last tag
-# 'git describe HEAD --tags' will return a string such as either
+# 'git describe HEAD --tags --long' will return a string such as either
 # 'ns-3.29-159-xxx' (if we are at a distance from the last release tag) or
 # 'ns-3.29' if we are at the tag.
-distance=`git describe HEAD --tags | cut -d '-' -f 3- | cut -d '-' -f 1`
+distance=`git describe HEAD --tags --long | cut -d '-' -f 3`
 
-if [ $distance -eq 1 ]; then
-    version=`git describe HEAD --tags | cut -d '-' -f 2`
+if [ $distance -eq 1 ] | [ $distance -eq 0 ]; then
+    version=`git describe HEAD --tags --long | cut -d '-' -f 2`
     say "at version $version"
 
 elif [ $tag -eq 1 ]; then
@@ -152,7 +152,7 @@
     vers_href=
 
 else
-    version=`git describe HEAD --tags | cut -d '-' -f 3- | cut -d '-' -f 2 | cut -c 2-`
+    version=`git describe HEAD --tags --long | cut -d '-' -f 3- | cut -d '-' -f 2 | cut -c 2-`
     # Check for uncommitted changes
     changes=0
     if [ "$(git status --porcelain)" ]; then
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/tutorial/source/conceptual-overview.rst ns-3.43/doc/tutorial/source/conceptual-overview.rst
--- ns-3.42/doc/tutorial/source/conceptual-overview.rst	2024-05-29 15:29:46.904073000 -0700
+++ ns-3.43/doc/tutorial/source/conceptual-overview.rst	2024-10-09 16:41:09.836655600 -0700
@@ -179,18 +179,7 @@
 ::
 
   /*
-   * This program is free software; you can redistribute it and/or modify
-   * it under the terms of the GNU General Public License version 2 as
-   * published by the Free Software Foundation;
-   *
-   * This program is distributed in the hope that it will be useful,
-   * but WITHOUT ANY WARRANTY; without even the implied warranty of
-   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   * GNU General Public License for more details.
-   *
-   * You should have received a copy of the GNU General Public License
-   * along with this program; if not, write to the Free Software
-   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
+   * SPDX-License-Identifier: GPL-2.0-only
    */
 
 Module Includes
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/tutorial/source/conf.py ns-3.43/doc/tutorial/source/conf.py
--- ns-3.42/doc/tutorial/source/conf.py	2024-05-29 15:30:03.724115800 -0700
+++ ns-3.43/doc/tutorial/source/conf.py	2024-10-09 16:41:36.356755000 -0700
@@ -71,9 +71,9 @@
 # built documents.
 #
 # The short X.Y version.
-version = "ns-3.42"
+version = "ns-3.43"
 # The full version, including alpha/beta/rc tags.
-release = "ns-3.42"
+release = "ns-3.43"
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/tutorial/source/getting-started.rst ns-3.43/doc/tutorial/source/getting-started.rst
--- ns-3.42/doc/tutorial/source/getting-started.rst	2024-05-29 15:29:46.904073000 -0700
+++ ns-3.43/doc/tutorial/source/getting-started.rst	2024-10-09 16:41:09.836655600 -0700
@@ -61,14 +61,14 @@
 for various systems, available at
 https://www.nsnam.org/docs/installation/html/index.html.
 
-As of the most recent |ns3| release (ns-3.42), the following tools
+As of the most recent |ns3| release (ns-3.43), the following tools
 are needed to get started with |ns3|:
 
 ============  ===========================================================
 Prerequisite  Package/version
 ============  ===========================================================
 C++ compiler  ``clang++`` or ``g++`` (g++ version 9 or greater)
-Python        ``python3`` version >=3.6
+Python        ``python3`` version >=3.8
 CMake         ``cmake`` version >=3.13
 Build system  ``make``, ``ninja``, ``xcodebuild`` (XCode)
 Git           any recent version (to access |ns3| from `GitLab.com <https://gitlab.com/nsnam/ns-3-dev/>`_)
@@ -116,21 +116,21 @@
   $ cd
   $ mkdir workspace
   $ cd workspace
-  $ wget https://www.nsnam.org/release/ns-allinone-3.42.tar.bz2
-  $ tar xjf ns-allinone-3.42.tar.bz2
+  $ wget https://www.nsnam.org/release/ns-allinone-3.43.tar.bz2
+  $ tar xjf ns-allinone-3.43.tar.bz2
 
 Notice the use above of the ``wget`` utility, which is a command-line
 tool to fetch objects from the web; if you do not have this installed,
 you can use a browser for this step.
 
 Following these steps, if you change into the directory
-``ns-allinone-3.42``, you should see a number of files and directories
+``ns-allinone-3.43``, you should see a number of files and directories
 
 .. sourcecode:: text
 
-  $ cd ns-allinone-3.42
+  $ cd ns-allinone-3.43
   $ ls
-  bake  build.py  constants.py  netanim-3.109 ns-3.42  README.md  util.py
+  bake  build.py  constants.py  netanim-3.109 ns-3.43  README.md  util.py
 
 You are now ready to build the base |ns3| distribution and may skip ahead
 to the section on building |ns3|.
@@ -180,7 +180,7 @@
 
 .. sourcecode:: console
 
-  $ python3 download.py -n ns-3.42
+  $ python3 download.py -n ns-3.43
 
 After this step, the additional repositories of |ns3|, bake, pybindgen,
 and netanim will be downloaded to the ``ns-3-allinone`` directory.
@@ -249,9 +249,9 @@
 
 There are a few configuration targets available:
 
-1.  ``ns-3.42``:  the code corresponding to the release
+1.  ``ns-3.43``:  the code corresponding to the release
 2.  ``ns-3-dev``:  a similar module but using the development code tree
-3.  ``ns-allinone-3.42``:  the module that includes other optional features
+3.  ``ns-allinone-3.43``:  the module that includes other optional features
     such as bake build system, netanim animator, and pybindgen
 4.  ``ns-3-allinone``:  similar to the released version of the allinone
     module, but for development code.
@@ -268,7 +268,7 @@
 `"ns-3 Releases"
 <https://www.nsnam.org/releases>`_
 web page and clicking on the latest release link.  We'll proceed in
-this tutorial example with ``ns-3.42``.
+this tutorial example with ``ns-3.43``.
 
 We are now going to use the bake tool to pull down the various pieces of
 |ns3| you will be using.  First, we'll say a word about running bake.
@@ -297,7 +297,7 @@
 
 .. sourcecode:: console
 
-  $ ./bake.py configure -e ns-allinone-3.42
+  $ ./bake.py configure -e ns-allinone-3.43
 
 Next, we'll ask bake to check whether we have enough tools to download
 various components.  Type:
@@ -347,7 +347,7 @@
   >> Downloading click-ns-3.37 - OK
   >> Downloading BRITE - OK
   >> Downloading openflow-dev - OK
-  >> Downloading ns-3.42 (target directory:ns-3.42) - OK
+  >> Downloading ns-3.43 (target directory:ns-3.43) - OK
 
 The above suggests that three sources have been downloaded.  Check the
 ``source`` directory now and type ``ls``; one should see:
@@ -356,7 +356,7 @@
 
   $ cd source
   $ ls
-  BRITE  click-ns-3.37  netanim-3.109  ns-3.42  openflow-dev
+  BRITE  click-ns-3.37  netanim-3.109  ns-3.43  openflow-dev
 
 You are now ready to build the |ns3| distribution.
 
@@ -386,7 +386,7 @@
 
 If you downloaded
 using a tarball you should have a directory called something like
-``ns-allinone-3.42`` under your ``~/workspace`` directory.
+``ns-allinone-3.43`` under your ``~/workspace`` directory.
 Type the following:
 
 .. sourcecode:: console
@@ -419,7 +419,7 @@
 .. sourcecode:: text
 
   >> Building netanim-3.109 - OK
-  >> Building ns-3.42 - OK
+  >> Building ns-3.43 - OK
 
 There may be failures to build all components, but the build will proceed
 anyway if the component is optional.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/tutorial/source/quick-start.rst ns-3.43/doc/tutorial/source/quick-start.rst
--- ns-3.42/doc/tutorial/source/quick-start.rst	2024-05-29 15:29:46.904073000 -0700
+++ ns-3.43/doc/tutorial/source/quick-start.rst	2024-10-09 16:41:09.836655600 -0700
@@ -33,7 +33,7 @@
 Prerequisites
 *************
 |ns3| has various optional extensions, but the main features just require
-a C++ compiler (g++ or clang++), Python (version 3.6 or above), CMake and
+a C++ compiler (g++ or clang++), Python (version 3.8 or above), CMake and
 a build-system (e.g. make, ninja, Xcode).
 We focus in this chapter only on getting |ns3| up and running on a system
 supported by a recent C++ compiler and Python runtime support.
@@ -64,13 +64,13 @@
 
    ::
 
-    $ tar xjf ns-allinone-3.42.tar.bz2
+    $ tar xjf ns-allinone-3.43.tar.bz2
 
 3) Change into the |ns3| directory directly; e.g.
 
    ::
 
-    $ cd ns-allinone-3.42/ns-3.42
+    $ cd ns-allinone-3.43/ns-3.43
 
 The ns-allinone directory has some additional components but we are skipping
 over them here; one can work directly from the |ns3| source code directory.
@@ -92,12 +92,12 @@
 
   $ cd ns-3-dev
 
-If instead you want to try the most recent release (version 3.42 as of this
+If instead you want to try the most recent release (version 3.43 as of this
 writing), you can checkout a branch corresponding to that git tag:
 
 ::
 
-  $ git checkout -b ns-3.42-branch ns-3.42
+  $ git checkout -b ns-3.43-branch ns-3.43
 
 Building and testing ns-3
 *************************
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/tutorial/source/resources.rst ns-3.43/doc/tutorial/source/resources.rst
--- ns-3.42/doc/tutorial/source/resources.rst	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/doc/tutorial/source/resources.rst	2024-10-09 16:41:09.836655600 -0700
@@ -36,7 +36,7 @@
 using Git.  Although you do not need to know much about Git in order to
 complete this tutorial, we recommend becoming familiar with Git and using it
 to access the source code.  GitLab.com provides resources to get started
-at: https://docs.gitlab.com/ee/gitlab-basics/.
+at: https://docs.gitlab.com/ee/tutorials/.
 
 CMake
 *****
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/doc/tutorial/source/tracing.rst ns-3.43/doc/tutorial/source/tracing.rst
--- ns-3.42/doc/tutorial/source/tracing.rst	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/doc/tutorial/source/tracing.rst	2024-10-09 16:41:09.836655600 -0700
@@ -314,18 +314,7 @@
 the tutorial directory as ``fourth.cc``.  Let's walk through it::
 
   /*
-   * This program is free software; you can redistribute it and/or modify
-   * it under the terms of the GNU General Public License version 2 as
-   * published by the Free Software Foundation;
-   *
-   * This program is distributed in the hope that it will be useful,
-   * but WITHOUT ANY WARRANTY; without even the implied warranty of
-   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   * GNU General Public License for more details.
-   *
-   * You should have received a copy of the GNU General Public License
-   * along with this program; if not, write to the Free Software
-   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+   * SPDX-License-Identifier: GPL-2.0-only
    */
 
   #include "ns3/object.h"
@@ -625,7 +614,7 @@
   .AddTraceSource("CourseChange",
                   "The value of the position and/or velocity vector changed",
                   MakeTraceSourceAccessor(&MobilityModel::m_courseChangeTrace),
-                  "ns3::MobilityModel::CourseChangeCallback")
+                  "ns3::MobilityModel::TracedCallback");
 
 which should look very familiar at this point.
 
@@ -634,14 +623,14 @@
 
 ::
 
-  TracedCallback<Ptr<const MobilityModel>> m_courseChangeTrace;
+  ns3::TracedCallback<Ptr<const MobilityModel>> m_courseChangeTrace;
 
 The type declaration ``TracedCallback`` identifies
 ``m_courseChangeTrace`` as a special list of Callbacks that can be
 hooked using the Config functions described above.  The ``typedef``
 for the callback function signature is also defined in the header file::
 
-  typedef void (* CourseChangeCallback)(Ptr<const MobilityModel> * model);
+  typedef void (*TracedCallback)(Ptr<const MobilityModel> model);
 
 The ``MobilityModel`` class is designed to be a base class providing a
 common interface for all of the specific subclasses.  If you search
@@ -651,7 +640,7 @@
   void
   MobilityModel::NotifyCourseChange() const
   {
-    m_courseChangeTrace(this);
+      m_courseChangeTrace(this);
   }
 
 Derived classes will call into this method whenever they do a course
@@ -1390,18 +1379,7 @@
 see some familiar looking code::
 
   /*
-   * This program is free software; you can redistribute it and/or modify
-   * it under the terms of the GNU General Public License version 2 as
-   * published by the Free Software Foundation;
-   *
-   * This program is distributed in the hope that it will be useful,
-   * but WITHOUT ANY WARRANTY; without even the implied warranty of
-   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   * GNU General Public License for more details.
-   *
-   * You should have received a copy of the GNU General Public License
-   * along with this program; if not, write to the Free Software
-   * Foundation, Include., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+   * SPDX-License-Identifier: GPL-2.0-only
    */
 
   #include "tutorial-app.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/channel-models/three-gpp-v2v-channel-example.cc ns-3.43/examples/channel-models/three-gpp-v2v-channel-example.cc
--- ns-3.42/examples/channel-models/three-gpp-v2v-channel-example.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/channel-models/three-gpp-v2v-channel-example.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020, University of Padova, Dep. of Information Engineering, SIGNET lab
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/channel-models/three-gpp-v2v-channel-example.sh ns-3.43/examples/channel-models/three-gpp-v2v-channel-example.sh
--- ns-3.42/examples/channel-models/three-gpp-v2v-channel-example.sh	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/channel-models/three-gpp-v2v-channel-example.sh	2024-10-09 16:41:09.836655600 -0700
@@ -2,18 +2,7 @@
 
 # Copyright (c) 2020, University of Padova, Dep. of Information Engineering, SIGNET lab
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 
 #
 #  Plot the traces generated by three-gpp-vehicular-channel-condition-model-example
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/energy/energy-model-example.cc ns-3.43/examples/energy/energy-model-example.cc
--- ns-3.42/examples/energy/energy-model-example.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/energy/energy-model-example.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/energy/energy-model-with-harvesting-example.cc ns-3.43/examples/energy/energy-model-with-harvesting-example.cc
--- ns-3.42/examples/energy/energy-model-with-harvesting-example.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/energy/energy-model-with-harvesting-example.cc	2024-10-09 16:41:09.836655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/error-model/simple-error-model.cc ns-3.43/examples/error-model/simple-error-model.cc
--- ns-3.42/examples/error-model/simple-error-model.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/error-model/simple-error-model.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/fragmentation-ipv6.cc ns-3.43/examples/ipv6/fragmentation-ipv6.cc
--- ns-3.42/examples/ipv6/fragmentation-ipv6.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/fragmentation-ipv6.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  *         Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/fragmentation-ipv6-PMTU.cc ns-3.43/examples/ipv6/fragmentation-ipv6-PMTU.cc
--- ns-3.42/examples/ipv6/fragmentation-ipv6-PMTU.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/fragmentation-ipv6-PMTU.cc	2024-10-09 16:41:09.836655600 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2013 Universita' di Firenze
  * Copyright (c) 2022 Jadavpur University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  *         Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/fragmentation-ipv6-two-MTU.cc ns-3.43/examples/ipv6/fragmentation-ipv6-two-MTU.cc
--- ns-3.42/examples/ipv6/fragmentation-ipv6-two-MTU.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/fragmentation-ipv6-two-MTU.cc	2024-10-09 16:41:09.836655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008-2009 Strasbourg University
  * Copyright (c) 2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  *         Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/icmpv6-redirect.cc ns-3.43/examples/ipv6/icmpv6-redirect.cc
--- ns-3.42/examples/ipv6/icmpv6-redirect.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/icmpv6-redirect.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/loose-routing-ipv6.cc ns-3.43/examples/ipv6/loose-routing-ipv6.cc
--- ns-3.42/examples/ipv6/loose-routing-ipv6.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/loose-routing-ipv6.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/ping6-example.cc ns-3.43/examples/ipv6/ping6-example.cc
--- ns-3.42/examples/ipv6/ping6-example.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/ping6-example.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/radvd-one-prefix.cc ns-3.43/examples/ipv6/radvd-one-prefix.cc
--- ns-3.42/examples/ipv6/radvd-one-prefix.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/radvd-one-prefix.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  *         Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/radvd-two-prefix.cc ns-3.43/examples/ipv6/radvd-two-prefix.cc
--- ns-3.42/examples/ipv6/radvd-two-prefix.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/radvd-two-prefix.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  *         Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/test-ipv6.cc ns-3.43/examples/ipv6/test-ipv6.cc
--- ns-3.42/examples/ipv6/test-ipv6.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/test-ipv6.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Louis Pasteur University / Telecom Bretagne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Angelos Chatzipapas <Angelos.CHATZIPAPAS@enst-bretagne.fr> /
  * <chatzipa@ceid.upatras.gr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/ipv6/wsn-ping6.cc ns-3.43/examples/ipv6/wsn-ping6.cc
--- ns-3.42/examples/ipv6/wsn-ping6.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/ipv6/wsn-ping6.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
@@ -85,6 +74,8 @@
 
     NS_LOG_INFO("Create channels.");
     LrWpanHelper lrWpanHelper;
+    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
     // Add and install the LrWpanNetDevice for each node
     // lrWpanHelper.EnableLogComponents();
     NetDeviceContainer devContainer = lrWpanHelper.Install(nodes);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/matrix-topology/matrix-topology.cc ns-3.43/examples/matrix-topology/matrix-topology.cc
--- ns-3.42/examples/matrix-topology/matrix-topology.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/matrix-topology/matrix-topology.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Egemen K. Cetinkaya, Justin P. Rohrer, and Amit Dandekar
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Egemen K. Cetinkaya <ekc@ittc.ku.edu>
  * Author: Justin P. Rohrer    <rohrej@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/naming/object-names.cc ns-3.43/examples/naming/object-names.cc
--- ns-3.42/examples/naming/object-names.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/naming/object-names.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/realtime/realtime-udp-echo.cc ns-3.43/examples/realtime/realtime-udp-echo.cc
--- ns-3.42/examples/realtime/realtime-udp-echo.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/realtime/realtime-udp-echo.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/realtime/realtime-udp-echo.py ns-3.43/examples/realtime/realtime-udp-echo.py
--- ns-3.42/examples/realtime/realtime-udp-echo.py	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/realtime/realtime-udp-echo.py	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 #
-# * This program is free software; you can redistribute it and/or modify
-# * it under the terms of the GNU General Public License version 2 as
-# * published by the Free Software Foundation;
-# *
-# * This program is distributed in the hope that it will be useful,
-# * but WITHOUT ANY WARRANTY; without even the implied warranty of
-# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# * GNU General Public License for more details.
-# *
-# * You should have received a copy of the GNU General Public License
-# * along with this program; if not, write to the Free Software
-# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# * SPDX-License-Identifier: GPL-2.0-only
 
 # Network topology
 #
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/dynamic-global-routing.cc ns-3.43/examples/routing/dynamic-global-routing.cc
--- ns-3.42/examples/routing/dynamic-global-routing.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/dynamic-global-routing.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Contributed by:  Luis Cortes (cortes@gatech.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/global-injection-slash32.cc ns-3.43/examples/routing/global-injection-slash32.cc
--- ns-3.42/examples/routing/global-injection-slash32.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/global-injection-slash32.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/global-routing-multi-switch-plus-router.cc ns-3.43/examples/routing/global-routing-multi-switch-plus-router.cc
--- ns-3.42/examples/routing/global-routing-multi-switch-plus-router.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/global-routing-multi-switch-plus-router.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 - Chip Webb
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Chip Webb  <ns3 (at) chipwebb.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/global-routing-slash32.cc ns-3.43/examples/routing/global-routing-slash32.cc
--- ns-3.42/examples/routing/global-routing-slash32.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/global-routing-slash32.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/manet-routing-compare.cc ns-3.43/examples/routing/manet-routing-compare.cc
--- ns-3.42/examples/routing/manet-routing-compare.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/manet-routing-compare.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Justin Rohrer <rohrej@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/mixed-global-routing.cc ns-3.43/examples/routing/mixed-global-routing.cc
--- ns-3.42/examples/routing/mixed-global-routing.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/mixed-global-routing.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/ripng-simple-network.cc ns-3.43/examples/routing/ripng-simple-network.cc
--- ns-3.42/examples/routing/ripng-simple-network.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/ripng-simple-network.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/rip-simple-network.cc ns-3.43/examples/routing/rip-simple-network.cc
--- ns-3.42/examples/routing/rip-simple-network.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/rip-simple-network.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/simple-alternate-routing.cc ns-3.43/examples/routing/simple-alternate-routing.cc
--- ns-3.42/examples/routing/simple-alternate-routing.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/simple-alternate-routing.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/simple-global-routing.cc ns-3.43/examples/routing/simple-global-routing.cc
--- ns-3.42/examples/routing/simple-global-routing.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/simple-global-routing.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/simple-multicast-flooding.cc ns-3.43/examples/routing/simple-multicast-flooding.cc
--- ns-3.42/examples/routing/simple-multicast-flooding.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/simple-multicast-flooding.cc	2024-10-09 16:41:09.836655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2013 Universita' di Firenze
  * Copyright (c) 2019 Caliola Engineering, LLC : RFC 6621 multicast packet de-duplication
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  * Modified (2019): Jared Dulmage <jared.dulmage@caliola.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/simple-routing-ping6.cc ns-3.43/examples/routing/simple-routing-ping6.cc
--- ns-3.42/examples/routing/simple-routing-ping6.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/simple-routing-ping6.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  *         Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/simple-routing-ping6.py ns-3.43/examples/routing/simple-routing-ping6.py
--- ns-3.42/examples/routing/simple-routing-ping6.py	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/simple-routing-ping6.py	2024-10-09 16:41:09.836655600 -0700
@@ -1,18 +1,7 @@
 #
 # Copyright (c) 2008-2009 Strasbourg University
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: David Gross <gdavid.devel@gmail.com>
 #         Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/routing/static-routing-slash32.cc ns-3.43/examples/routing/static-routing-slash32.cc
--- ns-3.42/examples/routing/static-routing-slash32.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/routing/static-routing-slash32.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/socket/socket-bound-static-routing.cc ns-3.43/examples/socket/socket-bound-static-routing.cc
--- ns-3.42/examples/socket/socket-bound-static-routing.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/socket/socket-bound-static-routing.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/socket/socket-bound-tcp-static-routing.cc ns-3.43/examples/socket/socket-bound-tcp-static-routing.cc
--- ns-3.42/examples/socket/socket-bound-tcp-static-routing.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/socket/socket-bound-tcp-static-routing.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/socket/socket-options-ipv4.cc ns-3.43/examples/socket/socket-options-ipv4.cc
--- ns-3.42/examples/socket/socket-options-ipv4.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/socket/socket-options-ipv4.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/socket/socket-options-ipv6.cc ns-3.43/examples/socket/socket-options-ipv6.cc
--- ns-3.42/examples/socket/socket-options-ipv6.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/socket/socket-options-ipv6.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/stats/wifi-example-apps.cc ns-3.43/examples/stats/wifi-example-apps.cc
--- ns-3.42/examples/stats/wifi-example-apps.cc	2024-05-29 15:29:46.908073000 -0700
+++ ns-3.43/examples/stats/wifi-example-apps.cc	2024-10-09 16:41:09.836655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Joe Kopena <tjkopena@cs.drexel.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/stats/wifi-example-apps.h ns-3.43/examples/stats/wifi-example-apps.h
--- ns-3.42/examples/stats/wifi-example-apps.h	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/stats/wifi-example-apps.h	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Joe Kopena <tjkopena@cs.drexel.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/stats/wifi-example-sim.cc ns-3.43/examples/stats/wifi-example-sim.cc
--- ns-3.42/examples/stats/wifi-example-sim.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/stats/wifi-example-sim.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Joe Kopena <tjkopena@cs.drexel.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/dctcp-example.cc ns-3.43/examples/tcp/dctcp-example.cc
--- ns-3.42/examples/tcp/dctcp-example.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/dctcp-example.cc	2024-10-09 16:41:09.840655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2017-20 NITK Surathkal
  * Copyright (c) 2020 Tom Henderson (better alignment with experiment)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Shravya K.S. <shravya.ks0@gmail.com>
  *          Apoorva Bhargava <apoorvabhargava13@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/star.cc ns-3.43/examples/tcp/star.cc
--- ns-3.42/examples/tcp/star.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/star.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/tcp-bbr-example.cc ns-3.43/examples/tcp/tcp-bbr-example.cc
--- ns-3.42/examples/tcp/tcp-bbr-example.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/tcp-bbr-example.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018-20 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Aarti Nandagiri <aarti.nandagiri@gmail.com>
  *          Vivek Jain <jain.vivek.anand@gmail.com>
@@ -41,7 +30,7 @@
 //     * bbr-3-0.pcap for the first interface on R2
 //     * bbr-3-1.pcap for the second interface on R2
 // (2) cwnd.dat file contains congestion window trace for the sender node
-// (3) throughput.dat file contains sender side throughput trace
+// (3) throughput.dat file contains sender side throughput trace (throughput is in Mbit/s)
 // (4) queueSize.dat file contains queue length trace from the bottleneck link
 //
 // BBR algorithm enters PROBE_RTT phase in every 10 seconds. The congestion
@@ -81,9 +70,12 @@
     {
         auto itr = stats.begin();
         Time curTime = Now();
-        throughput << curTime << " "
+
+        // Convert (curTime - prevTime) to microseconds so that throughput is in bits per
+        // microsecond (which is equivalent to Mbps)
+        throughput << curTime.GetSeconds() << "s "
                    << 8 * (itr->second.txBytes - prev) / ((curTime - prevTime).ToDouble(Time::US))
-                   << std::endl;
+                   << " Mbps" << std::endl;
         prevTime = curTime;
         prev = itr->second.txBytes;
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/tcp-bulk-send.cc ns-3.43/examples/tcp/tcp-bulk-send.cc
--- ns-3.42/examples/tcp/tcp-bulk-send.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/tcp-bulk-send.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/tcp-large-transfer.cc ns-3.43/examples/tcp/tcp-large-transfer.cc
--- ns-3.42/examples/tcp/tcp-large-transfer.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/tcp-large-transfer.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/tcp-linux-reno.cc ns-3.43/examples/tcp/tcp-linux-reno.cc
--- ns-3.42/examples/tcp/tcp-linux-reno.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/tcp-linux-reno.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Apoorva Bhargava <apoorvabhargava13@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/tcp-pacing.cc ns-3.43/examples/tcp/tcp-pacing.cc
--- ns-3.42/examples/tcp/tcp-pacing.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/tcp-pacing.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Vivek Jain <jain.vivek.anand@gmail.com>
  *          Deepak Kumaraswamy <deepakkavoor99@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/tcp-pcap-nanosec-example.cc ns-3.43/examples/tcp/tcp-pcap-nanosec-example.cc
--- ns-3.42/examples/tcp/tcp-pcap-nanosec-example.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/tcp-pcap-nanosec-example.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // ============================================================ //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/tcp-star-server.cc ns-3.43/examples/tcp/tcp-star-server.cc
--- ns-3.42/examples/tcp/tcp-star-server.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/tcp-star-server.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/tcp-validation.cc ns-3.43/examples/tcp/tcp-validation.cc
--- ns-3.42/examples/tcp/tcp-validation.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/tcp-validation.cc	2024-10-09 16:41:09.840655800 -0700
@@ -2,34 +2,7 @@
  * Copyright (c) 2019 Cable Television Laboratories, Inc.
  * Copyright (c) 2020 Tom Henderson (adapted for DCTCP testing)
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions, and the following disclaimer,
- *    without modification.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The names of the authors may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * Alternatively, provided that this notice is retained in full, this
- * software may be distributed under the terms of the GNU General
- * Public License ("GPL") version 2, in which case the provisions of the
- * GPL apply INSTEAD OF those given above.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier: BSD-3-Clause
  */
 
 // This program is designed to observe long-running TCP congestion control
@@ -258,10 +231,10 @@
             NS_LOG_WARN("now " << Now().As(Time::S) << " alpha " << alpha << " (expected <= 0.1)");
             g_validationFailed = true;
         }
-        if ((now > 7) && ((alpha > 0.09) || (alpha < 0.055)))
+        if ((now > 7) && ((alpha > 0.09) || (alpha < 0.049)))
         {
             NS_LOG_WARN("now " << Now().As(Time::S) << " alpha " << alpha
-                               << " (expected 0.09 <= alpha <= 0.055)");
+                               << " (expected 0.09 <= alpha <= 0.049)");
             g_validationFailed = true;
         }
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tcp/tcp-variants-comparison.cc ns-3.43/examples/tcp/tcp-variants-comparison.cc
--- ns-3.42/examples/tcp/tcp-variants-comparison.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tcp/tcp-variants-comparison.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Justin P. Rohrer, Truc Anh N. Nguyen <annguyen@ittc.ku.edu>, Siddharth Gangadhar
  * <siddharth@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/traffic-control/CMakeLists.txt ns-3.43/examples/traffic-control/CMakeLists.txt
--- ns-3.42/examples/traffic-control/CMakeLists.txt	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/traffic-control/CMakeLists.txt	2024-10-09 16:41:09.840655800 -0700
@@ -1,6 +1,6 @@
 build_example(
-  NAME traffic-control
-  SOURCE_FILES traffic-control.cc
+  NAME traffic-control-example
+  SOURCE_FILES traffic-control-example.cc
   LIBRARIES_TO_LINK
     ${libinternet}
     ${libpoint-to-point}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/traffic-control/cobalt-vs-codel.cc ns-3.43/examples/traffic-control/cobalt-vs-codel.cc
--- ns-3.42/examples/traffic-control/cobalt-vs-codel.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/traffic-control/cobalt-vs-codel.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Shefali Gupta <shefaligups11@ogmail.com>
  *         Jendaipou Palmei <jendaipoupalmei@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/traffic-control/queue-discs-benchmark.cc ns-3.43/examples/traffic-control/queue-discs-benchmark.cc
--- ns-3.42/examples/traffic-control/queue-discs-benchmark.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/traffic-control/queue-discs-benchmark.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/traffic-control/red-vs-fengadaptive.cc ns-3.43/examples/traffic-control/red-vs-fengadaptive.cc
--- ns-3.42/examples/traffic-control/red-vs-fengadaptive.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/traffic-control/red-vs-fengadaptive.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sourabh Jain <sourabhjain560@outlook.com>
  *         Mohit P. Tahiliani <tahiliani@nitk.edu.in>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/traffic-control/red-vs-nlred.cc ns-3.43/examples/traffic-control/red-vs-nlred.cc
--- ns-3.42/examples/traffic-control/red-vs-nlred.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/traffic-control/red-vs-nlred.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Phani Kiran S V S <phanikiran.harithas@gmail.com>
  *          Nichit Bodhak Goel <nichit93@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/traffic-control/tbf-example.cc ns-3.43/examples/traffic-control/tbf-example.cc
--- ns-3.42/examples/traffic-control/tbf-example.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/traffic-control/tbf-example.cc	2024-10-09 16:41:09.840655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2015 Universita' degli Studi di Napoli "Federico II"
  *               2017 Kungliga Tekniska Högskolan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pasquale Imputato <p.imputato@gmail.com>
  * Author: Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/traffic-control/traffic-control.cc ns-3.43/examples/traffic-control/traffic-control.cc
--- ns-3.42/examples/traffic-control/traffic-control.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/traffic-control/traffic-control.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,248 +0,0 @@
-/*
- * Copyright (c) 2015 Universita' degli Studi di Napoli "Federico II"
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Pasquale Imputato <p.imputato@gmail.com>
- * Author: Stefano Avallone <stefano.avallone@unina.it>
- */
-
-#include "ns3/applications-module.h"
-#include "ns3/core-module.h"
-#include "ns3/flow-monitor-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/network-module.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/traffic-control-module.h"
-
-// This simple example shows how to use TrafficControlHelper to install a
-// QueueDisc on a device.
-//
-// The default QueueDisc is a pfifo_fast with a capacity of 1000 packets (as in
-// Linux). However, in this example, we install a RedQueueDisc with a capacity
-// of 10000 packets.
-//
-// Network topology
-//
-//       10.1.1.0
-// n0 -------------- n1
-//    point-to-point
-//
-// The output will consist of all the traced changes in the length of the RED
-// internal queue and in the length of the netdevice queue:
-//
-//    DevicePacketsInQueue 0 to 1
-//    TcPacketsInQueue 7 to 8
-//    TcPacketsInQueue 8 to 9
-//    DevicePacketsInQueue 1 to 0
-//    TcPacketsInQueue 9 to 8
-//
-// plus some statistics collected at the network layer (by the flow monitor)
-// and the application layer. Finally, the number of packets dropped by the
-// queuing discipline, the number of packets dropped by the netdevice and
-// the number of packets requeued by the queuing discipline are reported.
-//
-// If the size of the DropTail queue of the netdevice were increased from 1
-// to a large number (e.g. 1000), one would observe that the number of dropped
-// packets goes to zero, but the latency grows in an uncontrolled manner. This
-// is the so-called bufferbloat problem, and illustrates the importance of
-// having a small device queue, so that the standing queues build in the traffic
-// control layer where they can be managed by advanced queue discs rather than
-// in the device layer.
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE("TrafficControlExample");
-
-/**
- * Number of packets in TX queue trace.
- *
- * \param oldValue Old velue.
- * \param newValue New value.
- */
-void
-TcPacketsInQueueTrace(uint32_t oldValue, uint32_t newValue)
-{
-    std::cout << "TcPacketsInQueue " << oldValue << " to " << newValue << std::endl;
-}
-
-/**
- * Packets in the device queue trace.
- *
- * \param oldValue Old velue.
- * \param newValue New value.
- */
-void
-DevicePacketsInQueueTrace(uint32_t oldValue, uint32_t newValue)
-{
-    std::cout << "DevicePacketsInQueue " << oldValue << " to " << newValue << std::endl;
-}
-
-/**
- * TC Soujoun time trace.
- *
- * \param sojournTime The soujourn time.
- */
-void
-SojournTimeTrace(Time sojournTime)
-{
-    std::cout << "Sojourn time " << sojournTime.ToDouble(Time::MS) << "ms" << std::endl;
-}
-
-int
-main(int argc, char* argv[])
-{
-    double simulationTime = 10; // seconds
-    std::string transportProt = "Tcp";
-    std::string socketType;
-
-    CommandLine cmd(__FILE__);
-    cmd.AddValue("transportProt", "Transport protocol to use: Tcp, Udp", transportProt);
-    cmd.Parse(argc, argv);
-
-    if (transportProt == "Tcp")
-    {
-        socketType = "ns3::TcpSocketFactory";
-    }
-    else
-    {
-        socketType = "ns3::UdpSocketFactory";
-    }
-
-    NodeContainer nodes;
-    nodes.Create(2);
-
-    PointToPointHelper pointToPoint;
-    pointToPoint.SetDeviceAttribute("DataRate", StringValue("10Mbps"));
-    pointToPoint.SetChannelAttribute("Delay", StringValue("2ms"));
-    pointToPoint.SetQueue("ns3::DropTailQueue", "MaxSize", StringValue("1p"));
-
-    NetDeviceContainer devices;
-    devices = pointToPoint.Install(nodes);
-
-    InternetStackHelper stack;
-    stack.Install(nodes);
-
-    TrafficControlHelper tch;
-    tch.SetRootQueueDisc("ns3::RedQueueDisc");
-    QueueDiscContainer qdiscs = tch.Install(devices);
-
-    Ptr<QueueDisc> q = qdiscs.Get(1);
-    q->TraceConnectWithoutContext("PacketsInQueue", MakeCallback(&TcPacketsInQueueTrace));
-    Config::ConnectWithoutContext(
-        "/NodeList/1/$ns3::TrafficControlLayer/RootQueueDiscList/0/SojournTime",
-        MakeCallback(&SojournTimeTrace));
-
-    Ptr<NetDevice> nd = devices.Get(1);
-    Ptr<PointToPointNetDevice> ptpnd = DynamicCast<PointToPointNetDevice>(nd);
-    Ptr<Queue<Packet>> queue = ptpnd->GetQueue();
-    queue->TraceConnectWithoutContext("PacketsInQueue", MakeCallback(&DevicePacketsInQueueTrace));
-
-    Ipv4AddressHelper address;
-    address.SetBase("10.1.1.0", "255.255.255.0");
-
-    Ipv4InterfaceContainer interfaces = address.Assign(devices);
-
-    // Flow
-    uint16_t port = 7;
-    Address localAddress(InetSocketAddress(Ipv4Address::GetAny(), port));
-    PacketSinkHelper packetSinkHelper(socketType, localAddress);
-    ApplicationContainer sinkApp = packetSinkHelper.Install(nodes.Get(0));
-
-    sinkApp.Start(Seconds(0.0));
-    sinkApp.Stop(Seconds(simulationTime + 0.1));
-
-    uint32_t payloadSize = 1448;
-    Config::SetDefault("ns3::TcpSocket::SegmentSize", UintegerValue(payloadSize));
-
-    OnOffHelper onoff(socketType, Ipv4Address::GetAny());
-    onoff.SetAttribute("OnTime", StringValue("ns3::ConstantRandomVariable[Constant=1]"));
-    onoff.SetAttribute("OffTime", StringValue("ns3::ConstantRandomVariable[Constant=0]"));
-    onoff.SetAttribute("PacketSize", UintegerValue(payloadSize));
-    onoff.SetAttribute("DataRate", StringValue("50Mbps")); // bit/s
-    ApplicationContainer apps;
-
-    InetSocketAddress rmt(interfaces.GetAddress(0), port);
-    onoff.SetAttribute("Remote", AddressValue(rmt));
-    onoff.SetAttribute("Tos", UintegerValue(0xb8));
-    apps.Add(onoff.Install(nodes.Get(1)));
-    apps.Start(Seconds(1.0));
-    apps.Stop(Seconds(simulationTime + 0.1));
-
-    FlowMonitorHelper flowmon;
-    Ptr<FlowMonitor> monitor = flowmon.InstallAll();
-
-    Simulator::Stop(Seconds(simulationTime + 5));
-    Simulator::Run();
-
-    Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier>(flowmon.GetClassifier());
-    std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats();
-    std::cout << std::endl << "*** Flow monitor statistics ***" << std::endl;
-    std::cout << "  Tx Packets/Bytes:   " << stats[1].txPackets << " / " << stats[1].txBytes
-              << std::endl;
-    std::cout << "  Offered Load: "
-              << stats[1].txBytes * 8.0 /
-                     (stats[1].timeLastTxPacket.GetSeconds() -
-                      stats[1].timeFirstTxPacket.GetSeconds()) /
-                     1000000
-              << " Mbps" << std::endl;
-    std::cout << "  Rx Packets/Bytes:   " << stats[1].rxPackets << " / " << stats[1].rxBytes
-              << std::endl;
-    uint32_t packetsDroppedByQueueDisc = 0;
-    uint64_t bytesDroppedByQueueDisc = 0;
-    if (stats[1].packetsDropped.size() > Ipv4FlowProbe::DROP_QUEUE_DISC)
-    {
-        packetsDroppedByQueueDisc = stats[1].packetsDropped[Ipv4FlowProbe::DROP_QUEUE_DISC];
-        bytesDroppedByQueueDisc = stats[1].bytesDropped[Ipv4FlowProbe::DROP_QUEUE_DISC];
-    }
-    std::cout << "  Packets/Bytes Dropped by Queue Disc:   " << packetsDroppedByQueueDisc << " / "
-              << bytesDroppedByQueueDisc << std::endl;
-    uint32_t packetsDroppedByNetDevice = 0;
-    uint64_t bytesDroppedByNetDevice = 0;
-    if (stats[1].packetsDropped.size() > Ipv4FlowProbe::DROP_QUEUE)
-    {
-        packetsDroppedByNetDevice = stats[1].packetsDropped[Ipv4FlowProbe::DROP_QUEUE];
-        bytesDroppedByNetDevice = stats[1].bytesDropped[Ipv4FlowProbe::DROP_QUEUE];
-    }
-    std::cout << "  Packets/Bytes Dropped by NetDevice:   " << packetsDroppedByNetDevice << " / "
-              << bytesDroppedByNetDevice << std::endl;
-    std::cout << "  Throughput: "
-              << stats[1].rxBytes * 8.0 /
-                     (stats[1].timeLastRxPacket.GetSeconds() -
-                      stats[1].timeFirstRxPacket.GetSeconds()) /
-                     1000000
-              << " Mbps" << std::endl;
-    std::cout << "  Mean delay:   " << stats[1].delaySum.GetSeconds() / stats[1].rxPackets
-              << std::endl;
-    std::cout << "  Mean jitter:   " << stats[1].jitterSum.GetSeconds() / (stats[1].rxPackets - 1)
-              << std::endl;
-    auto dscpVec = classifier->GetDscpCounts(1);
-    for (auto p : dscpVec)
-    {
-        std::cout << "  DSCP value:   0x" << std::hex << static_cast<uint32_t>(p.first) << std::dec
-                  << "  count:   " << p.second << std::endl;
-    }
-
-    Simulator::Destroy();
-
-    std::cout << std::endl << "*** Application statistics ***" << std::endl;
-    double thr = 0;
-    uint64_t totalPacketsThr = DynamicCast<PacketSink>(sinkApp.Get(0))->GetTotalRx();
-    thr = totalPacketsThr * 8 / (simulationTime * 1000000.0); // Mbit/s
-    std::cout << "  Rx Bytes: " << totalPacketsThr << std::endl;
-    std::cout << "  Average Goodput: " << thr << " Mbit/s" << std::endl;
-    std::cout << std::endl << "*** TC Layer statistics ***" << std::endl;
-    std::cout << q->GetStats() << std::endl;
-    return 0;
-}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/traffic-control/traffic-control-example.cc ns-3.43/examples/traffic-control/traffic-control-example.cc
--- ns-3.42/examples/traffic-control/traffic-control-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/examples/traffic-control/traffic-control-example.cc	2024-10-09 16:41:09.840655800 -0700
@@ -0,0 +1,237 @@
+/*
+ * Copyright (c) 2015 Universita' degli Studi di Napoli "Federico II"
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Pasquale Imputato <p.imputato@gmail.com>
+ * Author: Stefano Avallone <stefano.avallone@unina.it>
+ */
+
+#include "ns3/applications-module.h"
+#include "ns3/core-module.h"
+#include "ns3/flow-monitor-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/network-module.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/traffic-control-module.h"
+
+// This simple example shows how to use TrafficControlHelper to install a
+// QueueDisc on a device.
+//
+// The default QueueDisc is a pfifo_fast with a capacity of 1000 packets (as in
+// Linux). However, in this example, we install a RedQueueDisc with a capacity
+// of 10000 packets.
+//
+// Network topology
+//
+//       10.1.1.0
+// n0 -------------- n1
+//    point-to-point
+//
+// The output will consist of all the traced changes in the length of the RED
+// internal queue and in the length of the netdevice queue:
+//
+//    DevicePacketsInQueue 0 to 1
+//    TcPacketsInQueue 7 to 8
+//    TcPacketsInQueue 8 to 9
+//    DevicePacketsInQueue 1 to 0
+//    TcPacketsInQueue 9 to 8
+//
+// plus some statistics collected at the network layer (by the flow monitor)
+// and the application layer. Finally, the number of packets dropped by the
+// queuing discipline, the number of packets dropped by the netdevice and
+// the number of packets requeued by the queuing discipline are reported.
+//
+// If the size of the DropTail queue of the netdevice were increased from 1
+// to a large number (e.g. 1000), one would observe that the number of dropped
+// packets goes to zero, but the latency grows in an uncontrolled manner. This
+// is the so-called bufferbloat problem, and illustrates the importance of
+// having a small device queue, so that the standing queues build in the traffic
+// control layer where they can be managed by advanced queue discs rather than
+// in the device layer.
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("TrafficControlExample");
+
+/**
+ * Number of packets in TX queue trace.
+ *
+ * \param oldValue Old velue.
+ * \param newValue New value.
+ */
+void
+TcPacketsInQueueTrace(uint32_t oldValue, uint32_t newValue)
+{
+    std::cout << "TcPacketsInQueue " << oldValue << " to " << newValue << std::endl;
+}
+
+/**
+ * Packets in the device queue trace.
+ *
+ * \param oldValue Old velue.
+ * \param newValue New value.
+ */
+void
+DevicePacketsInQueueTrace(uint32_t oldValue, uint32_t newValue)
+{
+    std::cout << "DevicePacketsInQueue " << oldValue << " to " << newValue << std::endl;
+}
+
+/**
+ * TC Soujoun time trace.
+ *
+ * \param sojournTime The soujourn time.
+ */
+void
+SojournTimeTrace(Time sojournTime)
+{
+    std::cout << "Sojourn time " << sojournTime.ToDouble(Time::MS) << "ms" << std::endl;
+}
+
+int
+main(int argc, char* argv[])
+{
+    double simulationTime = 10; // seconds
+    std::string transportProt = "Tcp";
+    std::string socketType;
+
+    CommandLine cmd(__FILE__);
+    cmd.AddValue("transportProt", "Transport protocol to use: Tcp, Udp", transportProt);
+    cmd.Parse(argc, argv);
+
+    if (transportProt == "Tcp")
+    {
+        socketType = "ns3::TcpSocketFactory";
+    }
+    else
+    {
+        socketType = "ns3::UdpSocketFactory";
+    }
+
+    NodeContainer nodes;
+    nodes.Create(2);
+
+    PointToPointHelper pointToPoint;
+    pointToPoint.SetDeviceAttribute("DataRate", StringValue("10Mbps"));
+    pointToPoint.SetChannelAttribute("Delay", StringValue("2ms"));
+    pointToPoint.SetQueue("ns3::DropTailQueue", "MaxSize", StringValue("1p"));
+
+    NetDeviceContainer devices;
+    devices = pointToPoint.Install(nodes);
+
+    InternetStackHelper stack;
+    stack.Install(nodes);
+
+    TrafficControlHelper tch;
+    tch.SetRootQueueDisc("ns3::RedQueueDisc");
+    QueueDiscContainer qdiscs = tch.Install(devices);
+
+    Ptr<QueueDisc> q = qdiscs.Get(1);
+    q->TraceConnectWithoutContext("PacketsInQueue", MakeCallback(&TcPacketsInQueueTrace));
+    Config::ConnectWithoutContext(
+        "/NodeList/1/$ns3::TrafficControlLayer/RootQueueDiscList/0/SojournTime",
+        MakeCallback(&SojournTimeTrace));
+
+    Ptr<NetDevice> nd = devices.Get(1);
+    Ptr<PointToPointNetDevice> ptpnd = DynamicCast<PointToPointNetDevice>(nd);
+    Ptr<Queue<Packet>> queue = ptpnd->GetQueue();
+    queue->TraceConnectWithoutContext("PacketsInQueue", MakeCallback(&DevicePacketsInQueueTrace));
+
+    Ipv4AddressHelper address;
+    address.SetBase("10.1.1.0", "255.255.255.0");
+
+    Ipv4InterfaceContainer interfaces = address.Assign(devices);
+
+    // Flow
+    uint16_t port = 7;
+    Address localAddress(InetSocketAddress(Ipv4Address::GetAny(), port));
+    PacketSinkHelper packetSinkHelper(socketType, localAddress);
+    ApplicationContainer sinkApp = packetSinkHelper.Install(nodes.Get(0));
+
+    sinkApp.Start(Seconds(0.0));
+    sinkApp.Stop(Seconds(simulationTime + 0.1));
+
+    uint32_t payloadSize = 1448;
+    Config::SetDefault("ns3::TcpSocket::SegmentSize", UintegerValue(payloadSize));
+
+    OnOffHelper onoff(socketType, Ipv4Address::GetAny());
+    onoff.SetAttribute("OnTime", StringValue("ns3::ConstantRandomVariable[Constant=1]"));
+    onoff.SetAttribute("OffTime", StringValue("ns3::ConstantRandomVariable[Constant=0]"));
+    onoff.SetAttribute("PacketSize", UintegerValue(payloadSize));
+    onoff.SetAttribute("DataRate", StringValue("50Mbps")); // bit/s
+    ApplicationContainer apps;
+
+    InetSocketAddress rmt(interfaces.GetAddress(0), port);
+    onoff.SetAttribute("Remote", AddressValue(rmt));
+    onoff.SetAttribute("Tos", UintegerValue(0xb8));
+    apps.Add(onoff.Install(nodes.Get(1)));
+    apps.Start(Seconds(1.0));
+    apps.Stop(Seconds(simulationTime + 0.1));
+
+    FlowMonitorHelper flowmon;
+    Ptr<FlowMonitor> monitor = flowmon.InstallAll();
+
+    Simulator::Stop(Seconds(simulationTime + 5));
+    Simulator::Run();
+
+    Ptr<Ipv4FlowClassifier> classifier = DynamicCast<Ipv4FlowClassifier>(flowmon.GetClassifier());
+    std::map<FlowId, FlowMonitor::FlowStats> stats = monitor->GetFlowStats();
+    std::cout << std::endl << "*** Flow monitor statistics ***" << std::endl;
+    std::cout << "  Tx Packets/Bytes:   " << stats[1].txPackets << " / " << stats[1].txBytes
+              << std::endl;
+    std::cout << "  Offered Load: "
+              << stats[1].txBytes * 8.0 /
+                     (stats[1].timeLastTxPacket.GetSeconds() -
+                      stats[1].timeFirstTxPacket.GetSeconds()) /
+                     1000000
+              << " Mbps" << std::endl;
+    std::cout << "  Rx Packets/Bytes:   " << stats[1].rxPackets << " / " << stats[1].rxBytes
+              << std::endl;
+    uint32_t packetsDroppedByQueueDisc = 0;
+    uint64_t bytesDroppedByQueueDisc = 0;
+    if (stats[1].packetsDropped.size() > Ipv4FlowProbe::DROP_QUEUE_DISC)
+    {
+        packetsDroppedByQueueDisc = stats[1].packetsDropped[Ipv4FlowProbe::DROP_QUEUE_DISC];
+        bytesDroppedByQueueDisc = stats[1].bytesDropped[Ipv4FlowProbe::DROP_QUEUE_DISC];
+    }
+    std::cout << "  Packets/Bytes Dropped by Queue Disc:   " << packetsDroppedByQueueDisc << " / "
+              << bytesDroppedByQueueDisc << std::endl;
+    uint32_t packetsDroppedByNetDevice = 0;
+    uint64_t bytesDroppedByNetDevice = 0;
+    if (stats[1].packetsDropped.size() > Ipv4FlowProbe::DROP_QUEUE)
+    {
+        packetsDroppedByNetDevice = stats[1].packetsDropped[Ipv4FlowProbe::DROP_QUEUE];
+        bytesDroppedByNetDevice = stats[1].bytesDropped[Ipv4FlowProbe::DROP_QUEUE];
+    }
+    std::cout << "  Packets/Bytes Dropped by NetDevice:   " << packetsDroppedByNetDevice << " / "
+              << bytesDroppedByNetDevice << std::endl;
+    std::cout << "  Throughput: "
+              << stats[1].rxBytes * 8.0 /
+                     (stats[1].timeLastRxPacket.GetSeconds() -
+                      stats[1].timeFirstRxPacket.GetSeconds()) /
+                     1000000
+              << " Mbps" << std::endl;
+    std::cout << "  Mean delay:   " << stats[1].delaySum.GetSeconds() / stats[1].rxPackets
+              << std::endl;
+    std::cout << "  Mean jitter:   " << stats[1].jitterSum.GetSeconds() / (stats[1].rxPackets - 1)
+              << std::endl;
+    auto dscpVec = classifier->GetDscpCounts(1);
+    for (auto p : dscpVec)
+    {
+        std::cout << "  DSCP value:   0x" << std::hex << static_cast<uint32_t>(p.first) << std::dec
+                  << "  count:   " << p.second << std::endl;
+    }
+
+    Simulator::Destroy();
+
+    std::cout << std::endl << "*** Application statistics ***" << std::endl;
+    double thr = 0;
+    uint64_t totalPacketsThr = DynamicCast<PacketSink>(sinkApp.Get(0))->GetTotalRx();
+    thr = totalPacketsThr * 8 / (simulationTime * 1000000.0); // Mbit/s
+    std::cout << "  Rx Bytes: " << totalPacketsThr << std::endl;
+    std::cout << "  Average Goodput: " << thr << " Mbit/s" << std::endl;
+    std::cout << std::endl << "*** TC Layer statistics ***" << std::endl;
+    std::cout << q->GetStats() << std::endl;
+    return 0;
+}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/fifth.cc ns-3.43/examples/tutorial/fifth.cc
--- ns-3.42/examples/tutorial/fifth.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/fifth.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "tutorial-app.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/first.cc ns-3.43/examples/tutorial/first.cc
--- ns-3.42/examples/tutorial/first.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/first.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/applications-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/first.py ns-3.43/examples/tutorial/first.py
--- ns-3.42/examples/tutorial/first.py	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/first.py	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 
 try:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/fourth.cc ns-3.43/examples/tutorial/fourth.cc
--- ns-3.42/examples/tutorial/fourth.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/fourth.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/object.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/hello-simulator.cc ns-3.43/examples/tutorial/hello-simulator.cc
--- ns-3.42/examples/tutorial/hello-simulator.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/hello-simulator.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/core-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/second.cc ns-3.43/examples/tutorial/second.cc
--- ns-3.42/examples/tutorial/second.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/second.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/applications-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/second.py ns-3.43/examples/tutorial/second.py
--- ns-3.42/examples/tutorial/second.py	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/second.py	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Ported to Python by Mohit P. Tahiliani
 #
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/seventh.cc ns-3.43/examples/tutorial/seventh.cc
--- ns-3.42/examples/tutorial/seventh.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/seventh.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "tutorial-app.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/sixth.cc ns-3.43/examples/tutorial/sixth.cc
--- ns-3.42/examples/tutorial/sixth.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/sixth.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "tutorial-app.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/third.cc ns-3.43/examples/tutorial/third.cc
--- ns-3.42/examples/tutorial/third.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/third.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/applications-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/third.py ns-3.43/examples/tutorial/third.py
--- ns-3.42/examples/tutorial/third.py	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/third.py	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Ported to Python by Mohit P. Tahiliani
 #
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/tutorial-app.cc ns-3.43/examples/tutorial/tutorial-app.cc
--- ns-3.42/examples/tutorial/tutorial-app.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/tutorial-app.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "tutorial-app.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/tutorial/tutorial-app.h ns-3.43/examples/tutorial/tutorial-app.h
--- ns-3.42/examples/tutorial/tutorial-app.h	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/tutorial/tutorial-app.h	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef TUTORIAL_APP_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/udp/udp-echo.cc ns-3.43/examples/udp/udp-echo.cc
--- ns-3.42/examples/udp/udp-echo.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/udp/udp-echo.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/udp-client-server/udp-client-server.cc ns-3.43/examples/udp-client-server/udp-client-server.cc
--- ns-3.42/examples/udp-client-server/udp-client-server.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/udp-client-server/udp-client-server.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/udp-client-server/udp-trace-client-server.cc ns-3.43/examples/udp-client-server/udp-trace-client-server.cc
--- ns-3.42/examples/udp-client-server/udp-trace-client-server.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/udp-client-server/udp-trace-client-server.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/examples-to-run.py ns-3.43/examples/wireless/examples-to-run.py
--- ns-3.42/examples/wireless/examples-to-run.py	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/examples-to-run.py	2024-10-09 16:41:09.840655800 -0700
@@ -85,12 +85,17 @@
         "True",
     ),
     (
-        "wifi-vht-network --simulationTime=0.2s --useRts=0  --minExpectedThroughput=5 --maxExpectedThroughput=620",
+        "wifi-vht-network --simulationTime=0.2s --useRts=0 --minExpectedThroughput=5 --maxExpectedThroughput=620",
         "True",
         "True",
     ),
     (
-        "wifi-vht-network --simulationTime=0.2s --useRts=1  --minExpectedThroughput=5 --maxExpectedThroughput=557",
+        "wifi-vht-network --simulationTime=0.2s --useRts=1 --minExpectedThroughput=5 --maxExpectedThroughput=557",
+        "True",
+        "True",
+    ),
+    (
+        "wifi-vht-network --simulationTime=0.2s --useRts=0 --use80Plus80=1 --minExpectedThroughput=5 --maxExpectedThroughput=620",
         "True",
         "True",
     ),
@@ -100,6 +105,11 @@
         "True",
     ),
     (
+        "wifi-he-network --simulationTime=0.25s --frequency=5 --useRts=0 --use80Plus80=1 --minExpectedThroughput=6 --maxExpectedThroughput=844",
+        "True",
+        "True",
+    ),
+    (
         "wifi-he-network --simulationTime=0.3s --frequency=5 --useRts=0 --useExtendedBlockAck=1 --minExpectedThroughput=6 --maxExpectedThroughput=1033",
         "True",
         "True",
@@ -145,6 +155,11 @@
         "True",
     ),
     (
+        "wifi-eht-network --simulationTime=0.1s --frequency=5 --useRts=0 --use80Plus80=1 --minExpectedThroughput=6 --maxExpectedThroughput=760",
+        "True",
+        "True",
+    ),
+    (
         "wifi-eht-network --simulationTime=0.1s --frequency=5 --useRts=0 --mpduBufferSize=1024 --frequency2=6 --minExpectedThroughput=7 --maxExpectedThroughput=1444",
         "True",
         "True",
@@ -165,7 +180,7 @@
         "True",
     ),
     (
-        "wifi-eht-network --simulationTime=0.23s --udp=0 --downlink=1 --useRts=0 --nStations=4 --dlAckType=ACK-SU-FORMAT --enableUlOfdma=1 --enableBsrp=0 --mcs=5 --frequency2=6  --minExpectedThroughput=35 --maxExpectedThroughput=404",
+        "wifi-eht-network --simulationTime=0.23s --udp=0 --downlink=1 --useRts=0 --nStations=4 --dlAckType=ACK-SU-FORMAT --enableUlOfdma=1 --enableBsrp=0 --mcs=6 --frequency2=6  --minExpectedThroughput=60 --maxExpectedThroughput=430",
         "True",
         "True",
     ),
@@ -180,7 +195,7 @@
         "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=7 --muSchedAccessReqInterval=45ms --frequency2=6 --minExpectedThroughput=70 --maxExpectedThroughput=550",
+        "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 -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/mixed-wired-wireless.cc ns-3.43/examples/wireless/mixed-wired-wireless.cc
--- ns-3.42/examples/wireless/mixed-wired-wireless.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/mixed-wired-wireless.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/mixed-wired-wireless.py ns-3.43/examples/wireless/mixed-wired-wireless.py
--- ns-3.42/examples/wireless/mixed-wired-wireless.py	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/mixed-wired-wireless.py	2024-10-09 16:41:09.840655800 -0700
@@ -1,17 +1,5 @@
 # /*
-#  * This program is free software; you can redistribute it and/or modify
-#  * it under the terms of the GNU General Public License version 2 as
-#  * published by the Free Software Foundation;
-#  *
-#  * This program is distributed in the hope that it will be useful,
-#  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  * GNU General Public License for more details.
-#  *
-#  * You should have received a copy of the GNU General Public License
-#  * along with this program; if not, write to the Free Software
-#  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-#  *
+#  * SPDX-License-Identifier: GPL-2.0-only
 #  */
 
 #
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-80211e-txop.cc ns-3.43/examples/wireless/wifi-80211e-txop.cc
--- ns-3.42/examples/wireless/wifi-80211e-txop.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-80211e-txop.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -96,7 +85,7 @@
 {
     uint32_t payloadSize{1472}; // bytes
     Time simulationTime{"10s"};
-    double distance{5}; // meters
+    meter_u distance{5};
     bool enablePcap{false};
     bool verifyResults{false}; // used for regression
     Time txopLimit{"4096us"};
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-80211n-mimo.cc ns-3.43/examples/wireless/wifi-80211n-mimo.cc
--- ns-3.42/examples/wireless/wifi-80211n-mimo.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-80211n-mimo.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -216,7 +205,7 @@
             /* Setting applications */
             const auto maxLoad = HtPhy::GetDataRate(i,
                                                     channelBonding ? 40 : 20,
-                                                    shortGuardInterval ? 400 : 800,
+                                                    NanoSeconds(shortGuardInterval ? 400 : 800),
                                                     nStreams);
             ApplicationContainer serverApp;
             if (udp)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-adhoc.cc ns-3.43/examples/wireless/wifi-adhoc.cc
--- ns-3.42/examples/wireless/wifi-adhoc.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-adhoc.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-aggregation.cc ns-3.43/examples/wireless/wifi-aggregation.cc
--- ns-3.42/examples/wireless/wifi-aggregation.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-aggregation.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -84,7 +73,7 @@
 {
     uint32_t payloadSize{1472}; // bytes
     Time simulationTime{"10s"};
-    double distance{5}; // meters
+    meter_u distance{5};
     bool enableRts{false};
     bool enablePcap{false};
     bool verifyResults{false}; // used for regression
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-ap.cc ns-3.43/examples/wireless/wifi-ap.cc
--- ns-3.42/examples/wireless/wifi-ap.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-ap.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-ap.py ns-3.43/examples/wireless/wifi-ap.py
--- ns-3.42/examples/wireless/wifi-ap.py	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-ap.py	2024-10-09 16:41:09.840655800 -0700
@@ -3,18 +3,7 @@
 #  * Copyright (c) 2005,2006,2007 INRIA
 #  * Copyright (c) 2009 INESC Porto
 #  *
-#  * This program is free software; you can redistribute it and/or modify
-#  * it under the terms of the GNU General Public License version 2 as
-#  * published by the Free Software Foundation;
-#  *
-#  * This program is distributed in the hope that it will be useful,
-#  * but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  * GNU General Public License for more details.
-#  *
-#  * You should have received a copy of the GNU General Public License
-#  * along with this program; if not, write to the Free Software
-#  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#  * SPDX-License-Identifier: GPL-2.0-only
 #  *
 #  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
 #  *          Gustavo Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-backward-compatibility.cc ns-3.43/examples/wireless/wifi-backward-compatibility.cc
--- ns-3.42/examples/wireless/wifi-backward-compatibility.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-backward-compatibility.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,22 +1,12 @@
 /*
  * Copyright (c) 2017
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Deronne <sebastien.deronne@gmail.com>
  */
 
+#include "ns3/attribute-container.h"
 #include "ns3/boolean.h"
 #include "ns3/command-line.h"
 #include "ns3/config.h"
@@ -150,7 +140,10 @@
     WifiMacHelper mac;
     WifiHelper wifi;
     Ssid ssid = Ssid("ns3");
-    TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue> channelValue;
+    AttributeContainerValue<
+        TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>,
+        ';'>
+        channelValue;
 
     const auto& [staStandard, staBand] = ConvertStringToStandardAndBand(staVersion);
     wifi.SetStandard(staStandard);
@@ -160,7 +153,7 @@
 
     // Workaround needed as long as we do not fully support channel bonding
     uint16_t width = (staVersion == "80211ac" ? 20 : 0);
-    channelValue.Set(WifiPhy::ChannelTuple{0, width, staBand, 0});
+    channelValue.Set(WifiPhy::ChannelSegments{{0, width, staBand, 0}});
     phy.Set("ChannelSettings", channelValue);
 
     NetDeviceContainer staDevice;
@@ -174,7 +167,7 @@
 
     // Workaround needed as long as we do not fully support channel bonding
     width = (apVersion == "80211ac" ? 20 : 0);
-    channelValue.Set(WifiPhy::ChannelTuple{0, width, apBand, 0});
+    channelValue.Set(WifiPhy::ChannelSegments{{0, width, apBand, 0}});
     phy.Set("ChannelSettings", channelValue);
 
     NetDeviceContainer apDevice;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-blockack.cc ns-3.43/examples/wireless/wifi-blockack.cc
--- ns-3.42/examples/wireless/wifi-blockack.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-blockack.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-clear-channel-cmu.cc ns-3.43/examples/wireless/wifi-clear-channel-cmu.cc
--- ns-3.42/examples/wireless/wifi-clear-channel-cmu.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-clear-channel-cmu.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Guangyu Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-dsss-validation.cc ns-3.43/examples/wireless/wifi-dsss-validation.cc
--- ns-3.42/examples/wireless/wifi-dsss-validation.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-dsss-validation.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-eht-network.cc ns-3.43/examples/wireless/wifi-eht-network.cc
--- ns-3.42/examples/wireless/wifi-eht-network.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-eht-network.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -145,6 +134,7 @@
     bool udp{true};
     bool downlink{true};
     bool useRts{false};
+    bool use80Plus80{false};
     uint16_t mpduBufferSize{512};
     std::string emlsrLinks;
     uint16_t paddingDelayUsec{32};
@@ -154,7 +144,7 @@
     uint16_t auxPhyChWidth{20};
     bool auxPhyTxCapable{true};
     Time simulationTime{"10s"};
-    double distance{1.0}; // meters
+    meter_u distance{1.0};
     double frequency{5};  // whether the first link operates in the 2.4, 5 or 6 GHz
     double frequency2{0}; // whether the second link operates in the 2.4, 5 or 6 GHz (0 means no
                           // second link exists)
@@ -218,6 +208,7 @@
                  "Generate downlink flows if set to 1, uplink flows otherwise",
                  downlink);
     cmd.AddValue("useRts", "Enable/disable RTS/CTS", useRts);
+    cmd.AddValue("use80Plus80", "Enable/disable use of 80+80 MHz", use80Plus80);
     cmd.AddValue("mpduBufferSize",
                  "Size (in number of MPDUs) of the BlockAck buffer",
                  mpduBufferSize);
@@ -298,6 +289,9 @@
         int minGi = enableUlOfdma ? 1600 : 800;
         for (int channelWidth = 20; channelWidth <= maxChannelWidth;) // MHz
         {
+            const auto is80Plus80 = (use80Plus80 && (channelWidth == 160));
+            const std::string widthStr = is80Plus80 ? "80+80" : std::to_string(channelWidth);
+            const auto segmentWidthStr = is80Plus80 ? "80" : widthStr;
             for (int gi = 3200; gi >= minGi;) // Nanoseconds
             {
                 if (!udp)
@@ -335,7 +329,7 @@
                     {
                         break;
                     }
-                    channelStr[nLinks] = "{0, " + std::to_string(channelWidth) + ", ";
+                    channelStr[nLinks] = "{0, " + segmentWidthStr + ", ";
                     if (freq == 6)
                     {
                         channelStr[nLinks] += "BAND_6GHZ, 0}";
@@ -379,6 +373,12 @@
                     {
                         NS_FATAL_ERROR("Wrong frequency value!");
                     }
+
+                    if (is80Plus80)
+                    {
+                        channelStr[nLinks] += std::string(";") + channelStr[nLinks];
+                    }
+
                     nLinks++;
                 }
 
@@ -389,12 +389,6 @@
 
                 Ssid ssid = Ssid("ns3-80211be");
 
-                /*
-                 * SingleModelSpectrumChannel cannot be used with 802.11be because two
-                 * spectrum models are required: one with 78.125 kHz bands for HE PPDUs
-                 * and one with 312.5 kHz bands for, e.g., non-HT PPDUs (for more details,
-                 * see issue #408 (CLOSED))
-                 */
                 SpectrumWifiPhyHelper phy(nLinks);
                 phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
                 phy.Set("ChannelSwitchDelay", TimeValue(MicroSeconds(channelSwitchDelayUsec)));
@@ -442,8 +436,8 @@
                 apDevice = wifi.Install(phy, mac, wifiApNode);
 
                 int64_t streamNumber = 100;
-                streamNumber += wifi.AssignStreams(apDevice, streamNumber);
-                streamNumber += wifi.AssignStreams(staDevices, streamNumber);
+                streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
+                streamNumber += WifiHelper::AssignStreams(staDevices, streamNumber);
 
                 // Set guard interval and MPDU buffer size
                 Config::Set(
@@ -493,7 +487,7 @@
                 }
 
                 const auto maxLoad =
-                    nLinks * EhtPhy::GetDataRate(mcs, channelWidth, gi, 1) / nStations;
+                    nLinks * EhtPhy::GetDataRate(mcs, channelWidth, NanoSeconds(gi), 1) / nStations;
                 if (udp)
                 {
                     // UDP flow
@@ -580,8 +574,9 @@
 
                 Simulator::Destroy();
 
-                std::cout << mcs << "\t\t\t" << channelWidth << " MHz\t\t\t" << gi << " ns\t\t\t"
-                          << throughput << " Mbit/s" << std::endl;
+                std::cout << +mcs << "\t\t\t" << widthStr << " MHz\t\t"
+                          << (widthStr.size() > 3 ? "" : "\t") << gi << " ns\t\t\t" << throughput
+                          << " Mbit/s" << std::endl;
 
                 // test first element
                 if (mcs == minMcs && channelWidth == 20 && gi == 3200)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-error-models-comparison.cc ns-3.43/examples/wireless/wifi-error-models-comparison.cc
--- ns-3.42/examples/wireless/wifi-error-models-comparison.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-error-models-comparison.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
  *          Rohan Patidar <rpatidar@uw.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-he-network.cc ns-3.43/examples/wireless/wifi-he-network.cc
--- ns-3.42/examples/wireless/wifi-he-network.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-he-network.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 SEBASTIEN DERONNE
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -72,10 +61,11 @@
     bool udp{true};
     bool downlink{true};
     bool useRts{false};
+    bool use80Plus80{false};
     bool useExtendedBlockAck{false};
     Time simulationTime{"10s"};
-    double distance{1.0}; // meters
-    double frequency{5};  // whether 2.4, 5 or 6 GHz
+    meter_u distance{1.0};
+    double frequency{5}; // whether 2.4, 5 or 6 GHz
     std::size_t nStations{1};
     std::string dlAckSeqType{"NO-OFDMA"};
     bool enableUlOfdma{false};
@@ -101,6 +91,7 @@
                  "Generate downlink flows if set to 1, uplink flows otherwise",
                  downlink);
     cmd.AddValue("useRts", "Enable/disable RTS/CTS", useRts);
+    cmd.AddValue("use80Plus80", "Enable/disable use of 80+80 MHz", use80Plus80);
     cmd.AddValue("useExtendedBlockAck", "Enable/disable use of extended BACK", useExtendedBlockAck);
     cmd.AddValue("nStations", "Number of non-AP HE stations", nStations);
     cmd.AddValue("dlAckType",
@@ -119,7 +110,8 @@
     cmd.AddValue("mcs", "if set, limit testing to a specific MCS (0-11)", mcs);
     cmd.AddValue("payloadSize", "The application payload size in bytes", payloadSize);
     cmd.AddValue("phyModel",
-                 "PHY model to use when OFDMA is disabled (Yans or Spectrum). If OFDMA is enabled "
+                 "PHY model to use when OFDMA is disabled (Yans or Spectrum). If 80+80 MHz or "
+                 "OFDMA is enabled "
                  "then Spectrum is automatically selected",
                  phyModel);
     cmd.AddValue("minExpectedThroughput",
@@ -161,9 +153,9 @@
     {
         NS_ABORT_MSG("Invalid PHY model (must be Yans or Spectrum)");
     }
-    if (dlAckSeqType != "NO-OFDMA")
+    if (use80Plus80 || (dlAckSeqType != "NO-OFDMA"))
     {
-        // SpectrumWifiPhy is required for OFDMA
+        // SpectrumWifiPhy is required for 80+80 MHz and OFDMA
         phyModel = "Spectrum";
     }
 
@@ -191,6 +183,9 @@
         int minGi = enableUlOfdma ? 1600 : 800;
         for (int channelWidth = 20; channelWidth <= maxChannelWidth;) // MHz
         {
+            const auto is80Plus80 = (use80Plus80 && (channelWidth == 160));
+            const std::string widthStr = is80Plus80 ? "80+80" : std::to_string(channelWidth);
+            const auto segmentWidthStr = is80Plus80 ? "80" : widthStr;
             for (int gi = 3200; gi >= minGi;) // Nanoseconds
             {
                 if (!udp)
@@ -207,7 +202,7 @@
                 NetDeviceContainer staDevices;
                 WifiMacHelper mac;
                 WifiHelper wifi;
-                std::string channelStr("{0, " + std::to_string(channelWidth) + ", ");
+                std::string channelStr("{0, " + segmentWidthStr + ", ");
                 StringValue ctrlRate;
                 auto nonHtRefRateMbps = HePhy::GetNonHtReferenceRate(mcs) / 1e6;
 
@@ -216,7 +211,6 @@
 
                 if (frequency == 6)
                 {
-                    wifi.SetStandard(WIFI_STANDARD_80211ax);
                     ctrlRate = StringValue(ossDataMode.str());
                     channelStr += "BAND_6GHZ, 0}";
                     Config::SetDefault("ns3::LogDistancePropagationLossModel::ReferenceLoss",
@@ -224,7 +218,6 @@
                 }
                 else if (frequency == 5)
                 {
-                    wifi.SetStandard(WIFI_STANDARD_80211ax);
                     std::ostringstream ossControlMode;
                     ossControlMode << "OfdmRate" << nonHtRefRateMbps << "Mbps";
                     ctrlRate = StringValue(ossControlMode.str());
@@ -232,7 +225,6 @@
                 }
                 else if (frequency == 2.4)
                 {
-                    wifi.SetStandard(WIFI_STANDARD_80211ax);
                     std::ostringstream ossControlMode;
                     ossControlMode << "ErpOfdmRate" << nonHtRefRateMbps << "Mbps";
                     ctrlRate = StringValue(ossControlMode.str());
@@ -245,6 +237,12 @@
                     NS_FATAL_ERROR("Wrong frequency value!");
                 }
 
+                if (is80Plus80)
+                {
+                    channelStr += std::string(";") + channelStr;
+                }
+
+                wifi.SetStandard(WIFI_STANDARD_80211ax);
                 wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
                                              "DataMode",
                                              StringValue(ossDataMode.str()),
@@ -257,17 +255,9 @@
 
                 if (phyModel == "Spectrum")
                 {
-                    /*
-                     * SingleModelSpectrumChannel cannot be used with 802.11ax because two
-                     * spectrum models are required: one with 78.125 kHz bands for HE PPDUs
-                     * and one with 312.5 kHz bands for, e.g., non-HT PPDUs (for more details,
-                     * see issue #408 (CLOSED))
-                     */
-                    Ptr<MultiModelSpectrumChannel> spectrumChannel =
-                        CreateObject<MultiModelSpectrumChannel>();
+                    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
 
-                    Ptr<LogDistancePropagationLossModel> lossModel =
-                        CreateObject<LogDistancePropagationLossModel>();
+                    auto lossModel = CreateObject<LogDistancePropagationLossModel>();
                     spectrumChannel->AddPropagationLossModel(lossModel);
 
                     SpectrumWifiPhyHelper phy;
@@ -301,7 +291,7 @@
                 }
                 else
                 {
-                    YansWifiChannelHelper channel = YansWifiChannelHelper::Default();
+                    auto channel = YansWifiChannelHelper::Default();
                     YansWifiPhyHelper phy;
                     phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
                     phy.SetChannel(channel.Create());
@@ -323,8 +313,8 @@
                 }
 
                 int64_t streamNumber = 150;
-                streamNumber += wifi.AssignStreams(apDevice, streamNumber);
-                streamNumber += wifi.AssignStreams(staDevices, streamNumber);
+                streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
+                streamNumber += WifiHelper::AssignStreams(staDevices, streamNumber);
 
                 // mobility.
                 MobilityHelper mobility;
@@ -366,7 +356,8 @@
                     clientNodes.Add(downlink ? wifiApNode.Get(0) : wifiStaNodes.Get(i));
                 }
 
-                const auto maxLoad = HePhy::GetDataRate(mcs, channelWidth, gi, 1) / nStations;
+                const auto maxLoad =
+                    HePhy::GetDataRate(mcs, channelWidth, NanoSeconds(gi), 1) / nStations;
                 if (udp)
                 {
                     // UDP flow
@@ -454,8 +445,9 @@
 
                 Simulator::Destroy();
 
-                std::cout << mcs << "\t\t\t" << channelWidth << " MHz\t\t\t" << gi << " ns\t\t\t"
-                          << throughput << " Mbit/s" << std::endl;
+                std::cout << +mcs << "\t\t\t" << widthStr << " MHz\t\t"
+                          << (widthStr.size() > 3 ? "" : "\t") << gi << " ns\t\t\t" << throughput
+                          << " Mbit/s" << std::endl;
 
                 // test first element
                 if (mcs == minMcs && channelWidth == 20 && gi == 3200)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-hidden-terminal.cc ns-3.43/examples/wireless/wifi-hidden-terminal.cc
--- ns-3.42/examples/wireless/wifi-hidden-terminal.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-hidden-terminal.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pavel Boyko <boyko@iitp.ru>
  *
@@ -125,7 +114,8 @@
     cbrApps.Add(onOffHelper.Install(nodes.Get(0)));
 
     // flow 2:  node 2 -> node 1
-    /** \internal
+    /**
+     * \internal
      * The slightly different start times and data rates are a workaround
      * for \bugid{388} and \bugid{912}
      */
@@ -133,7 +123,8 @@
     onOffHelper.SetAttribute("StartTime", TimeValue(Seconds(1.001)));
     cbrApps.Add(onOffHelper.Install(nodes.Get(2)));
 
-    /** \internal
+    /**
+     * \internal
      * We also use separate UDP applications that will send a single
      * packet before the CBR flows start.
      * This is a workaround for the lack of perfect ARP, see \bugid{187}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-ht-network.cc ns-3.43/examples/wireless/wifi-ht-network.cc
--- ns-3.42/examples/wireless/wifi-ht-network.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-ht-network.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,23 +1,13 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mirko Banchi <mk.banchi@gmail.com>
  *          Sebastien Deronne <sebastien.deronne@gmail.com>
  */
 
+#include "ns3/attribute-container.h"
 #include "ns3/boolean.h"
 #include "ns3/command-line.h"
 #include "ns3/config.h"
@@ -67,9 +57,9 @@
     bool udp{true};
     bool useRts{false};
     Time simulationTime{"10s"};
-    double distance{1.0}; // meters
-    double frequency{5};  // whether 2.4 or 5 GHz
-    int mcs{-1};          // -1 indicates an unset value
+    meter_u distance{1.0};
+    double frequency{5}; // whether 2.4 or 5 GHz
+    int mcs{-1};         // -1 indicates an unset value
     double minExpectedThroughput{0.0};
     double maxExpectedThroughput{0.0};
 
@@ -176,10 +166,12 @@
                 wifi.ConfigHtOptions("ShortGuardIntervalSupported", BooleanValue(sgi));
 
                 Ssid ssid = Ssid("ns3-80211n");
-                TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>
+                AttributeContainerValue<
+                    TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>,
+                    ';'>
                     channelValue;
                 WifiPhyBand band = (frequency == 5.0 ? WIFI_PHY_BAND_5GHZ : WIFI_PHY_BAND_2_4GHZ);
-                channelValue.Set(WifiPhy::ChannelTuple{0, channelWidth, band, 0});
+                channelValue.Set(WifiPhy::ChannelSegments{{0, channelWidth, band, 0}});
 
                 mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
                 phy.Set("ChannelSettings", channelValue);
@@ -197,8 +189,8 @@
                 apDevice = wifi.Install(phy, mac, wifiApNode);
 
                 int64_t streamNumber = 150;
-                streamNumber += wifi.AssignStreams(apDevice, streamNumber);
-                streamNumber += wifi.AssignStreams(staDevice, streamNumber);
+                streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
+                streamNumber += WifiHelper::AssignStreams(staDevice, streamNumber);
 
                 // mobility.
                 MobilityHelper mobility;
@@ -229,7 +221,8 @@
                 apNodeInterface = address.Assign(apDevice);
 
                 /* Setting applications */
-                const auto maxLoad = HtPhy::GetDataRate(mcs, channelWidth, sgi ? 400 : 800, 1);
+                const auto maxLoad =
+                    HtPhy::GetDataRate(mcs, channelWidth, NanoSeconds(sgi ? 400 : 800), 1);
                 ApplicationContainer serverApp;
                 if (udp)
                 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-mixed-network.cc ns-3.43/examples/wireless/wifi-mixed-network.cc
--- ns-3.42/examples/wireless/wifi-mixed-network.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-mixed-network.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-multirate.cc ns-3.43/examples/wireless/wifi-multirate.cc
--- ns-3.42/examples/wireless/wifi-multirate.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-multirate.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Duy Nguyen <duy@soe.ucsc.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-multi-tos.cc ns-3.43/examples/wireless/wifi-multi-tos.cc
--- ns-3.42/examples/wireless/wifi-multi-tos.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-multi-tos.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -49,7 +38,7 @@
 {
     uint32_t nWifi{4};
     Time simulationTime{"10s"};
-    double distance{1.0}; // meters
+    meter_u distance{1.0};
     uint16_t mcs{7};
     uint8_t channelWidth{20}; // MHz
     bool useShortGuardInterval{false};
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-ofdm-eht-validation.cc ns-3.43/examples/wireless/wifi-ofdm-eht-validation.cc
--- ns-3.42/examples/wireless/wifi-ofdm-eht-validation.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-ofdm-eht-validation.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-ofdm-he-validation.cc ns-3.43/examples/wireless/wifi-ofdm-he-validation.cc
--- ns-3.42/examples/wireless/wifi-ofdm-he-validation.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-ofdm-he-validation.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-ofdm-ht-validation.cc ns-3.43/examples/wireless/wifi-ofdm-ht-validation.cc
--- ns-3.42/examples/wireless/wifi-ofdm-ht-validation.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-ofdm-ht-validation.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-ofdm-validation.cc ns-3.43/examples/wireless/wifi-ofdm-validation.cc
--- ns-3.42/examples/wireless/wifi-ofdm-validation.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-ofdm-validation.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-ofdm-vht-validation.cc ns-3.43/examples/wireless/wifi-ofdm-vht-validation.cc
--- ns-3.42/examples/wireless/wifi-ofdm-vht-validation.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-ofdm-vht-validation.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-power-adaptation-distance.cc ns-3.43/examples/wireless/wifi-power-adaptation-distance.cc
--- ns-3.42/examples/wireless/wifi-power-adaptation-distance.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-power-adaptation-distance.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matias Richart <mrichart@fing.edu.uy>
  */
@@ -210,7 +199,7 @@
      */
     Time GetCalcTxTime(DataRate rate);
 
-    std::map<Mac48Address, double> m_currentPower;  //!< Current Tx power for each sender.
+    std::map<Mac48Address, dBm_u> m_currentPower;   //!< Current Tx power for each sender.
     std::map<Mac48Address, DataRate> m_currentRate; //!< Current Tx rate for each sender.
     uint32_t m_bytesTotal;                          //!< Number of received bytes on a given state.
     double m_totalEnergy;                           //!< Energy used on a given state.
@@ -227,7 +216,7 @@
     Ptr<WifiPhy> phy = wifiDevice->GetPhy();
     SetupPhy(phy);
     DataRate dataRate = DataRate(phy->GetDefaultMode().GetDataRate(phy->GetChannelWidth()));
-    double power = phy->GetTxPowerEnd();
+    const auto power = phy->GetTxPowerEnd();
     for (uint32_t j = 0; j < stas.GetN(); j++)
     {
         Ptr<NetDevice> staDevice = stas.Get(j);
@@ -392,8 +381,8 @@
 int
 main(int argc, char* argv[])
 {
-    double maxPower{17};
-    double minPower{0};
+    dBm_u maxPower{17};
+    dBm_u minPower{0};
     uint32_t powerLevels{18};
 
     uint32_t rtsThreshold{2346};
@@ -404,7 +393,7 @@
     int sta1_x{5};
     int sta1_y{0};
     uint32_t steps{200};
-    uint32_t stepsSize{1};
+    meter_u stepsSize{1};
     Time stepsTime{"1s"};
 
     CommandLine cmd(__FILE__);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-power-adaptation-interference.cc ns-3.43/examples/wireless/wifi-power-adaptation-interference.cc
--- ns-3.42/examples/wireless/wifi-power-adaptation-interference.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-power-adaptation-interference.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matias Richart <mrichart@fing.edu.uy>
  */
@@ -208,7 +197,7 @@
      */
     Time GetCalcTxTime(DataRate rate);
 
-    std::map<Mac48Address, double> m_currentPower;  //!< Current Tx power for each sender.
+    std::map<Mac48Address, dBm_u> m_currentPower;   //!< Current Tx power for each sender.
     std::map<Mac48Address, DataRate> m_currentRate; //!< Current Tx rate for each sender.
     uint32_t m_bytesTotal;                          //!< Number of received bytes.
     double m_totalEnergy;                           //!< Energy used.
@@ -237,7 +226,7 @@
     Ptr<WifiPhy> phy = wifiDevice->GetPhy();
     SetupPhy(phy);
     DataRate dataRate = DataRate(phy->GetDefaultMode().GetDataRate(phy->GetChannelWidth()));
-    double power = phy->GetTxPowerEnd();
+    const auto power = phy->GetTxPowerEnd();
     for (uint32_t j = 0; j < stas.GetN(); j++)
     {
         Ptr<NetDevice> staDevice = stas.Get(j);
@@ -456,8 +445,8 @@
 {
     // LogComponentEnable("ConstantRateWifiManager", LOG_LEVEL_FUNCTION);
 
-    double maxPower{17};
-    double minPower{0};
+    dBm_u maxPower{17};
+    dBm_u minPower{0};
     uint32_t powerLevels{18};
 
     uint32_t rtsThreshold{2346};
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-rate-adaptation-distance.cc ns-3.43/examples/wireless/wifi-rate-adaptation-distance.cc
--- ns-3.42/examples/wireless/wifi-rate-adaptation-distance.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-rate-adaptation-distance.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matías Richart <mrichart@fing.edu.uy>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-simple-adhoc.cc ns-3.43/examples/wireless/wifi-simple-adhoc.cc
--- ns-3.42/examples/wireless/wifi-simple-adhoc.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-simple-adhoc.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -110,7 +99,7 @@
 main(int argc, char* argv[])
 {
     std::string phyMode("DsssRate1Mbps");
-    double rss{-80};           // -dBm
+    dBm_u rss{-80};
     uint32_t packetSize{1000}; // bytes
     uint32_t numPackets{1};
     Time interPacketInterval{"1s"};
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-simple-adhoc-grid.cc ns-3.43/examples/wireless/wifi-simple-adhoc-grid.cc
--- ns-3.42/examples/wireless/wifi-simple-adhoc-grid.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-simple-adhoc-grid.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -150,7 +139,7 @@
 main(int argc, char* argv[])
 {
     std::string phyMode{"DsssRate1Mbps"};
-    double distance{100};      // m
+    meter_u distance{100};
     uint32_t packetSize{1000}; // bytes
     uint32_t numPackets{1};
     uint32_t numNodes{25}; // by default, 5x5
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-simple-ht-hidden-stations.cc ns-3.43/examples/wireless/wifi-simple-ht-hidden-stations.cc
--- ns-3.42/examples/wireless/wifi-simple-ht-hidden-stations.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-simple-ht-hidden-stations.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -139,8 +128,8 @@
                 UintegerValue(maxAmpduSize));
 
     int64_t streamNumber = 20;
-    streamNumber += wifi.AssignStreams(apDevice, streamNumber);
-    streamNumber += wifi.AssignStreams(staDevices, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(staDevices, streamNumber);
 
     // Setting mobility model
     MobilityHelper mobility;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-simple-infra.cc ns-3.43/examples/wireless/wifi-simple-infra.cc
--- ns-3.42/examples/wireless/wifi-simple-infra.cc	2024-05-29 15:29:46.912073100 -0700
+++ ns-3.43/examples/wireless/wifi-simple-infra.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -143,7 +132,7 @@
 main(int argc, char* argv[])
 {
     std::string phyMode{"DsssRate1Mbps"};
-    double rss{-80};           // -dBm
+    dBm_u rss{-80};
     uint32_t packetSize{1000}; // bytes
     uint32_t numPackets{1};
     Time interval{"1s"};
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-simple-interference.cc ns-3.43/examples/wireless/wifi-simple-interference.cc
--- ns-3.42/examples/wireless/wifi-simple-interference.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-simple-interference.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -50,14 +39,14 @@
 // The configurable parameters are:
 //   - Prss (primary rss) (-80 dBm default)
 //   - Irss (interfering rss) (-95 dBm default)
-//   - delta (microseconds, (t1-t0), may be negative, default 0)
+//   - delta (t1-t0, may be negative, default 0ns)
 //   - PpacketSize (primary packet size) (bytes, default 1000)
 //   - IpacketSize (interferer packet size) (bytes, default 1000)
 //
 // For instance, for this configuration, the interfering frame arrives
 // at -90 dBm with a time offset of 3.2 microseconds:
 //
-// ./ns3 run "wifi-simple-interference --Irss=-90 --delta=3.2"
+// ./ns3 run "wifi-simple-interference --Irss=-90 --delta=3.2ns"
 //
 // Note that all ns-3 attributes (not just the ones exposed in the below
 // script) can be changed at command line; see the documentation.
@@ -77,7 +66,7 @@
 //
 // Next, try this command and look at the tcpdump-- you should see two packets
 // that are no longer interfering:
-// ./ns3 run "wifi-simple-interference --delta=30000"
+// ./ns3 run "wifi-simple-interference --delta=30000ns"
 
 #include "ns3/command-line.h"
 #include "ns3/config.h"
@@ -161,9 +150,9 @@
 main(int argc, char* argv[])
 {
     std::string phyMode{"DsssRate1Mbps"};
-    double Prss{-80};           // -dBm
-    double Irss{-95};           // -dBm
-    double delta{0};            // microseconds
+    dBm_u Prss{-80};
+    dBm_u Irss{-95};
+    Time delta{"0ns"};
     uint32_t PpacketSize{1000}; // bytes
     uint32_t IpacketSize{1000}; // bytes
     bool verbose{false};
@@ -172,7 +161,7 @@
     uint32_t numPackets{1};
     Time interPacketInterval{"1s"};
     Time startTime{"10s"};
-    double distanceToRx{100.0}; // meters
+    meter_u distanceToRx{100.0};
 
     double offset{91}; // This is a magic number used to set the
                        // transmit power, based on other configuration
@@ -180,7 +169,7 @@
     cmd.AddValue("phyMode", "Wifi Phy mode", phyMode);
     cmd.AddValue("Prss", "Intended primary received signal strength (dBm)", Prss);
     cmd.AddValue("Irss", "Intended interfering received signal strength (dBm)", Irss);
-    cmd.AddValue("delta", "time offset (microseconds) for interfering signal", delta);
+    cmd.AddValue("delta", "time offset for interfering signal", delta);
     cmd.AddValue("PpacketSize", "size of application packet sent", PpacketSize);
     cmd.AddValue("IpacketSize", "size of interfering packet sent", IpacketSize);
     cmd.AddValue("verbose", "turn on all WifiNetDevice log components", verbose);
@@ -264,7 +253,7 @@
 
     // Output what we are doing
     NS_LOG_UNCOND("Primary packet RSS=" << Prss << " dBm and interferer RSS=" << Irss
-                                        << " dBm at time offset=" << delta << " ms");
+                                        << " dBm at time offset=" << delta.As(Time::US));
 
     Simulator::ScheduleWithContext(source->GetNode()->GetId(),
                                    startTime,
@@ -275,7 +264,7 @@
                                    interPacketInterval);
 
     Simulator::ScheduleWithContext(interferer->GetNode()->GetId(),
-                                   startTime + Seconds(delta / 1000000.0),
+                                   startTime + delta,
                                    &GenerateTraffic,
                                    interferer,
                                    IpacketSize,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-sleep.cc ns-3.43/examples/wireless/wifi-sleep.cc
--- ns-3.42/examples/wireless/wifi-sleep.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-sleep.cc	2024-10-09 16:41:09.840655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 The Boeing Company
  *               2014 Universita' degli Studi di Napoli "Federico II"
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -113,14 +102,14 @@
     DataRate dataRate{"1Mb/s"};
     uint32_t packetSize{1000}; // bytes
     Time duration{"10s"};
-    double initialEnergy{7.5}; // joule
-    double voltage{3.0};       // volts
-    double txPowerStart{0.0};  // dbm
-    double txPowerEnd{15.0};   // dbm
+    joule_u initialEnergy{7.5};
+    volt_u voltage{3.0};
+    dBm_u txPowerStart{0.0};
+    dBm_u txPowerEnd{15.0};
     uint32_t nTxPowerLevels{16};
     uint32_t txPowerLevel{0};
-    double idleCurrent{0.273}; // Ampere
-    double txCurrent{0.380};   // Ampere
+    ampere_u idleCurrent{0.273};
+    ampere_u txCurrent{0.380};
     bool verbose{false};
 
     CommandLine cmd(__FILE__);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-spatial-reuse.cc ns-3.43/examples/wireless/wifi-spatial-reuse.cc
--- ns-3.42/examples/wireless/wifi-spatial-reuse.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-spatial-reuse.cc	2024-10-09 16:41:09.840655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -157,24 +146,24 @@
 main(int argc, char* argv[])
 {
     Time duration{"10s"};
-    double d1{30.0};            // meters
-    double d2{30.0};            // meters
-    double d3{150.0};           // meters
-    double powSta1{10.0};       // dBm
-    double powSta2{10.0};       // dBm
-    double powAp1{21.0};        // dBm
-    double powAp2{21.0};        // dBm
-    double ccaEdTrSta1{-62};    // dBm
-    double ccaEdTrSta2{-62};    // dBm
-    double ccaEdTrAp1{-62};     // dBm
-    double ccaEdTrAp2{-62};     // dBm
-    double minimumRssi{-82};    // dBm
+    meter_u d1{30.0};
+    meter_u d2{30.0};
+    meter_u d3{150.0};
+    dBm_u powSta1{10.0};
+    dBm_u powSta2{10.0};
+    dBm_u powAp1{21.0};
+    dBm_u powAp2{21.0};
+    dBm_u ccaEdTrSta1{-62};
+    dBm_u ccaEdTrSta2{-62};
+    dBm_u ccaEdTrAp1{-62};
+    dBm_u ccaEdTrAp2{-62};
+    dBm_u minimumRssi{-82};
     int channelWidth{20};       // MHz
     uint32_t payloadSize{1500}; // bytes
     uint32_t mcs{0};            // MCS value
     Time interval{"1ms"};
     bool enableObssPd{true};
-    double obssPdThreshold{-72.0}; // dBm
+    dBm_u obssPdThreshold{-72.0};
 
     CommandLine cmd(__FILE__);
     cmd.AddValue("duration", "Duration of simulation", duration);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-spectrum-per-example.cc ns-3.43/examples/wireless/wifi-spectrum-per-example.cc
--- ns-3.42/examples/wireless/wifi-spectrum-per-example.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-spectrum-per-example.cc	2024-10-09 16:41:09.844655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 MIRKO BANCHI
  * Copyright (c) 2015 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mirko Banchi <mk.banchi@gmail.com>
  *          Sebastien Deronne <sebastien.deronne@gmail.com>
@@ -129,7 +118,7 @@
 main(int argc, char* argv[])
 {
     bool udp{true};
-    double distance{50};
+    meter_u distance{50};
     Time simulationTime{"10s"};
     uint16_t index{256};
     std::string wifiType{"ns3::SpectrumWifiPhy"};
@@ -181,7 +170,7 @@
         NodeContainer wifiApNode;
         wifiApNode.Create(1);
 
-        YansWifiPhyHelper phy;
+        YansWifiPhyHelper yansPhy;
         SpectrumWifiPhyHelper spectrumPhy;
         if (wifiType == "ns3::YansWifiPhy")
         {
@@ -190,9 +179,9 @@
                                        "Frequency",
                                        DoubleValue(5.180e9));
             channel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
-            phy.SetChannel(channel.Create());
-            phy.Set("TxPowerStart", DoubleValue(1)); // dBm (1.26 mW)
-            phy.Set("TxPowerEnd", DoubleValue(1));
+            yansPhy.SetChannel(channel.Create());
+            yansPhy.Set("TxPowerStart", DoubleValue(1)); // dBm (1.26 mW)
+            yansPhy.Set("TxPowerEnd", DoubleValue(1));
         }
         else if (wifiType == "ns3::SpectrumWifiPhy")
         {
@@ -397,17 +386,19 @@
         if (wifiType == "ns3::YansWifiPhy")
         {
             mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
-            phy.Set("ChannelSettings",
-                    StringValue(std::string("{0, ") + (i <= 15 ? "20" : "40") + ", BAND_5GHZ, 0}"));
-            staDevice = wifi.Install(phy, mac, wifiStaNode);
+            yansPhy.Set(
+                "ChannelSettings",
+                StringValue(std::string("{0, ") + (i <= 15 ? "20" : "40") + ", BAND_5GHZ, 0}"));
+            staDevice = wifi.Install(yansPhy, mac, wifiStaNode);
             mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid));
-            apDevice = wifi.Install(phy, mac, wifiApNode);
+            apDevice = wifi.Install(yansPhy, mac, wifiApNode);
         }
         else if (wifiType == "ns3::SpectrumWifiPhy")
         {
             mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
-            phy.Set("ChannelSettings",
-                    StringValue(std::string("{0, ") + (i <= 15 ? "20" : "40") + ", BAND_5GHZ, 0}"));
+            spectrumPhy.Set(
+                "ChannelSettings",
+                StringValue(std::string("{0, ") + (i <= 15 ? "20" : "40") + ", BAND_5GHZ, 0}"));
             staDevice = wifi.Install(spectrumPhy, mac, wifiStaNode);
             mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid));
             apDevice = wifi.Install(spectrumPhy, mac, wifiApNode);
@@ -491,11 +482,15 @@
 
         if (enablePcap)
         {
+            auto& phy = wifiType == "ns3::YansWifiPhy" ? dynamic_cast<WifiPhyHelper&>(yansPhy)
+                                                       : dynamic_cast<WifiPhyHelper&>(spectrumPhy);
+
             phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
             std::stringstream ss;
             ss << "wifi-spectrum-per-example-" << i;
             phy.EnablePcap(ss.str(), apDevice);
         }
+
         g_signalDbmAvg = 0;
         g_noiseDbmAvg = 0;
         g_samples = 0;
@@ -504,7 +499,7 @@
         Simulator::Run();
 
         auto throughput = 0.0;
-        auto totalPacketsThrough = 0.0;
+        uint64_t totalPacketsThrough = 0;
         if (udp)
         {
             // UDP
@@ -516,7 +511,7 @@
         {
             // TCP
             auto totalBytesRx = DynamicCast<PacketSink>(serverApp.Get(0))->GetTotalRx();
-            totalPacketsThrough = totalBytesRx / tcpPacketSize;
+            totalPacketsThrough = static_cast<uint64_t>(totalBytesRx / tcpPacketSize);
             throughput = totalBytesRx * 8 / simulationTime.GetMicroSeconds(); // Mbit/s
         }
         std::cout << std::setw(5) << i << std::setw(6) << (i % 8) << std::setprecision(2)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-spectrum-per-interference.cc ns-3.43/examples/wireless/wifi-spectrum-per-interference.cc
--- ns-3.42/examples/wireless/wifi-spectrum-per-interference.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-spectrum-per-interference.cc	2024-10-09 16:41:09.844655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 MIRKO BANCHI
  * Copyright (c) 2015 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mirko Banchi <mk.banchi@gmail.com>
  *          Sebastien Deronne <sebastien.deronne@gmail.com>
@@ -180,14 +169,14 @@
 main(int argc, char* argv[])
 {
     bool udp{true};
-    double distance{50};
+    meter_u distance{50};
     Time simulationTime{"10s"};
     uint16_t index{256};
     std::string wifiType{"ns3::SpectrumWifiPhy"};
     std::string errorModelType{"ns3::NistErrorRateModel"};
     bool enablePcap{false};
     const uint32_t tcpPacketSize{1448};
-    double waveformPower{0};
+    Watt_u waveformPower{0};
 
     CommandLine cmd(__FILE__);
     cmd.AddValue("simulationTime", "Simulation time", simulationTime);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-spectrum-saturation-example.cc ns-3.43/examples/wireless/wifi-spectrum-saturation-example.cc
--- ns-3.42/examples/wireless/wifi-spectrum-saturation-example.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-spectrum-saturation-example.cc	2024-10-09 16:41:09.844655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 MIRKO BANCHI
  * Copyright (c) 2015 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mirko Banchi <mk.banchi@gmail.com>
  *          Sebastien Deronne <sebastien.deronne@gmail.com>
@@ -100,7 +89,7 @@
 int
 main(int argc, char* argv[])
 {
-    double distance{1};
+    meter_u distance{1};
     Time simulationTime{"10s"};
     uint16_t index{256};
     uint32_t channelWidth{0};
@@ -141,22 +130,22 @@
         NodeContainer wifiApNode;
         wifiApNode.Create(1);
 
-        YansWifiPhyHelper phy;
+        YansWifiPhyHelper yansPhy;
         SpectrumWifiPhyHelper spectrumPhy;
         if (wifiType == "ns3::YansWifiPhy")
         {
             YansWifiChannelHelper channel;
             channel.AddPropagationLoss("ns3::FriisPropagationLossModel");
             channel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
-            phy.SetChannel(channel.Create());
-            phy.Set("TxPowerStart", DoubleValue(1));
-            phy.Set("TxPowerEnd", DoubleValue(1));
+            yansPhy.SetChannel(channel.Create());
+            yansPhy.Set("TxPowerStart", DoubleValue(1));
+            yansPhy.Set("TxPowerEnd", DoubleValue(1));
 
             if (i > 31 && i <= 63)
             {
-                phy.Set("Antennas", UintegerValue(2));
-                phy.Set("MaxSupportedTxSpatialStreams", UintegerValue(2));
-                phy.Set("MaxSupportedRxSpatialStreams", UintegerValue(2));
+                yansPhy.Set("Antennas", UintegerValue(2));
+                yansPhy.Set("MaxSupportedTxSpatialStreams", UintegerValue(2));
+                yansPhy.Set("MaxSupportedRxSpatialStreams", UintegerValue(2));
             }
         }
         else if (wifiType == "ns3::SpectrumWifiPhy")
@@ -535,20 +524,20 @@
         if (wifiType == "ns3::YansWifiPhy")
         {
             mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
-            phy.Set("ChannelSettings", StringValue(channelStr));
+            yansPhy.Set("ChannelSettings", StringValue(channelStr));
 
-            staDevice = wifi.Install(phy, mac, wifiStaNode);
+            staDevice = wifi.Install(yansPhy, mac, wifiStaNode);
             mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid));
-            phy.Set("ChannelSettings", StringValue(channelStr));
-            apDevice = wifi.Install(phy, mac, wifiApNode);
+            yansPhy.Set("ChannelSettings", StringValue(channelStr));
+            apDevice = wifi.Install(yansPhy, mac, wifiApNode);
         }
         else if (wifiType == "ns3::SpectrumWifiPhy")
         {
             mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
-            phy.Set("ChannelSettings", StringValue(channelStr));
+            spectrumPhy.Set("ChannelSettings", StringValue(channelStr));
             staDevice = wifi.Install(spectrumPhy, mac, wifiStaNode);
             mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid));
-            phy.Set("ChannelSettings", StringValue(channelStr));
+            spectrumPhy.Set("ChannelSettings", StringValue(channelStr));
             apDevice = wifi.Install(spectrumPhy, mac, wifiApNode);
         }
 
@@ -602,6 +591,9 @@
 
         if (enablePcap)
         {
+            auto& phy =
+                (wifiType == "ns3::YansWifiPhy" ? dynamic_cast<WifiPhyHelper&>(yansPhy)
+                                                : dynamic_cast<WifiPhyHelper&>(spectrumPhy));
             phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
             std::stringstream ss;
             ss << "wifi-spectrum-saturation-example-" << i;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-tcp.cc ns-3.43/examples/wireless/wifi-tcp.cc
--- ns-3.42/examples/wireless/wifi-tcp.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-tcp.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015, IMDEA Networks Institute
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hany Assasa <hany.assasa@gmail.com>
 .*
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-timing-attributes.cc ns-3.43/examples/wireless/wifi-timing-attributes.cc
--- ns-3.42/examples/wireless/wifi-timing-attributes.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-timing-attributes.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -39,7 +28,7 @@
 // Example: set slot time to 20 microseconds, while keeping other values as defined in the
 // simulation script:
 //
-//          ./ns3 run "wifi-timing-attributes --slot=20"
+//          ./ns3 run "wifi-timing-attributes --slot=20us"
 //
 // Network topology:
 //
@@ -57,15 +46,15 @@
 int
 main(int argc, char* argv[])
 {
-    uint32_t slot{9};           // slot time in microseconds
-    uint32_t sifs{10};          // SIFS duration in microseconds
-    uint32_t pifs{19};          // PIFS duration in microseconds
+    Time slot{"9us"};           // slot time
+    Time sifs{"10us"};          // SIFS duration
+    Time pifs{"19us"};          // PIFS duration
     Time simulationTime{"10s"}; // Simulation time
 
     CommandLine cmd(__FILE__);
-    cmd.AddValue("slot", "Slot time in microseconds", slot);
-    cmd.AddValue("sifs", "SIFS duration in microseconds", sifs);
-    cmd.AddValue("pifs", "PIFS duration in microseconds", pifs);
+    cmd.AddValue("slot", "Slot time", slot);
+    cmd.AddValue("sifs", "SIFS duration", sifs);
+    cmd.AddValue("pifs", "PIFS duration", pifs);
     cmd.AddValue("simulationTime", "Simulation time", simulationTime);
     cmd.Parse(argc, argv);
 
@@ -107,12 +96,9 @@
     apDevice = wifi.Install(phy, mac, wifiApNode);
 
     // Once install is done, we overwrite the standard timing values
-    Config::Set("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/Slot",
-                TimeValue(MicroSeconds(slot)));
-    Config::Set("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/Sifs",
-                TimeValue(MicroSeconds(sifs)));
-    Config::Set("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/Pifs",
-                TimeValue(MicroSeconds(pifs)));
+    Config::Set("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/Slot", TimeValue(slot));
+    Config::Set("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/Sifs", TimeValue(sifs));
+    Config::Set("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/Pifs", TimeValue(pifs));
 
     // Mobility
     MobilityHelper mobility;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-txop-aggregation.cc ns-3.43/examples/wireless/wifi-txop-aggregation.cc
--- ns-3.42/examples/wireless/wifi-txop-aggregation.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-txop-aggregation.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -111,7 +100,7 @@
     uint32_t payloadSize{1472}; // bytes
     Time simulationTime{"10s"};
     double txopLimit{3520}; // microseconds
-    double distance{5};     // meters
+    meter_u distance{5};
     bool enableRts{false};
     bool enablePcap{false};
     bool verifyResults{false}; // used for regression
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-vht-network.cc ns-3.43/examples/wireless/wifi-vht-network.cc
--- ns-3.42/examples/wireless/wifi-vht-network.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-vht-network.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 SEBASTIEN DERONNE
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -26,9 +15,11 @@
 #include "ns3/ipv4-global-routing-helper.h"
 #include "ns3/log.h"
 #include "ns3/mobility-helper.h"
+#include "ns3/multi-model-spectrum-channel.h"
 #include "ns3/on-off-helper.h"
 #include "ns3/packet-sink-helper.h"
 #include "ns3/packet-sink.h"
+#include "ns3/spectrum-wifi-helper.h"
 #include "ns3/ssid.h"
 #include "ns3/string.h"
 #include "ns3/udp-client-server-helper.h"
@@ -64,9 +55,11 @@
 {
     bool udp{true};
     bool useRts{false};
+    bool use80Plus80{false};
     Time simulationTime{"10s"};
-    double distance{1.0}; // meters
-    int mcs{-1};          // -1 indicates an unset value
+    meter_u distance{1.0};
+    int mcs{-1}; // -1 indicates an unset value
+    std::string phyModel{"Yans"};
     double minExpectedThroughput{0.0};
     double maxExpectedThroughput{0.0};
 
@@ -77,7 +70,12 @@
     cmd.AddValue("simulationTime", "Simulation time", simulationTime);
     cmd.AddValue("udp", "UDP if set to 1, TCP otherwise", udp);
     cmd.AddValue("useRts", "Enable/disable RTS/CTS", useRts);
+    cmd.AddValue("use80Plus80", "Enable/disable use of 80+80 MHz", use80Plus80);
     cmd.AddValue("mcs", "if set, limit testing to a specific MCS (0-9)", mcs);
+    cmd.AddValue("phyModel",
+                 "PHY model to use (Yans or Spectrum). If 80+80 MHz is enabled, then Spectrum is "
+                 "automatically selected",
+                 phyModel);
     cmd.AddValue("minExpectedThroughput",
                  "if set, simulation fails if the lowest throughput is below this value",
                  minExpectedThroughput);
@@ -86,6 +84,16 @@
                  maxExpectedThroughput);
     cmd.Parse(argc, argv);
 
+    if (phyModel != "Yans" && phyModel != "Spectrum")
+    {
+        NS_ABORT_MSG("Invalid PHY model (must be Yans or Spectrum)");
+    }
+    if (use80Plus80)
+    {
+        // SpectrumWifiPhy is required for 80+80 MHz
+        phyModel = "Spectrum";
+    }
+
     if (useRts)
     {
         Config::SetDefault("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue("0"));
@@ -118,6 +126,9 @@
                 channelWidth *= 2;
                 continue;
             }
+            const auto is80Plus80 = (use80Plus80 && (channelWidth == 160));
+            const std::string widthStr = is80Plus80 ? "80+80" : std::to_string(channelWidth);
+            const auto segmentWidthStr = is80Plus80 ? "80" : widthStr;
             for (auto sgi : {false, true})
             {
                 uint32_t payloadSize; // 1500 byte IP packet
@@ -136,16 +147,11 @@
                 NodeContainer wifiApNode;
                 wifiApNode.Create(1);
 
-                YansWifiChannelHelper channel = YansWifiChannelHelper::Default();
-                YansWifiPhyHelper phy;
-                phy.SetChannel(channel.Create());
-
-                phy.Set("ChannelSettings",
-                        StringValue("{0, " + std::to_string(channelWidth) + ", BAND_5GHZ, 0}"));
-
-                WifiHelper wifi;
-                wifi.SetStandard(WIFI_STANDARD_80211ac);
+                NetDeviceContainer apDevice;
+                NetDeviceContainer staDevice;
                 WifiMacHelper mac;
+                WifiHelper wifi;
+                std::string channelStr{"{0, " + segmentWidthStr + ", BAND_5GHZ, 0}"};
 
                 std::ostringstream ossControlMode;
                 auto nonHtRefRateMbps = VhtPhy::GetNonHtReferenceRate(mcs) / 1e6;
@@ -153,6 +159,13 @@
 
                 std::ostringstream ossDataMode;
                 ossDataMode << "VhtMcs" << mcs;
+
+                if (is80Plus80)
+                {
+                    channelStr += std::string(";") + channelStr;
+                }
+
+                wifi.SetStandard(WIFI_STANDARD_80211ac);
                 wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
                                              "DataMode",
                                              StringValue(ossDataMode.str()),
@@ -164,23 +177,53 @@
 
                 Ssid ssid = Ssid("ns3-80211ac");
 
-                mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
-
-                NetDeviceContainer staDevice;
-                staDevice = wifi.Install(phy, mac, wifiStaNode);
-
-                mac.SetType("ns3::ApWifiMac",
-                            "EnableBeaconJitter",
-                            BooleanValue(false),
-                            "Ssid",
-                            SsidValue(ssid));
-
-                NetDeviceContainer apDevice;
-                apDevice = wifi.Install(phy, mac, wifiApNode);
+                if (phyModel == "Spectrum")
+                {
+                    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+                    auto lossModel = CreateObject<LogDistancePropagationLossModel>();
+                    spectrumChannel->AddPropagationLossModel(lossModel);
+
+                    SpectrumWifiPhyHelper phy;
+                    phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+                    phy.SetChannel(spectrumChannel);
+
+                    phy.Set("ChannelSettings",
+                            StringValue("{0, " + std::to_string(channelWidth) + ", BAND_5GHZ, 0}"));
+
+                    mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
+                    staDevice = wifi.Install(phy, mac, wifiStaNode);
+
+                    mac.SetType("ns3::ApWifiMac",
+                                "EnableBeaconJitter",
+                                BooleanValue(false),
+                                "Ssid",
+                                SsidValue(ssid));
+                    apDevice = wifi.Install(phy, mac, wifiApNode);
+                }
+                else
+                {
+                    auto channel = YansWifiChannelHelper::Default();
+                    YansWifiPhyHelper phy;
+                    phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+                    phy.SetChannel(channel.Create());
+
+                    phy.Set("ChannelSettings",
+                            StringValue("{0, " + std::to_string(channelWidth) + ", BAND_5GHZ, 0}"));
+
+                    mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
+                    staDevice = wifi.Install(phy, mac, wifiStaNode);
+
+                    mac.SetType("ns3::ApWifiMac",
+                                "EnableBeaconJitter",
+                                BooleanValue(false),
+                                "Ssid",
+                                SsidValue(ssid));
+                    apDevice = wifi.Install(phy, mac, wifiApNode);
+                }
 
                 int64_t streamNumber = 150;
-                streamNumber += wifi.AssignStreams(apDevice, streamNumber);
-                streamNumber += wifi.AssignStreams(staDevice, streamNumber);
+                streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
+                streamNumber += WifiHelper::AssignStreams(staDevice, streamNumber);
 
                 // mobility.
                 MobilityHelper mobility;
@@ -211,7 +254,8 @@
                 apNodeInterface = address.Assign(apDevice);
 
                 /* Setting applications */
-                const auto maxLoad = VhtPhy::GetDataRate(mcs, channelWidth, sgi ? 400 : 800, 1);
+                const auto maxLoad =
+                    VhtPhy::GetDataRate(mcs, channelWidth, NanoSeconds(sgi ? 400 : 800), 1);
                 ApplicationContainer serverApp;
                 if (udp)
                 {
@@ -283,8 +327,9 @@
 
                 Simulator::Destroy();
 
-                std::cout << mcs << "\t\t\t" << channelWidth << " MHz\t\t\t" << std::boolalpha
-                          << sgi << "\t\t\t" << throughput << " Mbit/s" << std::endl;
+                std::cout << +mcs << "\t\t\t" << widthStr << " MHz\t\t"
+                          << (widthStr.size() > 3 ? "" : "\t") << (sgi ? "400 ns" : "800 ns")
+                          << "\t\t\t" << throughput << " Mbit/s" << std::endl;
 
                 // test first element
                 if (mcs == minMcs && channelWidth == 20 && !sgi)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/examples/wireless/wifi-wired-bridging.cc ns-3.43/examples/wireless/wifi-wired-bridging.cc
--- ns-3.42/examples/wireless/wifi-wired-bridging.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/examples/wireless/wifi-wired-bridging.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Default network topology includes some number of AP nodes specified by
@@ -92,7 +81,7 @@
 
     backboneDevices = csma.Install(backboneNodes);
 
-    double wifiX = 0.0;
+    meter_u wifiX = 0.0;
 
     YansWifiPhyHelper wifiPhy;
     wifiPhy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/LICENSES/BSD-3-Clause.txt ns-3.43/LICENSES/BSD-3-Clause.txt
--- ns-3.42/LICENSES/BSD-3-Clause.txt	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/LICENSES/BSD-3-Clause.txt	2024-10-09 16:41:09.756655500 -0700
@@ -0,0 +1,11 @@
+Copyright (c) <year> <owner>.
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/LICENSES/GPL-2.0-only.txt ns-3.43/LICENSES/GPL-2.0-only.txt
--- ns-3.42/LICENSES/GPL-2.0-only.txt	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/LICENSES/GPL-2.0-only.txt	2024-10-09 16:41:09.756655500 -0700
@@ -0,0 +1,117 @@
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+     a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+     b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+     c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+     a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+     b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+     c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+     one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author
+
+     This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+     This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+     You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+     Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+     Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/LICENSES/GPL-2.0-or-later.txt ns-3.43/LICENSES/GPL-2.0-or-later.txt
--- ns-3.42/LICENSES/GPL-2.0-or-later.txt	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/LICENSES/GPL-2.0-or-later.txt	2024-10-09 16:41:09.756655500 -0700
@@ -0,0 +1,117 @@
+GNU GENERAL PUBLIC LICENSE
+Version 2, June 1991
+
+Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed.
+
+Preamble
+
+The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too.
+
+When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things.
+
+To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it.
+
+For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights.
+
+We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software.
+
+Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations.
+
+Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all.
+
+The precise terms and conditions for copying, distribution and modification follow.
+
+TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does.
+
+1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee.
+
+2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions:
+
+     a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change.
+
+     b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License.
+
+     c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License.
+
+3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following:
+
+     a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+     b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or,
+
+     c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable.
+
+If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code.
+
+4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance.
+
+5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it.
+
+6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License.
+
+7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances.
+
+It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice.
+
+This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License.
+
+8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License.
+
+9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation.
+
+10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally.
+
+NO WARRANTY
+
+11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
+
+END OF TERMS AND CONDITIONS
+
+How to Apply These Terms to Your New Programs
+
+If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms.
+
+To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found.
+
+     one line to give the program's name and an idea of what it does. Copyright (C) yyyy name of author
+
+     This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
+
+     This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+
+     You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this when it starts in an interactive mode:
+
+     Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names:
+
+     Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+signature of Ty Coon, 1 April 1989 Ty Coon, President of Vice
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/ns3 ns-3.43/ns3
--- ns-3.42/ns3	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/ns3	2024-10-09 16:41:09.844655800 -0700
@@ -13,7 +13,9 @@
 ns3_path = os.path.dirname(os.path.realpath(os.path.abspath(__file__)))
 append_to_ns3_path = functools.partial(os.path.join, ns3_path)
 out_dir = os.sep.join([ns3_path, "build"])
-lock_file = os.sep.join([ns3_path, ".lock-ns3_%s_build" % sys.platform])
+platform = sys.platform
+platform = "bsd" if "bsd" in platform else platform
+lock_file = os.sep.join([ns3_path, ".lock-ns3_%s_build" % platform])
 
 max_cpu_threads = max(1, os.cpu_count() - 1)
 print_buffer = ""
@@ -655,7 +657,7 @@
 def clean_cmake_artifacts(dry_run=False):
     remove_dir(out_dir, dry_run, "output")
 
-    cmake_cache_files = glob.glob("%s/**/CMakeCache.txt" % ns3_path, recursive=True)
+    cmake_cache_files = glob.glob("%s/**/CMakeCache.txt" % ns3_path)
     for cmake_cache_file in cmake_cache_files:
         dirname = os.path.dirname(cmake_cache_file)
         remove_dir(dirname, dry_run, "CMake cache")
@@ -705,7 +707,7 @@
 
 def search_cmake_cache(build_profile):
     # Search for the CMake cache
-    cmake_cache_files = glob.glob("%s/**/CMakeCache.txt" % ns3_path, recursive=True)
+    cmake_cache_files = glob.glob("%s/**/CMakeCache.txt" % ns3_path)
     current_cmake_cache_folder = None
     current_cmake_generator = None
 
@@ -1283,7 +1285,9 @@
             "check-version",
             "cmake-format",
             "cmake-format-check",
+            "coverage_cobertura",
             "coverage_gcc",
+            "coverage_html",
             "docs",
             "doxygen",
             "doxygen-no-build",
@@ -1301,7 +1305,7 @@
         # Build targets in the list
         for target in args.build:
             if target in ns3_modules:
-                target = "lib" + target
+                pass
             elif target not in non_executable_targets:
                 target = get_target_to_build(target, ns3_version, build_profile)
             else:
@@ -1692,14 +1696,6 @@
     if os.getenv("CLICOLOR") is None:
         os.environ["CLICOLOR"] = "1"
 
-    # If pybindgen exists in the parent directory
-    # (e.g. ns3-all-in-one), add it to the PYTHONPATH
-    pybindgen_dir = glob.glob(os.path.abspath(append_to_ns3_path("..", "pybindgen*")))
-    if pybindgen_dir:
-        if "PYTHONPATH" not in os.environ:
-            os.environ["PYTHONPATH"] = ""
-        os.environ["PYTHONPATH"] += path_sep + pybindgen_dir[0]
-
     # Parse arguments
     args = parse_args(sys.argv[1:])
     atexit.register(exit_handler, dry_run=args.dry_run)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/README.md ns-3.43/README.md
--- ns-3.42/README.md	2024-05-29 15:29:46.828072800 -0700
+++ ns-3.43/README.md	2024-10-09 16:41:09.756655500 -0700
@@ -6,6 +6,11 @@
 
 [![Latest Release](https://gitlab.com/nsnam/ns-3-dev/-/badges/release.svg)](https://gitlab.com/nsnam/ns-3-dev/-/releases)
 
+## License
+
+This software is licensed under the terms of the GNU General Public License v2.0 only (GPL-2.0-only).
+See the LICENSE file for more details.
+
 ## Table of Contents
 
 * [Overview](#overview-an-open-source-project)
@@ -107,10 +112,14 @@
 ## Running ns-3 from Python
 
 If you do not plan to modify ns-3 upstream modules, you can get
-a pre-built version of the ns-3 python bindings.
+a pre-built version of the ns-3 python bindings. It is recommended
+to create a python virtual environment to isolate different application
+packages from system-wide packages (installable via the OS package managers).
 
 ```shell
-pip install --user ns3
+python3 -m venv ns3env
+source ./ns3env/bin/activate
+pip install ns3
 ```
 
 If you do not have `pip`, check their documents
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/RELEASE_NOTES.md ns-3.43/RELEASE_NOTES.md
--- ns-3.42/RELEASE_NOTES.md	2024-05-29 15:30:03.724115800 -0700
+++ ns-3.43/RELEASE_NOTES.md	2024-10-09 16:41:36.356755000 -0700
@@ -13,6 +13,87 @@
 and references prefixed by '!' refer to a
 [GitLab.com merge request](https://gitlab.com/nsnam/ns-3-dev/-/merge_requests) number.
 
+Release 3.43
+------------
+
+This release is mainly a maintenance release and the API is generally
+consistent with the previous ns-3.42 release.  See the file CHANGES.md
+for changed model behavior and build system aspects.  The GPLv2 license
+identifiers in the headers of each file have been changed to use SPDX
+identifiers.  The minimum GCC version supported is now version 10.1.
+
+### Availability
+
+This release is available from:
+<https://www.nsnam.org/release/ns-allinone-3.43.tar.bz2>
+
+### Supported platforms
+
+This release is intended to work on systems with the following minimal
+requirements (Note: not all ns-3 features are available on all systems):
+
+- g++-10.1 or later, or LLVM/clang++-11 or later
+- Python 3.8 or later
+- CMake 3.13 or later
+- (macOS only) Xcode 13.1.6 or later
+- (Windows only) Msys2/MinGW64 and Msys2/UCRT64 toolchains or WSL2
+
+Python API requires [Cppyy](https://cppyy.readthedocs.io/en/latest/installation.html) and has only
+been tested on Linux. As of this release, the latest known version to work with ns-3 is cppyy==3.1.2.
+
+The required Doxygen version for documentation generation is version 1.11.
+
+### New user-visible features
+
+- (applications) !2027 - BulkSendApplication: Added TCP retransmission trace consuming TcpSocketBase's TCP retransmission trace
+- (core) !1904 - Added support for Laplacian and Largest Extreme Value random variables (`LaplacianRandomVariable`, `LargestExtremeValueRandomVariable`)
+- (core) !2018 - `AddDeprecatedName` is now supported in TypeId.
+- (energy) !2018 - Energy module now uses the `ns3::energy` namespace in its TypeId.
+- (lr-wpan) !2082 - MAC SET GET attributes added
+- (lr-wpan) !2123 - CCA vulnerability window test and doc
+- (lr-wpan) !2163 - Lr-wpan module now uses the `ns3::lrwpan` namespace in its TypeId.
+- (tcp) !2027 - TcpSocketBase: Added TCP retransmission trace
+- (tcp) !2059 - Aligns PRR implementation with RFC 6937 bis-08. Added a new param `isDupAck` to `DoRecovery` method, removed `ReductionBound` attribute from `TcpPrrRecovery`.
+- (wifi) !2068 - Introduce use of weak type aliases for quantities representing SI units,
+in preparation for future conversion to strongly typed units and quantities
+- (wifi) - Added support for 80+80 MHz channel configuration
+- (wifi) - It is now possible to control how PCAPs are generated for MLD: either a single PCAP
+per device, or a PCAP file per PHY, or a PCAP file per link. By default, a single PCAP is generated per PHY for MLD. The configuration of this parameter has no impact for SLD.
+
+### Bugs fixed
+
+- (core) #1118 - Demangle EnumValue typenames for Doxygen
+- (core) #1122 - Handle deserializing empty strings in ATTRIBUTE_VALUE_IMPLEMENT
+- (config-store, core) #1091 - Fix handling of deprecated and obsolete attributes
+- (flow-monitor) #1097 - Add logging of max. and min. packet delay in FlowMonitor
+- (lr-wpan) !2001 - Beacon improvements and fixes
+- (lr-wpan) !2042 - Beacon improvements and jitter addition
+- (mobility) #1101 - Use std::abs() instead of abs()
+- (tcp) #1126 - Fix bytesAcked calculation in ProcessAck
+- (tcp) #805 - Update NextSeg() conditions for SACK as per RFC
+- (tcp) #1011 - Forbid ECN-marking of retransmissions, window probes and pure ACKs
+- (tcp) #1043 - Fix BBR incorrect minRtt updates
+- (tcp) #1113 - Fix integer overflow on first Hystart event
+- (tcp) !2083 - Consider segmentSize send limit while checking cwnd for cwnd rate-limit
+- (uan) !2087 - Fix Thorp attenuation formula
+- (uan) !2088 - Fix PER calculation of M-QAM
+- (uan) !2121 - Wrong Eb/N0 calculation in UanPhyPerCommonModes::CalcPer()
+- (uan) !2127 - Fix bug in energy update in UanPhyGen::RxEndEvent()
+- (wifi) #1095 - Fix reception of WIFI_MOD_CLASS_HR_DSSS
+- (wifi) Avoid firing WifiMac::DroppedMpdu trace twice in some cases
+- (wifi) Fix assignment of AIDs to non-AP STAs/MLDs to ensure they are unique
+- (wifi) Fix starting Sequence Number when ADDBA Response arrives after timeout
+- (wifi) Fix default association manager not properly handling non-AP MLDs not supporting 160 MHz operations
+- (wifi) Fix round robin multi-user scheduler sending Basic/BSRP TFs to EMLSR clients using another link
+- (wifi) Fix round robin multi-user scheduler sending Basic/BSRP TFs when no TID is mapped in the UL direction
+- (wifi) MU scheduler maintains a separate access request timer for each link
+- (wifi) Prevent cases where the TX window is stalled in case the ``BaThreshold`` attribute of the default ack manager is non-zero
+- (wifi) Fix retrieval of buffer status info from QoS Null frames sent in TB PPDUs in the multi-link case
+- (wifi) Avoid repeatedly sending BSRP TF in a TXOP when access is requested by MU scheduler
+- (wifi) Fix Txop Link entity swapping in some specific cases
+- (wifi) Fix incorrect configuration of wifi-spectrum-saturation-example.cc
+- (wifi) Fix output formatting for wifi-spectrum-per-example.cc
+
 Release 3.42
 ------------
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/scratch/nested-subdir/lib/scratch-nested-subdir-library-header.h ns-3.43/scratch/nested-subdir/lib/scratch-nested-subdir-library-header.h
--- ns-3.42/scratch/nested-subdir/lib/scratch-nested-subdir-library-header.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/scratch/nested-subdir/lib/scratch-nested-subdir-library-header.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // This header does not provide much functionality but is meant to demonstrate how,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/scratch/nested-subdir/lib/scratch-nested-subdir-library-source.cc ns-3.43/scratch/nested-subdir/lib/scratch-nested-subdir-library-source.cc
--- ns-3.42/scratch/nested-subdir/lib/scratch-nested-subdir-library-source.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/scratch/nested-subdir/lib/scratch-nested-subdir-library-source.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // This file contains the implementation of the functions declared in the
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/scratch/nested-subdir/scratch-nested-subdir-executable.cc ns-3.43/scratch/nested-subdir/scratch-nested-subdir-executable.cc
--- ns-3.42/scratch/nested-subdir/scratch-nested-subdir-executable.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/scratch/nested-subdir/scratch-nested-subdir-executable.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // This example shows how to create new simulations that are implemented in
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/scratch/scratch-simulator.cc ns-3.43/scratch/scratch-simulator.cc
--- ns-3.42/scratch/scratch-simulator.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/scratch/scratch-simulator.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/core-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/scratch/subdir/scratch-subdir-additional-header.cc ns-3.43/scratch/subdir/scratch-subdir-additional-header.cc
--- ns-3.42/scratch/subdir/scratch-subdir-additional-header.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/scratch/subdir/scratch-subdir-additional-header.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // This file contains the implementation of the functions declared in the
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/scratch/subdir/scratch-subdir-additional-header.h ns-3.43/scratch/subdir/scratch-subdir-additional-header.h
--- ns-3.42/scratch/subdir/scratch-subdir-additional-header.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/scratch/subdir/scratch-subdir-additional-header.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // This header does not provide much functionality but is meant to demonstrate how,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/scratch/subdir/scratch-subdir.cc ns-3.43/scratch/subdir/scratch-subdir.cc
--- ns-3.42/scratch/subdir/scratch-subdir.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/scratch/subdir/scratch-subdir.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // This example shows how to create new simulations that are implemented in
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/setup.cfg ns-3.43/setup.cfg
--- ns-3.42/setup.cfg	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/setup.cfg	2024-10-09 16:41:09.844655800 -0700
@@ -26,8 +26,6 @@
     Intended Audience :: Developers
     Intended Audience :: Science/Research
     Programming Language :: C++
-    Programming Language :: Python :: 3.6
-    Programming Language :: Python :: 3.7
     Programming Language :: Python :: 3.8
     Programming Language :: Python :: 3.9
     Programming Language :: Python :: 3.10
@@ -38,7 +36,7 @@
 
 [options]
 zip_safe = False
-python_requires = >=3.6
+python_requires = >=3.8
 install_requires =
     cppyy==3.1.2
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/angles.cc ns-3.43/src/antenna/model/angles.cc
--- ns-3.42/src/antenna/model/angles.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/angles.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/angles.h ns-3.43/src/antenna/model/angles.h
--- ns-3.42/src/antenna/model/angles.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/angles.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/antenna-model.cc ns-3.43/src/antenna/model/antenna-model.cc
--- ns-3.42/src/antenna/model/antenna-model.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/antenna-model.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/antenna-model.h ns-3.43/src/antenna/model/antenna-model.h
--- ns-3.42/src/antenna/model/antenna-model.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/antenna-model.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/circular-aperture-antenna-model.cc ns-3.43/src/antenna/model/circular-aperture-antenna-model.cc
--- ns-3.42/src/antenna/model/circular-aperture-antenna-model.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/circular-aperture-antenna-model.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mattia Sandri <mattia.sandri@unipd.it>
  */
@@ -33,9 +22,9 @@
 #include <math.h>
 
 /**
- *  \file
- *  \ingroup antenna
- *  Class CircularApertureAntennaModel implementation.
+ * \file
+ * \ingroup antenna
+ * Class CircularApertureAntennaModel implementation.
  */
 
 namespace
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/circular-aperture-antenna-model.h ns-3.43/src/antenna/model/circular-aperture-antenna-model.h
--- ns-3.42/src/antenna/model/circular-aperture-antenna-model.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/circular-aperture-antenna-model.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mattia Sandri <mattia.sandri@unipd.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/cosine-antenna-model.cc ns-3.43/src/antenna/model/cosine-antenna-model.cc
--- ns-3.42/src/antenna/model/cosine-antenna-model.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/cosine-antenna-model.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/cosine-antenna-model.h ns-3.43/src/antenna/model/cosine-antenna-model.h
--- ns-3.42/src/antenna/model/cosine-antenna-model.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/cosine-antenna-model.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/isotropic-antenna-model.cc ns-3.43/src/antenna/model/isotropic-antenna-model.cc
--- ns-3.42/src/antenna/model/isotropic-antenna-model.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/isotropic-antenna-model.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/isotropic-antenna-model.h ns-3.43/src/antenna/model/isotropic-antenna-model.h
--- ns-3.42/src/antenna/model/isotropic-antenna-model.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/isotropic-antenna-model.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/parabolic-antenna-model.cc ns-3.43/src/antenna/model/parabolic-antenna-model.cc
--- ns-3.42/src/antenna/model/parabolic-antenna-model.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/parabolic-antenna-model.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/parabolic-antenna-model.h ns-3.43/src/antenna/model/parabolic-antenna-model.h
--- ns-3.42/src/antenna/model/parabolic-antenna-model.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/parabolic-antenna-model.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/phased-array-model.cc ns-3.43/src/antenna/model/phased-array-model.cc
--- ns-3.42/src/antenna/model/phased-array-model.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/phased-array-model.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  *   Copyright (c) 2020 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2 as
- *   published by the Free Software Foundation;
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *   SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "phased-array-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/phased-array-model.h ns-3.43/src/antenna/model/phased-array-model.h
--- ns-3.42/src/antenna/model/phased-array-model.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/phased-array-model.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  *   Copyright (c) 2020 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2 as
- *   published by the Free Software Foundation;
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *   SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef PHASED_ARRAY_MODEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/three-gpp-antenna-model.cc ns-3.43/src/antenna/model/three-gpp-antenna-model.cc
--- ns-3.42/src/antenna/model/three-gpp-antenna-model.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/three-gpp-antenna-model.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "three-gpp-antenna-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/three-gpp-antenna-model.h ns-3.43/src/antenna/model/three-gpp-antenna-model.h
--- ns-3.42/src/antenna/model/three-gpp-antenna-model.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/three-gpp-antenna-model.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef THREE_GPP_ANTENNA_MODEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/uniform-planar-array.cc ns-3.43/src/antenna/model/uniform-planar-array.cc
--- ns-3.42/src/antenna/model/uniform-planar-array.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/uniform-planar-array.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  *   Copyright (c) 2020 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2 as
- *   published by the Free Software Foundation;
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *   SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "uniform-planar-array.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/model/uniform-planar-array.h ns-3.43/src/antenna/model/uniform-planar-array.h
--- ns-3.42/src/antenna/model/uniform-planar-array.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/model/uniform-planar-array.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  *   Copyright (c) 2020 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2 as
- *   published by the Free Software Foundation;
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *   SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef UNIFORM_PLANAR_ARRAY_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/test/test-angles.cc ns-3.43/src/antenna/test/test-angles.cc
--- ns-3.42/src/antenna/test/test-angles.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/test/test-angles.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/test/test-circular-aperture-antenna.cc ns-3.43/src/antenna/test/test-circular-aperture-antenna.cc
--- ns-3.42/src/antenna/test/test-circular-aperture-antenna.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/test/test-circular-aperture-antenna.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  *   Copyright (c) 2023 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2 as
- *   published by the Free Software Foundation;
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *   SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/circular-aperture-antenna-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/test/test-cosine-antenna.cc ns-3.43/src/antenna/test/test-cosine-antenna.cc
--- ns-3.42/src/antenna/test/test-cosine-antenna.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/test/test-cosine-antenna.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/test/test-degrees-radians.cc ns-3.43/src/antenna/test/test-degrees-radians.cc
--- ns-3.42/src/antenna/test/test-degrees-radians.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/test/test-degrees-radians.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/test/test-isotropic-antenna.cc ns-3.43/src/antenna/test/test-isotropic-antenna.cc
--- ns-3.42/src/antenna/test/test-isotropic-antenna.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/test/test-isotropic-antenna.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/test/test-parabolic-antenna.cc ns-3.43/src/antenna/test/test-parabolic-antenna.cc
--- ns-3.42/src/antenna/test/test-parabolic-antenna.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/test/test-parabolic-antenna.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,12 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/antenna/test/test-uniform-planar-array.cc ns-3.43/src/antenna/test/test-uniform-planar-array.cc
--- ns-3.42/src/antenna/test/test-uniform-planar-array.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/antenna/test/test-uniform-planar-array.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  *   Copyright (c) 2020 University of Padova, Dep. of Information Engineering, SIGNET lab.
  *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2 as
- *   published by the Free Software Foundation;
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *   SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "cmath"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/doc/aodv.h ns-3.43/src/aodv/doc/aodv.h
--- ns-3.42/src/aodv/doc/aodv.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/doc/aodv.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/examples/aodv.cc ns-3.43/src/aodv/examples/aodv.cc
--- ns-3.42/src/aodv/examples/aodv.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/examples/aodv.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,264 +0,0 @@
-/*
- * Copyright (c) 2009 IITP RAS
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * This is an example script for AODV manet routing protocol.
- *
- * Authors: Pavel Boyko <boyko@iitp.ru>
- */
-
-#include "ns3/aodv-module.h"
-#include "ns3/core-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/mobility-module.h"
-#include "ns3/network-module.h"
-#include "ns3/ping-helper.h"
-#include "ns3/point-to-point-module.h"
-#include "ns3/yans-wifi-helper.h"
-
-#include <cmath>
-#include <iostream>
-
-using namespace ns3;
-
-/**
- * \defgroup aodv-examples AODV Examples
- * \ingroup aodv
- * \ingroup examples
- */
-
-/**
- * \ingroup aodv-examples
- * \ingroup examples
- * \brief Test script.
- *
- * This script creates 1-dimensional grid topology and then ping last node from the first one:
- *
- * [10.0.0.1] <-- step --> [10.0.0.2] <-- step --> [10.0.0.3] <-- step --> [10.0.0.4]
- *
- * ping 10.0.0.4
- *
- * When 1/3 of simulation time has elapsed, one of the nodes is moved out of
- * range, thereby breaking the topology.  By default, this will result in
- * stopping ping replies reception after sequence number 33. If the step size is reduced
- * to cover the gap, then also the following pings can be received.
- */
-class AodvExample
-{
-  public:
-    AodvExample();
-    /**
-     * \brief Configure script parameters
-     * \param argc is the command line argument count
-     * \param argv is the command line arguments
-     * \return true on successful configuration
-     */
-    bool Configure(int argc, char** argv);
-    /// Run simulation
-    void Run();
-    /**
-     * Report results
-     * \param os the output stream
-     */
-    void Report(std::ostream& os);
-
-  private:
-    // parameters
-    /// Number of nodes
-    uint32_t size;
-    /// Distance between nodes, meters
-    double step;
-    /// Simulation time, seconds
-    double totalTime;
-    /// Write per-device PCAP traces if true
-    bool pcap;
-    /// Print routes if true
-    bool printRoutes;
-
-    // network
-    /// nodes used in the example
-    NodeContainer nodes;
-    /// devices used in the example
-    NetDeviceContainer devices;
-    /// interfaces used in the example
-    Ipv4InterfaceContainer interfaces;
-
-  private:
-    /// Create the nodes
-    void CreateNodes();
-    /// Create the devices
-    void CreateDevices();
-    /// Create the network
-    void InstallInternetStack();
-    /// Create the simulation applications
-    void InstallApplications();
-};
-
-int
-main(int argc, char** argv)
-{
-    AodvExample test;
-    if (!test.Configure(argc, argv))
-    {
-        NS_FATAL_ERROR("Configuration failed. Aborted.");
-    }
-
-    test.Run();
-    test.Report(std::cout);
-    return 0;
-}
-
-//-----------------------------------------------------------------------------
-AodvExample::AodvExample()
-    : size(10),
-      step(50),
-      totalTime(100),
-      pcap(true),
-      printRoutes(true)
-{
-}
-
-bool
-AodvExample::Configure(int argc, char** argv)
-{
-    // Enable AODV logs by default. Comment this if too noisy
-    // LogComponentEnable("AodvRoutingProtocol", LOG_LEVEL_ALL);
-
-    SeedManager::SetSeed(12345);
-    CommandLine cmd(__FILE__);
-
-    cmd.AddValue("pcap", "Write PCAP traces.", pcap);
-    cmd.AddValue("printRoutes", "Print routing table dumps.", printRoutes);
-    cmd.AddValue("size", "Number of nodes.", size);
-    cmd.AddValue("time", "Simulation time, s.", totalTime);
-    cmd.AddValue("step", "Grid step, m", step);
-
-    cmd.Parse(argc, argv);
-    return true;
-}
-
-void
-AodvExample::Run()
-{
-    //  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", UintegerValue (1)); //
-    //  enable rts cts all the time.
-    CreateNodes();
-    CreateDevices();
-    InstallInternetStack();
-    InstallApplications();
-
-    std::cout << "Starting simulation for " << totalTime << " s ...\n";
-
-    Simulator::Stop(Seconds(totalTime));
-    Simulator::Run();
-    Simulator::Destroy();
-}
-
-void
-AodvExample::Report(std::ostream&)
-{
-}
-
-void
-AodvExample::CreateNodes()
-{
-    std::cout << "Creating " << (unsigned)size << " nodes " << step << " m apart.\n";
-    nodes.Create(size);
-    // Name nodes
-    for (uint32_t i = 0; i < size; ++i)
-    {
-        std::ostringstream os;
-        os << "node-" << i;
-        Names::Add(os.str(), nodes.Get(i));
-    }
-    // Create static grid
-    MobilityHelper mobility;
-    mobility.SetPositionAllocator("ns3::GridPositionAllocator",
-                                  "MinX",
-                                  DoubleValue(0.0),
-                                  "MinY",
-                                  DoubleValue(0.0),
-                                  "DeltaX",
-                                  DoubleValue(step),
-                                  "DeltaY",
-                                  DoubleValue(0),
-                                  "GridWidth",
-                                  UintegerValue(size),
-                                  "LayoutType",
-                                  StringValue("RowFirst"));
-    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
-    mobility.Install(nodes);
-}
-
-void
-AodvExample::CreateDevices()
-{
-    WifiMacHelper wifiMac;
-    wifiMac.SetType("ns3::AdhocWifiMac");
-    YansWifiPhyHelper wifiPhy;
-    YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default();
-    wifiPhy.SetChannel(wifiChannel.Create());
-    WifiHelper wifi;
-    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
-                                 "DataMode",
-                                 StringValue("OfdmRate6Mbps"),
-                                 "RtsCtsThreshold",
-                                 UintegerValue(0));
-    devices = wifi.Install(wifiPhy, wifiMac, nodes);
-
-    if (pcap)
-    {
-        wifiPhy.EnablePcapAll(std::string("aodv"));
-    }
-}
-
-void
-AodvExample::InstallInternetStack()
-{
-    AodvHelper aodv;
-    // you can configure AODV attributes here using aodv.Set(name, value)
-    InternetStackHelper stack;
-    stack.SetRoutingHelper(aodv); // has effect on the next Install ()
-    stack.Install(nodes);
-    Ipv4AddressHelper address;
-    address.SetBase("10.0.0.0", "255.0.0.0");
-    interfaces = address.Assign(devices);
-
-    if (printRoutes)
-    {
-        Ptr<OutputStreamWrapper> routingStream =
-            Create<OutputStreamWrapper>("aodv.routes", std::ios::out);
-        Ipv4RoutingHelper::PrintRoutingTableAllAt(Seconds(8), routingStream);
-    }
-}
-
-void
-AodvExample::InstallApplications()
-{
-    PingHelper ping(interfaces.GetAddress(size - 1));
-    ping.SetAttribute("VerboseMode", EnumValue(Ping::VerboseMode::VERBOSE));
-
-    ApplicationContainer p = ping.Install(nodes.Get(0));
-    p.Start(Seconds(0));
-    p.Stop(Seconds(totalTime) - Seconds(0.001));
-
-    // move node away
-    Ptr<Node> node = nodes.Get(size / 2);
-    Ptr<MobilityModel> mob = node->GetObject<MobilityModel>();
-    Simulator::Schedule(Seconds(totalTime / 3),
-                        &MobilityModel::SetPosition,
-                        mob,
-                        Vector(1e5, 1e5, 1e5));
-}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/examples/aodv-example.cc ns-3.43/src/aodv/examples/aodv-example.cc
--- ns-3.42/src/aodv/examples/aodv-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/aodv/examples/aodv-example.cc	2024-10-09 16:41:09.844655800 -0700
@@ -0,0 +1,253 @@
+/*
+ * Copyright (c) 2009 IITP RAS
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * This is an example script for AODV manet routing protocol.
+ *
+ * Authors: Pavel Boyko <boyko@iitp.ru>
+ */
+
+#include "ns3/aodv-module.h"
+#include "ns3/core-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/network-module.h"
+#include "ns3/ping-helper.h"
+#include "ns3/point-to-point-module.h"
+#include "ns3/yans-wifi-helper.h"
+
+#include <cmath>
+#include <iostream>
+
+using namespace ns3;
+
+/**
+ * \defgroup aodv-examples AODV Examples
+ * \ingroup aodv
+ * \ingroup examples
+ */
+
+/**
+ * \ingroup aodv-examples
+ * \ingroup examples
+ * \brief Test script.
+ *
+ * This script creates 1-dimensional grid topology and then ping last node from the first one:
+ *
+ * [10.0.0.1] <-- step --> [10.0.0.2] <-- step --> [10.0.0.3] <-- step --> [10.0.0.4]
+ *
+ * ping 10.0.0.4
+ *
+ * When 1/3 of simulation time has elapsed, one of the nodes is moved out of
+ * range, thereby breaking the topology.  By default, this will result in
+ * stopping ping replies reception after sequence number 33. If the step size is reduced
+ * to cover the gap, then also the following pings can be received.
+ */
+class AodvExample
+{
+  public:
+    AodvExample();
+    /**
+     * \brief Configure script parameters
+     * \param argc is the command line argument count
+     * \param argv is the command line arguments
+     * \return true on successful configuration
+     */
+    bool Configure(int argc, char** argv);
+    /// Run simulation
+    void Run();
+    /**
+     * Report results
+     * \param os the output stream
+     */
+    void Report(std::ostream& os);
+
+  private:
+    // parameters
+    /// Number of nodes
+    uint32_t size;
+    /// Distance between nodes, meters
+    double step;
+    /// Simulation time, seconds
+    double totalTime;
+    /// Write per-device PCAP traces if true
+    bool pcap;
+    /// Print routes if true
+    bool printRoutes;
+
+    // network
+    /// nodes used in the example
+    NodeContainer nodes;
+    /// devices used in the example
+    NetDeviceContainer devices;
+    /// interfaces used in the example
+    Ipv4InterfaceContainer interfaces;
+
+  private:
+    /// Create the nodes
+    void CreateNodes();
+    /// Create the devices
+    void CreateDevices();
+    /// Create the network
+    void InstallInternetStack();
+    /// Create the simulation applications
+    void InstallApplications();
+};
+
+int
+main(int argc, char** argv)
+{
+    AodvExample test;
+    if (!test.Configure(argc, argv))
+    {
+        NS_FATAL_ERROR("Configuration failed. Aborted.");
+    }
+
+    test.Run();
+    test.Report(std::cout);
+    return 0;
+}
+
+//-----------------------------------------------------------------------------
+AodvExample::AodvExample()
+    : size(10),
+      step(50),
+      totalTime(100),
+      pcap(true),
+      printRoutes(true)
+{
+}
+
+bool
+AodvExample::Configure(int argc, char** argv)
+{
+    // Enable AODV logs by default. Comment this if too noisy
+    // LogComponentEnable("AodvRoutingProtocol", LOG_LEVEL_ALL);
+
+    SeedManager::SetSeed(12345);
+    CommandLine cmd(__FILE__);
+
+    cmd.AddValue("pcap", "Write PCAP traces.", pcap);
+    cmd.AddValue("printRoutes", "Print routing table dumps.", printRoutes);
+    cmd.AddValue("size", "Number of nodes.", size);
+    cmd.AddValue("time", "Simulation time, s.", totalTime);
+    cmd.AddValue("step", "Grid step, m", step);
+
+    cmd.Parse(argc, argv);
+    return true;
+}
+
+void
+AodvExample::Run()
+{
+    //  Config::SetDefault ("ns3::WifiRemoteStationManager::RtsCtsThreshold", UintegerValue (1)); //
+    //  enable rts cts all the time.
+    CreateNodes();
+    CreateDevices();
+    InstallInternetStack();
+    InstallApplications();
+
+    std::cout << "Starting simulation for " << totalTime << " s ...\n";
+
+    Simulator::Stop(Seconds(totalTime));
+    Simulator::Run();
+    Simulator::Destroy();
+}
+
+void
+AodvExample::Report(std::ostream&)
+{
+}
+
+void
+AodvExample::CreateNodes()
+{
+    std::cout << "Creating " << (unsigned)size << " nodes " << step << " m apart.\n";
+    nodes.Create(size);
+    // Name nodes
+    for (uint32_t i = 0; i < size; ++i)
+    {
+        std::ostringstream os;
+        os << "node-" << i;
+        Names::Add(os.str(), nodes.Get(i));
+    }
+    // Create static grid
+    MobilityHelper mobility;
+    mobility.SetPositionAllocator("ns3::GridPositionAllocator",
+                                  "MinX",
+                                  DoubleValue(0.0),
+                                  "MinY",
+                                  DoubleValue(0.0),
+                                  "DeltaX",
+                                  DoubleValue(step),
+                                  "DeltaY",
+                                  DoubleValue(0),
+                                  "GridWidth",
+                                  UintegerValue(size),
+                                  "LayoutType",
+                                  StringValue("RowFirst"));
+    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+    mobility.Install(nodes);
+}
+
+void
+AodvExample::CreateDevices()
+{
+    WifiMacHelper wifiMac;
+    wifiMac.SetType("ns3::AdhocWifiMac");
+    YansWifiPhyHelper wifiPhy;
+    YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default();
+    wifiPhy.SetChannel(wifiChannel.Create());
+    WifiHelper wifi;
+    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
+                                 "DataMode",
+                                 StringValue("OfdmRate6Mbps"),
+                                 "RtsCtsThreshold",
+                                 UintegerValue(0));
+    devices = wifi.Install(wifiPhy, wifiMac, nodes);
+
+    if (pcap)
+    {
+        wifiPhy.EnablePcapAll(std::string("aodv"));
+    }
+}
+
+void
+AodvExample::InstallInternetStack()
+{
+    AodvHelper aodv;
+    // you can configure AODV attributes here using aodv.Set(name, value)
+    InternetStackHelper stack;
+    stack.SetRoutingHelper(aodv); // has effect on the next Install ()
+    stack.Install(nodes);
+    Ipv4AddressHelper address;
+    address.SetBase("10.0.0.0", "255.0.0.0");
+    interfaces = address.Assign(devices);
+
+    if (printRoutes)
+    {
+        Ptr<OutputStreamWrapper> routingStream =
+            Create<OutputStreamWrapper>("aodv.routes", std::ios::out);
+        Ipv4RoutingHelper::PrintRoutingTableAllAt(Seconds(8), routingStream);
+    }
+}
+
+void
+AodvExample::InstallApplications()
+{
+    PingHelper ping(interfaces.GetAddress(size - 1));
+    ping.SetAttribute("VerboseMode", EnumValue(Ping::VerboseMode::VERBOSE));
+
+    ApplicationContainer p = ping.Install(nodes.Get(0));
+    p.Start(Seconds(0));
+    p.Stop(Seconds(totalTime) - Seconds(0.001));
+
+    // move node away
+    Ptr<Node> node = nodes.Get(size / 2);
+    Ptr<MobilityModel> mob = node->GetObject<MobilityModel>();
+    Simulator::Schedule(Seconds(totalTime / 3),
+                        &MobilityModel::SetPosition,
+                        mob,
+                        Vector(1e5, 1e5, 1e5));
+}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/examples/CMakeLists.txt ns-3.43/src/aodv/examples/CMakeLists.txt
--- ns-3.42/src/aodv/examples/CMakeLists.txt	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/examples/CMakeLists.txt	2024-10-09 16:41:09.844655800 -0700
@@ -1,6 +1,6 @@
 build_lib_example(
-  NAME aodv
-  SOURCE_FILES aodv.cc
+  NAME aodv-example
+  SOURCE_FILES aodv-example.cc
   LIBRARIES_TO_LINK
     ${libwifi}
     ${libinternet}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/helper/aodv-helper.cc ns-3.43/src/aodv/helper/aodv-helper.cc
--- ns-3.42/src/aodv/helper/aodv-helper.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/helper/aodv-helper.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>, written after OlsrHelper by Mathieu Lacage
  * <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/helper/aodv-helper.h ns-3.43/src/aodv/helper/aodv-helper.h
--- ns-3.42/src/aodv/helper/aodv-helper.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/helper/aodv-helper.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>, written after OlsrHelper by Mathieu Lacage
  * <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-dpd.cc ns-3.43/src/aodv/model/aodv-dpd.cc
--- ns-3.42/src/aodv/model/aodv-dpd.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-dpd.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *
  * Authors: Elena Buchatskaia <borovkovaes@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-dpd.h ns-3.43/src/aodv/model/aodv-dpd.h
--- ns-3.42/src/aodv/model/aodv-dpd.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-dpd.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *
  * Authors: Elena Buchatskaia <borovkovaes@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-id-cache.cc ns-3.43/src/aodv/model/aodv-id-cache.cc
--- ns-3.42/src/aodv/model/aodv-id-cache.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-id-cache.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-id-cache.h ns-3.43/src/aodv/model/aodv-id-cache.h
--- ns-3.42/src/aodv/model/aodv-id-cache.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-id-cache.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-neighbor.cc ns-3.43/src/aodv/model/aodv-neighbor.cc
--- ns-3.42/src/aodv/model/aodv-neighbor.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-neighbor.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-neighbor.h ns-3.43/src/aodv/model/aodv-neighbor.h
--- ns-3.42/src/aodv/model/aodv-neighbor.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-neighbor.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-packet.cc ns-3.43/src/aodv/model/aodv-packet.cc
--- ns-3.42/src/aodv/model/aodv-packet.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-packet.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-packet.h ns-3.43/src/aodv/model/aodv-packet.h
--- ns-3.42/src/aodv/model/aodv-packet.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-packet.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-routing-protocol.cc ns-3.43/src/aodv/model/aodv-routing-protocol.cc
--- ns-3.42/src/aodv/model/aodv-routing-protocol.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-routing-protocol.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-routing-protocol.h ns-3.43/src/aodv/model/aodv-routing-protocol.h
--- ns-3.42/src/aodv/model/aodv-routing-protocol.h	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-routing-protocol.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-rqueue.cc ns-3.43/src/aodv/model/aodv-rqueue.cc
--- ns-3.42/src/aodv/model/aodv-rqueue.cc	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/aodv/model/aodv-rqueue.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-rqueue.h ns-3.43/src/aodv/model/aodv-rqueue.h
--- ns-3.42/src/aodv/model/aodv-rqueue.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/model/aodv-rqueue.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-rtable.cc ns-3.43/src/aodv/model/aodv-rtable.cc
--- ns-3.42/src/aodv/model/aodv-rtable.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/model/aodv-rtable.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/model/aodv-rtable.h ns-3.43/src/aodv/model/aodv-rtable.h
--- ns-3.42/src/aodv/model/aodv-rtable.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/model/aodv-rtable.h	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
@@ -84,7 +73,7 @@
 
     ~RoutingTableEntry();
 
-    ///\name Precursors management
+    /// \name Precursors management
     //\{
     /**
      * Insert precursor in precursor list if it doesn't yet exist in the list
@@ -429,7 +418,7 @@
      */
     RoutingTable(Time t);
 
-    ///\name Handle lifetime of invalid route
+    /// \name Handle lifetime of invalid route
     //\{
     /**
      * Get the lifetime of a bad link
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/test/aodv-id-cache-test-suite.cc ns-3.43/src/aodv/test/aodv-id-cache-test-suite.cc
--- ns-3.42/src/aodv/test/aodv-id-cache-test-suite.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/test/aodv-id-cache-test-suite.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on
  *      NS-2 AODV model developed by the CMU/MONARCH group and optimized and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/test/aodv-regression.cc ns-3.43/src/aodv/test/aodv-regression.cc
--- ns-3.42/src/aodv/test/aodv-regression.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/test/aodv-regression.cc	2024-10-09 16:41:09.844655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
@@ -193,7 +182,7 @@
     NetDeviceContainer devices = wifi.Install(wifiPhy, wifiMac, *m_nodes);
 
     // Assign fixed stream numbers to wifi and channel random variables
-    streamsUsed += wifi.AssignStreams(devices, streamsUsed);
+    streamsUsed += WifiHelper::AssignStreams(devices, streamsUsed);
     // Assign 6 streams per device
     NS_TEST_ASSERT_MSG_EQ(streamsUsed, (devices.GetN() * 2), "Stream assignment mismatch");
     streamsUsed += wifiChannel.AssignStreams(chan, streamsUsed);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/test/aodv-regression.h ns-3.43/src/aodv/test/aodv-regression.h
--- ns-3.42/src/aodv/test/aodv-regression.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/test/aodv-regression.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
@@ -33,132 +22,131 @@
  * \brief AODV chain regression test
  *
  * This script creates 1-dimensional grid topology and then ping last node from the first one:
- *
- * [10.1.1.1] <-- step --> [10.1.1.2] <-- step --> [10.1.1.3] <-- step --> [10.1.1.4] <-- step -->
-[10.1.1.5]
- *
- * Each node can hear only his right and his left neighbor, if they exist. When one third of total
-time expired,
- * central node moves away. After this, node 3 doesn't hear any packets from other nodes and nobody
-hears his packets.
+ */
+// clang-format off
+/**
+ *     [10.1.1.1] <-- step --> [10.1.1.2] <-- step --> [10.1.1.3] <-- step --> [10.1.1.4] <-- step --> [10.1.1.5]
+ */
+// clang-format on
+/**
+ * Each node can hear only his right and his left neighbor, if they exist.
+ * When one third of total time expired, central node moves away.
+ * After this, node 3 doesn't hear any packets from other nodes and nobody hears his packets.
  * We want to demonstrate in this script
  * 1) route establishing
  * 2) broken link detection both from layer 2 information and hello messages.
  *
+ */
+// clang-format off
+/**
  * \verbatim
- Expected packets time diagram.
+   Expected packets time diagram.
+
            1       2       3       4       5
-    <------|------>|       |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, U=1,
-hop=0, ID=1, org_seqno=1) src = 10.1.1.1
-           |<------|------>|       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, U=1,
-hop=1, ID=1, org_seqno=1) src = 10.1.1.2 |       |<------|------>|       |        RREQ
-(orig 10.1.1.1, dst 10.1.1.5, G=1, U=1, hop=2, ID=1, org_seqno=1) src = 10.1.1.3 |       |
-|<------|------>|        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, U=1, hop=3, ID=1, org_seqno=1) src
-= 10.1.1.4 |       |       |       |<------|------> ARP request. Who has 10.1.1.4? Tell 10.1.1.5 |
-|       |       |======>|        ARP reply |       |       |       |<======|        RREP
-(orig 10.1.1.1, dst 10.1.1.5, hop=0, dst_seqno=0) src=10.1.1.5 |       |       |<------|------>| ARP
-request. Who has 10.1.1.3? Tell 10.1.1.4 |       |       |======>|       |        ARP reply | |
-|<======|       |        RREP (orig 10.1.1.1, dst 10.1.1.5, hop=1, dst_seqno=0) src=10.1.1.4 |
-|<------|------>|       |        ARP request. Who has 10.1.1.2? Tell 10.1.1.3 |       |======>| | |
-ARP reply |       |<======|       |       |        RREP (orig 10.1.1.1, dst 10.1.1.5, hop=2,
-dst_seqno=0) src=10.1.1.3
+   <-------|------>|       |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, U=1, hop=0, ID=1, org_seqno=1) src = 10.1.1.1
+           |<------|------>|       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, U=1, hop=1, ID=1, org_seqno=1) src = 10.1.1.2
+           |       |<------|------>|       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, U=1, hop=2, ID=1, org_seqno=1) src = 10.1.1.3
+           |       |       |<------|------>|        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, U=1, hop=3, ID=1, org_seqno=1) src = 10.1.1.4
+           |       |       |       |<------|------> ARP request. Who has 10.1.1.4? Tell 10.1.1.5
+           |       |       |       |======>|        ARP reply
+           |       |       |       |<======|        RREP (orig 10.1.1.1, dst 10.1.1.5, hop=0, dst_seqno=0) src=10.1.1.5
+           |       |       |<------|------>|        ARP request. Who has 10.1.1.3? Tell 10.1.1.4
+           |       |       |======>|       |        ARP reply
+           |       |       |<======|       |        RREP (orig 10.1.1.1, dst 10.1.1.5, hop=1, dst_seqno=0) src=10.1.1.4
+           |       |<------|------>|       |        ARP request. Who has 10.1.1.2? Tell 10.1.1.3
+           |       |======>|       |       |        ARP reply
+           |       |<======|       |       |        RREP (orig 10.1.1.1, dst 10.1.1.5, hop=2, dst_seqno=0) src=10.1.1.3
            |<------|------>|       |       |        ARP request. Who has 10.1.1.1? Tell 10.1.1.2
            |======>|       |       |       |        ARP reply
-           |<======|       |       |       |        RREP (orig 10.1.1.1, dst 10.1.1.5, hop=3,
-dst_seqno=0) src=10.1.1.2
+           |<======|       |       |       |        RREP (orig 10.1.1.1, dst 10.1.1.5, hop=3, dst_seqno=0) src=10.1.1.2
    <-------|------>|       |       |       |        ARP request. Who has 10.1.1.2? Tell 10.1.1.1
            |<======|       |       |       |
-           |======>|       |       |       |        ICMP (ping) request 0 from 10.1.1.1 to 10.1.1.5;
-src=10.1.1.1 next_hop=10.1.1.2
+           |======>|       |       |       |        ICMP (ping) request 0 from 10.1.1.1 to 10.1.1.5; src=10.1.1.1 next_hop=10.1.1.2
            |<------|------>|       |       |        ARP request. Who has 10.1.1.3? Tell 10.1.1.2
            |       |<======|       |       |        ARP reply
-           |       |======>|       |       |        ICMP (ping) request 0 from 10.1.1.1 to 10.1.1.5;
-src=10.1.1.2 next_hop=10.1.1.3 |       |<------|------>|       |        ARP request. Who
-has 10.1.1.4? Tell 10.1.1.3 |       |       |<======|       |        ARP reply |       | |======>|
-|        ICMP (ping) request 0 from 10.1.1.1 to 10.1.1.5; src=10.1.1.3 next_hop=10.1.1.4 |       |
-|<------|------>|        ARP request. Who has 10.1.1.5? Tell 10.1.1.4 |       |       | |<======|
-ARP reply |       |       |       |======>|        ICMP (ping) request 0; src=10.1.1.4
-next_hop=10.1.1.5 |       |       |       |<======|        ICMP (ping) reply 0; src=10.1.1.5
-next_hop=10.1.1.4 |       |       |<======|       |        ICMP (ping) reply 0; src=10.1.1.4
-next_hop=10.1.1.3 |       |<======|       |       |        ICMP (ping) reply 0; src=10.1.1.3
-next_hop=10.1.1.2
-           |<======|       |       |       |        ICMP (ping) reply 0; src=10.1.1.2
-next_hop=10.1.1.1 |       |       |       |<------|------> Hello
+           |       |======>|       |       |        ICMP (ping) request 0 from 10.1.1.1 to 10.1.1.5; src=10.1.1.2 next_hop=10.1.1.3
+           |       |<------|------>|       |        ARP request. Who has 10.1.1.4? Tell 10.1.1.3
+           |       |       |<======|       |        ARP reply
+           |       |       |======>|       |        ICMP (ping) request 0 from 10.1.1.1 to 10.1.1.5; src=10.1.1.3 next_hop=10.1.1.4
+           |       |       |<------|------>|        ARP request. Who has 10.1.1.5? Tell 10.1.1.4
+           |       |       |       |<======|        ARP reply
+           |       |       |       |======>|        ICMP (ping) request 0; src=10.1.1.4 next_hop=10.1.1.5
+           |       |       |       |<======|        ICMP (ping) reply 0; src=10.1.1.5 next_hop=10.1.1.4
+           |       |       |<======|       |        ICMP (ping) reply 0; src=10.1.1.4 next_hop=10.1.1.3
+           |       |<======|       |       |        ICMP (ping) reply 0; src=10.1.1.3 next_hop=10.1.1.2
+           |<======|       |       |       |        ICMP (ping) reply 0; src=10.1.1.2 next_hop=10.1.1.1
+           |       |       |       |<------|------> Hello
            |<------|------>|       |       |        Hello
-    <------|------>|       |       |       |        Hello
+   <-------|------>|       |       |       |        Hello
            |       |<------|------>|       |        Hello
-           |======>|       |       |       |        ICMP (ping) request 1; src=10.1.1.1
-next_hop=10.1.1.2 |       |       |<------|------>|        Hello |       |======>|       |       |
-ICMP (ping) request 1; src=10.1.1.2 next_hop=10.1.1.3 |       |       |======>|       |        ICMP
-(ping) request 1; src=10.1.1.3 next_hop=10.1.1.4 |       |       |       |======>|        ICMP
-(ping) request 1; src=10.1.1.4 next_hop=10.1.1.5 |       |       |       |<======|        ICMP
-(ping) reply 1; src=10.1.1.5 next_hop=10.1.1.4 |       |       |<======|       |        ICMP (ping)
-reply 1; src=10.1.1.4 next_hop=10.1.1.3 |       |<======|       |       |        ICMP (ping) reply
-11; src=10.1.1.3 next_hop=10.1.1.2
-           |<======|       |       |       |        ICMP (ping) reply 1; src=10.1.1.2
-next_hop=10.1.1.1 |       |       |       |<------|------> Hello
+           |======>|       |       |       |        ICMP (ping) request 1; src=10.1.1.1 next_hop=10.1.1.2
+           |       |       |<------|------>|        Hello
+           |       |======>|       |       |        ICMP (ping) request 1; src=10.1.1.2 next_hop=10.1.1.3
+           |       |       |======>|       |        ICMP (ping) request 1; src=10.1.1.3 next_hop=10.1.1.4
+           |       |       |       |======>|        ICMP (ping) request 1; src=10.1.1.4 next_hop=10.1.1.5
+           |       |       |       |<======|        ICMP (ping) reply 1; src=10.1.1.5 next_hop=10.1.1.4
+           |       |       |<======|       |        ICMP (ping) reply 1; src=10.1.1.4 next_hop=10.1.1.3
+           |       |<======|       |       |        ICMP (ping) reply 11; src=10.1.1.3 next_hop=10.1.1.2
+           |<======|       |       |       |        ICMP (ping) reply 1; src=10.1.1.2 next_hop=10.1.1.1
+           |       |       |       |<------|------> Hello
            |<------|------>|       |       |        Hello
-    <------|------>|       |       |       |        Hello
+   <-------|------>|       |       |       |        Hello
            |       |       |<------|------>|        Hello
            |       |<------|------>|       |        Hello
-           |======>|       |       |       |        ICMP (ping) request 2; src=10.1.1.1
-next_hop=10.1.1.2 |       |======>|       |       |        ICMP (ping) request 2; src=10.1.1.2
-next_hop=10.1.1.3 |       |       |======>|       |        ICMP (ping) request 2; src=10.1.1.3
-next_hop=10.1.1.4 |       |       |       |======>|        ICMP (ping) request 2; src=10.1.1.4
-next_hop=10.1.1.5 |       |       |       |<======|        ICMP (ping) reply 2; src=10.1.1.5
-next_hop=10.1.1.4 |       |       |<======|       |        ICMP (ping) reply 2; src=10.1.1.4
-next_hop=10.1.1.3 |       |<======|       |       |        ICMP (ping) reply 2; src=10.1.1.3
-next_hop=10.1.1.2
-           |<======|       |       |       |        ICMP (ping) reply 2; src=10.1.1.2
-next_hop=10.1.1.1 |       |       |       |<------|------> Hello
-    <------|------>|       |       |       |        Hello
+           |======>|       |       |       |        ICMP (ping) request 2; src=10.1.1.1 next_hop=10.1.1.2
+           |       |======>|       |       |        ICMP (ping) request 2; src=10.1.1.2 next_hop=10.1.1.3
+           |       |       |======>|       |        ICMP (ping) request 2; src=10.1.1.3 next_hop=10.1.1.4
+           |       |       |       |======>|        ICMP (ping) request 2; src=10.1.1.4 next_hop=10.1.1.5
+           |       |       |       |<======|        ICMP (ping) reply 2; src=10.1.1.5 next_hop=10.1.1.4
+           |       |       |<======|       |        ICMP (ping) reply 2; src=10.1.1.4 next_hop=10.1.1.3
+           |       |<======|       |       |        ICMP (ping) reply 2; src=10.1.1.3 next_hop=10.1.1.2
+           |<======|       |       |       |        ICMP (ping) reply 2; src=10.1.1.2 next_hop=10.1.1.1
+           |       |       |       |<------|------> Hello
+   <-------|------>|       |       |       |        Hello
            |       |<------|------>|       |        Hello
            |<------|------>|       |       |        Hello
            |       |       |<------|------>|        Hello
-           |======>|       |       |       |        ICMP (ping) request 3; src=10.1.1.1
-next_hop=10.1.1.2 |       |======>|       |       |        ICMP (ping) request 3; src=10.1.1.2
-next_hop=10.1.1.3 |       |       |======>|       |        ICMP (ping) request 3; src=10.1.1.3
-next_hop=10.1.1.4 |       |       |       |======>|        ICMP (ping) request 3; src=10.1.1.4
-next_hop=10.1.1.5 |       |       |       |<======|        ICMP (ping) reply 3; src=10.1.1.5
-next_hop=10.1.1.4 |       |       |<======|       |        ICMP (ping) reply 3; src=10.1.1.4
-next_hop=10.1.1.3 |       |<======|       |       |        ICMP (ping) reply 3; src=10.1.1.3
-next_hop=10.1.1.2
-           |<======|       |       |       |        ICMP (ping) reply 3; src=10.1.1.2
-next_hop=10.1.1.1 |       |       |       |<------|------> Hello
-    <------|------>|       |       |       |        Hello
+           |======>|       |       |       |        ICMP (ping) request 3; src=10.1.1.1 next_hop=10.1.1.2
+           |       |======>|       |       |        ICMP (ping) request 3; src=10.1.1.2 next_hop=10.1.1.3
+           |       |       |======>|       |        ICMP (ping) request 3; src=10.1.1.3 next_hop=10.1.1.4
+           |       |       |       |======>|        ICMP (ping) request 3; src=10.1.1.4 next_hop=10.1.1.5
+           |       |       |       |<======|        ICMP (ping) reply 3; src=10.1.1.5 next_hop=10.1.1.4
+           |       |       |<======|       |        ICMP (ping) reply 3; src=10.1.1.4 next_hop=10.1.1.3
+           |       |<======|       |       |        ICMP (ping) reply 3; src=10.1.1.3 next_hop=10.1.1.2
+           |<======|       |       |       |        ICMP (ping) reply 3; src=10.1.1.2 next_hop=10.1.1.1
+           |       |       |       |<------|------> Hello
+   <-------|------>|       |       |       |        Hello
            |<------|-->    |       |       |        Hello   |
-           |       |    <--|-->    |       |        Hello   |Node 3 move away => nobody hear his
-packets and node 3 doesn't hear anything ! |       |       |    <--|------>|        Hello   |
-           |======>|       |       |       |        ICMP (ping) request 4; src=10.1.1.1
-next_hop=10.1.1.2 |       |==>    |       |       |        ICMP (ping) request 4; src=10.1.1.2
-next_hop=10.1.1.3.   7 retries.
-           |<======|       |       |       |        RERR (unreachable dst 10.1.1.3 & 10.1.1.5)
-src=10.1.1.2 |       |       |       |<------|------> Hello
-    <------|------>|       |       |       |        Hello
+           |       |    <--|-->    |       |        Hello   |Node 3 move away => nobody hear his packets and node 3 doesn't hear anything !
+           |       |       |    <--|------>|        Hello   |
+           |======>|       |       |       |        ICMP (ping) request 4; src=10.1.1.1 next_hop=10.1.1.2
+           |       |==>    |       |       |        ICMP (ping) request 4; src=10.1.1.2 next_hop=10.1.1.3.   7 retries.
+           |<======|       |       |       |        RERR (unreachable dst 10.1.1.3 & 10.1.1.5) src=10.1.1.2
+           |       |       |       |<------|------> Hello
+   <-------|------>|       |       |       |        Hello
            |<------|-->    |       |       |        Hello
            |       |    <--|-->    |       |        Hello
            |       |       |    <--|------>|        Hello
-    <------|------>|       |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, hop=0,
-ID=2, org_seqno=2) src = 10.1.1.1
-           |<------|-->    |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, hop=1,
-ID=2, org_seqno=2) src = 10.1.1.2 |       |       |       |<------|------> Hello |       |       |
-<--|------>|        Hello |       |    <--|-->    |       |        Hello
+   <-------|------>|       |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, hop=0, ID=2, org_seqno=2) src = 10.1.1.1
+           |<------|-->    |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, hop=1, ID=2, org_seqno=2) src = 10.1.1.2
+           |       |       |       |<------|------> Hello
+           |       |       |    <--|------>|        Hello
+           |       |    <--|-->    |       |        Hello
            |<------|-->    |       |       |        Hello
-    <------|------>|       |       |       |        Hello
-           |       |       |       |======>|        RERR (unreachable dst 10.1.1.1 & 10.1.1.3)
-src=10.1.1.4 |       |       |       |<------|------> Hello |       |       |    <--|------>| Hello
+   <-------|------>|       |       |       |        Hello
+           |       |       |       |======>|        RERR (unreachable dst 10.1.1.1 & 10.1.1.3) src=10.1.1.4
+           |       |       |       |<------|------> Hello
+           |       |       |    <--|------>|        Hello
            |       |    <--|-->    |       |        Hello
            |<------|-->    |       |       |        Hello
-    <------|------>|       |       |       |        Hello
+   <-------|------>|       |       |       |        Hello
            |       |       |       |<------|------> Hello
-    <------|------>|       |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, hop=0,
-ID=4, org_seqno=3) src = 10.1.1.1
-           |<------|-->    |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, hop=1,
-ID=4, org_seqno=3) src = 10.1.1.2
-
-..................................................................
- * \endverbatim
+   <-------|------>|       |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, hop=0, ID=4, org_seqno=3) src = 10.1.1.1
+           |<------|-->    |       |       |        RREQ (orig 10.1.1.1, dst 10.1.1.5, G=1, hop=1, ID=4, org_seqno=3) src = 10.1.1.2
+   .................................................
+   \endverbatim
  */
+//clang-format on
 class ChainRegressionTest : public TestCase
 {
   public:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/test/aodv-test-suite.cc ns-3.43/src/aodv/test/aodv-test-suite.cc
--- ns-3.42/src/aodv/test/aodv-test-suite.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/test/aodv-test-suite.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/test/bug-772.cc ns-3.43/src/aodv/test/bug-772.cc
--- ns-3.42/src/aodv/test/bug-772.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/test/bug-772.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
@@ -163,7 +152,7 @@
     NetDeviceContainer devices = wifi.Install(wifiPhy, wifiMac, *m_nodes);
 
     // Assign fixed stream numbers to wifi and channel random variables
-    streamsUsed += wifi.AssignStreams(devices, streamsUsed);
+    streamsUsed += WifiHelper::AssignStreams(devices, streamsUsed);
     // Assign 6 streams per device
     NS_TEST_ASSERT_MSG_EQ(streamsUsed, (devices.GetN() * 2), "Stream assignment mismatch");
     streamsUsed += wifiChannel.AssignStreams(chan, streamsUsed);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/test/bug-772.h ns-3.43/src/aodv/test/bug-772.h
--- ns-3.42/src/aodv/test/bug-772.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/test/bug-772.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/aodv/test/loopback.cc ns-3.43/src/aodv/test/loopback.cc
--- ns-3.42/src/aodv/test/loopback.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/aodv/test/loopback.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/doc/applications.h ns-3.43/src/applications/doc/applications.h
--- ns-3.42/src/applications/doc/applications.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/doc/applications.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/examples/three-gpp-http-example.cc ns-3.43/src/applications/examples/three-gpp-http-example.cc
--- ns-3.42/src/applications/examples/three-gpp-http-example.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/examples/three-gpp-http-example.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Lauri Sormunen <lauri.sormunen@magister.fi>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/bulk-send-helper.cc ns-3.43/src/applications/helper/bulk-send-helper.cc
--- ns-3.42/src/applications/helper/bulk-send-helper.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/bulk-send-helper.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Geoge Riley <riley@ece.gatech.edu>
  * Adapted from OnOffHelper by:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/bulk-send-helper.h ns-3.43/src/applications/helper/bulk-send-helper.h
--- ns-3.42/src/applications/helper/bulk-send-helper.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/bulk-send-helper.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Geoge Riley <riley@ece.gatech.edu>
  * Adapted from OnOffHelper by:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/on-off-helper.cc ns-3.43/src/applications/helper/on-off-helper.cc
--- ns-3.42/src/applications/helper/on-off-helper.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/on-off-helper.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/on-off-helper.h ns-3.43/src/applications/helper/on-off-helper.h
--- ns-3.42/src/applications/helper/on-off-helper.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/on-off-helper.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/packet-sink-helper.cc ns-3.43/src/applications/helper/packet-sink-helper.cc
--- ns-3.42/src/applications/helper/packet-sink-helper.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/packet-sink-helper.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/packet-sink-helper.h ns-3.43/src/applications/helper/packet-sink-helper.h
--- ns-3.42/src/applications/helper/packet-sink-helper.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/packet-sink-helper.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/three-gpp-http-helper.cc ns-3.43/src/applications/helper/three-gpp-http-helper.cc
--- ns-3.42/src/applications/helper/three-gpp-http-helper.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/three-gpp-http-helper.cc	2024-10-09 16:41:09.848655700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2013 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original work author (from packet-sink-helper.cc):
  * - Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/three-gpp-http-helper.h ns-3.43/src/applications/helper/three-gpp-http-helper.h
--- ns-3.42/src/applications/helper/three-gpp-http-helper.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/three-gpp-http-helper.h	2024-10-09 16:41:09.848655700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2013 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original work author (from packet-sink-helper.cc):
  *   - Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/udp-client-server-helper.cc ns-3.43/src/applications/helper/udp-client-server-helper.cc
--- ns-3.42/src/applications/helper/udp-client-server-helper.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/udp-client-server-helper.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/udp-client-server-helper.h ns-3.43/src/applications/helper/udp-client-server-helper.h
--- ns-3.42/src/applications/helper/udp-client-server-helper.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/udp-client-server-helper.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/udp-echo-helper.cc ns-3.43/src/applications/helper/udp-echo-helper.cc
--- ns-3.42/src/applications/helper/udp-echo-helper.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/udp-echo-helper.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/helper/udp-echo-helper.h ns-3.43/src/applications/helper/udp-echo-helper.h
--- ns-3.42/src/applications/helper/udp-echo-helper.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/helper/udp-echo-helper.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/application-packet-probe.cc ns-3.43/src/applications/model/application-packet-probe.cc
--- ns-3.42/src/applications/model/application-packet-probe.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/application-packet-probe.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/application-packet-probe.h ns-3.43/src/applications/model/application-packet-probe.h
--- ns-3.42/src/applications/model/application-packet-probe.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/application-packet-probe.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/bulk-send-application.cc ns-3.43/src/applications/model/bulk-send-application.cc
--- ns-3.42/src/applications/model/bulk-send-application.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/bulk-send-application.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Georgia Institute of Technology
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley <riley@ece.gatech.edu>
  */
@@ -28,6 +17,7 @@
 #include "ns3/simulator.h"
 #include "ns3/socket-factory.h"
 #include "ns3/socket.h"
+#include "ns3/tcp-socket-base.h"
 #include "ns3/tcp-socket-factory.h"
 #include "ns3/trace-source-accessor.h"
 #include "ns3/uinteger.h"
@@ -94,7 +84,12 @@
             .AddTraceSource("TxWithSeqTsSize",
                             "A new packet is created with SeqTsSizeHeader",
                             MakeTraceSourceAccessor(&BulkSendApplication::m_txTraceWithSeqTsSize),
-                            "ns3::PacketSink::SeqTsSizeCallback");
+                            "ns3::PacketSink::SeqTsSizeCallback")
+            .AddTraceSource("TcpRetransmission",
+                            "The TCP socket retransmitted a packet",
+                            MakeTraceSourceAccessor(&BulkSendApplication::m_retransmissionTrace),
+                            "ns3::TcpSocketBase::RetransmissionCallback");
+
     return tid;
 }
 
@@ -196,6 +191,13 @@
         m_socket->SetConnectCallback(MakeCallback(&BulkSendApplication::ConnectionSucceeded, this),
                                      MakeCallback(&BulkSendApplication::ConnectionFailed, this));
         m_socket->SetSendCallback(MakeCallback(&BulkSendApplication::DataSend, this));
+        Ptr<TcpSocketBase> tcpSocket = DynamicCast<TcpSocketBase>(m_socket);
+        if (tcpSocket)
+        {
+            tcpSocket->TraceConnectWithoutContext(
+                "Retransmission",
+                MakeCallback(&BulkSendApplication::PacketRetransmitted, this));
+        }
     }
     if (m_connected)
     {
@@ -342,4 +344,15 @@
     }
 }
 
+void
+BulkSendApplication::PacketRetransmitted(Ptr<const Packet> p,
+                                         const TcpHeader& header,
+                                         const Address& localAddr,
+                                         const Address& peerAddr,
+                                         Ptr<const TcpSocketBase> socket)
+{
+    NS_LOG_FUNCTION(this << p << header << localAddr << peerAddr << socket);
+    m_retransmissionTrace(p, header, localAddr, peerAddr, socket);
+}
+
 } // Namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/bulk-send-application.h ns-3.43/src/applications/model/bulk-send-application.h
--- ns-3.42/src/applications/model/bulk-send-application.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/bulk-send-application.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Georgia Institute of Technology
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley <riley@ece.gatech.edu>
  */
@@ -33,6 +22,8 @@
 
 class Address;
 class Socket;
+class TcpHeader;
+class TcpSocketBase;
 
 /**
  * \ingroup applications
@@ -137,6 +128,14 @@
     /// Traced Callback: sent packets
     TracedCallback<Ptr<const Packet>> m_txTrace;
 
+    /// Traced Callback: retransmitted packets
+    TracedCallback<Ptr<const Packet>,
+                   const TcpHeader&,
+                   const Address&,
+                   const Address&,
+                   Ptr<const TcpSocketBase>>
+        m_retransmissionTrace;
+
     /// Callback for tracing the packet Tx events, includes source, destination,  the packet sent,
     /// and header
     TracedCallback<Ptr<const Packet>, const Address&, const Address&, const SeqTsSizeHeader&>
@@ -162,6 +161,20 @@
      * \param unused actually unused
      */
     void DataSend(Ptr<Socket> socket, uint32_t unused);
+
+    /**
+     *  \brief Packet retransmitted (called by TcpSocketBase sockets via callback)
+     *  \param p the retransmitted packet
+     *  \param header the TCP header
+     *  \param localAddr the local address
+     *  \param peerAddr the peer address
+     *  \param socket the socket that retransmitted the packet
+     */
+    void PacketRetransmitted(Ptr<const Packet> p,
+                             const TcpHeader& header,
+                             const Address& localAddr,
+                             const Address& peerAddr,
+                             Ptr<const TcpSocketBase> socket);
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/onoff-application.cc ns-3.43/src/applications/model/onoff-application.cc
--- ns-3.42/src/applications/model/onoff-application.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/onoff-application.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: George F. Riley<riley@ece.gatech.edu>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/onoff-application.h ns-3.43/src/applications/model/onoff-application.h
--- ns-3.42/src/applications/model/onoff-application.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/onoff-application.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: George F. Riley<riley@ece.gatech.edu>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/packet-loss-counter.cc ns-3.43/src/applications/model/packet-loss-counter.cc
--- ns-3.42/src/applications/model/packet-loss-counter.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/packet-loss-counter.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDCAST
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Amine Ismail <amine.ismail@sophia.inria.fr>
  *                      <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/packet-loss-counter.h ns-3.43/src/applications/model/packet-loss-counter.h
--- ns-3.42/src/applications/model/packet-loss-counter.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/packet-loss-counter.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDCAST
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Amine Ismail <amine.ismail@sophia.inria.fr>
  *                      <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/packet-sink.cc ns-3.43/src/applications/model/packet-sink.cc
--- ns-3.42/src/applications/model/packet-sink.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/packet-sink.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Tom Henderson (tomhend@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/packet-sink.h ns-3.43/src/applications/model/packet-sink.h
--- ns-3.42/src/applications/model/packet-sink.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/packet-sink.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Tom Henderson (tomhend@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/seq-ts-echo-header.cc ns-3.43/src/applications/model/seq-ts-echo-header.cc
--- ns-3.42/src/applications/model/seq-ts-echo-header.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/seq-ts-echo-header.cc	2024-10-09 16:41:09.848655700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 INRIA
  * Copyright (c) 2016 Universita' di Firenze (added echo fields)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/seq-ts-echo-header.h ns-3.43/src/applications/model/seq-ts-echo-header.h
--- ns-3.42/src/applications/model/seq-ts-echo-header.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/seq-ts-echo-header.h	2024-10-09 16:41:09.848655700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 INRIA
  * Copyright (c) 2016 Universita' di Firenze (added echo fields)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/seq-ts-header.cc ns-3.43/src/applications/model/seq-ts-header.cc
--- ns-3.42/src/applications/model/seq-ts-header.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/seq-ts-header.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/seq-ts-header.h ns-3.43/src/applications/model/seq-ts-header.h
--- ns-3.42/src/applications/model/seq-ts-header.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/seq-ts-header.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/seq-ts-size-header.cc ns-3.43/src/applications/model/seq-ts-size-header.cc
--- ns-3.42/src/applications/model/seq-ts-size-header.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/seq-ts-size-header.cc	2024-10-09 16:41:09.848655700 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *                    (added timestamp and size fields)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/seq-ts-size-header.h ns-3.43/src/applications/model/seq-ts-size-header.h
--- ns-3.42/src/applications/model/seq-ts-size-header.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/seq-ts-size-header.h	2024-10-09 16:41:09.848655700 -0700
@@ -3,18 +3,7 @@
  *   Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *                      (added timestamp and size fields)
  *
- *   This program is free software; you can redistribute it and/or modify
- *   it under the terms of the GNU General Public License version 2 as
- *   published by the Free Software Foundation;
- *
- *   This program is distributed in the hope that it will be useful,
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *   GNU General Public License for more details.
- *
- *   You should have received a copy of the GNU General Public License
- *   along with this program; if not, write to the Free Software
- *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *   SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef SEQ_TS_SIZE_HEADER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/three-gpp-http-client.cc ns-3.43/src/applications/model/three-gpp-http-client.cc
--- ns-3.42/src/applications/model/three-gpp-http-client.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/three-gpp-http-client.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/three-gpp-http-client.h ns-3.43/src/applications/model/three-gpp-http-client.h
--- ns-3.42/src/applications/model/three-gpp-http-client.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/three-gpp-http-client.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/three-gpp-http-header.cc ns-3.43/src/applications/model/three-gpp-http-header.cc
--- ns-3.42/src/applications/model/three-gpp-http-header.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/three-gpp-http-header.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/three-gpp-http-header.h ns-3.43/src/applications/model/three-gpp-http-header.h
--- ns-3.42/src/applications/model/three-gpp-http-header.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/three-gpp-http-header.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/three-gpp-http-server.cc ns-3.43/src/applications/model/three-gpp-http-server.cc
--- ns-3.42/src/applications/model/three-gpp-http-server.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/three-gpp-http-server.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/three-gpp-http-server.h ns-3.43/src/applications/model/three-gpp-http-server.h
--- ns-3.42/src/applications/model/three-gpp-http-server.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/three-gpp-http-server.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/three-gpp-http-variables.cc ns-3.43/src/applications/model/three-gpp-http-variables.cc
--- ns-3.42/src/applications/model/three-gpp-http-variables.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/three-gpp-http-variables.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/three-gpp-http-variables.h ns-3.43/src/applications/model/three-gpp-http-variables.h
--- ns-3.42/src/applications/model/three-gpp-http-variables.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/three-gpp-http-variables.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-client.cc ns-3.43/src/applications/model/udp-client.cc
--- ns-3.42/src/applications/model/udp-client.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-client.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDCAST
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Amine Ismail <amine.ismail@sophia.inria.fr>
  *                      <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-client.h ns-3.43/src/applications/model/udp-client.h
--- ns-3.42/src/applications/model/udp-client.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-client.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDCAST
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Amine Ismail <amine.ismail@sophia.inria.fr>
  *                      <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-echo-client.cc ns-3.43/src/applications/model/udp-echo-client.cc
--- ns-3.42/src/applications/model/udp-echo-client.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-echo-client.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 #include "udp-echo-client.h"
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-echo-client.h ns-3.43/src/applications/model/udp-echo-client.h
--- ns-3.42/src/applications/model/udp-echo-client.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-echo-client.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef UDP_ECHO_CLIENT_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-echo-server.cc ns-3.43/src/applications/model/udp-echo-server.cc
--- ns-3.42/src/applications/model/udp-echo-server.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-echo-server.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "udp-echo-server.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-echo-server.h ns-3.43/src/applications/model/udp-echo-server.h
--- ns-3.42/src/applications/model/udp-echo-server.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-echo-server.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef UDP_ECHO_SERVER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-server.cc ns-3.43/src/applications/model/udp-server.cc
--- ns-3.42/src/applications/model/udp-server.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-server.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008,2009 INRIA, UDCAST
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Amine Ismail <amine.ismail@sophia.inria.fr>
  *                      <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-server.h ns-3.43/src/applications/model/udp-server.h
--- ns-3.42/src/applications/model/udp-server.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-server.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDCAST
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Amine Ismail <amine.ismail@sophia.inria.fr>
  *                      <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-trace-client.cc ns-3.43/src/applications/model/udp-trace-client.cc
--- ns-3.42/src/applications/model/udp-trace-client.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-trace-client.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/model/udp-trace-client.h ns-3.43/src/applications/model/udp-trace-client.h
--- ns-3.42/src/applications/model/udp-trace-client.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/model/udp-trace-client.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/test/bulk-send-application-test-suite.cc ns-3.43/src/applications/test/bulk-send-application-test-suite.cc
--- ns-3.42/src/applications/test/bulk-send-application-test-suite.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/test/bulk-send-application-test-suite.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Tom Henderson (tomh@tomh.org)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/test/three-gpp-http-client-server-test.cc ns-3.43/src/applications/test/three-gpp-http-client-server-test.cc
--- ns-3.42/src/applications/test/three-gpp-http-client-server-test.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/test/three-gpp-http-client-server-test.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/applications/test/udp-client-server-test.cc ns-3.43/src/applications/test/udp-client-server-test.cc
--- ns-3.42/src/applications/test/udp-client-server-test.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/applications/test/udp-client-server-test.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/bridge/examples/csma-bridge.cc ns-3.43/src/bridge/examples/csma-bridge.cc
--- ns-3.42/src/bridge/examples/csma-bridge.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/bridge/examples/csma-bridge.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/bridge/examples/csma-bridge-one-hop.cc ns-3.43/src/bridge/examples/csma-bridge-one-hop.cc
--- ns-3.42/src/bridge/examples/csma-bridge-one-hop.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/bridge/examples/csma-bridge-one-hop.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/bridge/examples/csma-bridge.py ns-3.43/src/bridge/examples/csma-bridge.py
--- ns-3.42/src/bridge/examples/csma-bridge.py	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/bridge/examples/csma-bridge.py	2024-10-09 16:41:09.848655700 -0700
@@ -1,16 +1,5 @@
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 
 # Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/bridge/helper/bridge-helper.cc ns-3.43/src/bridge/helper/bridge-helper.cc
--- ns-3.42/src/bridge/helper/bridge-helper.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/bridge/helper/bridge-helper.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "bridge-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/bridge/helper/bridge-helper.h ns-3.43/src/bridge/helper/bridge-helper.h
--- ns-3.42/src/bridge/helper/bridge-helper.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/bridge/helper/bridge-helper.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Gustavo Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/bridge/model/bridge-channel.cc ns-3.43/src/bridge/model/bridge-channel.cc
--- ns-3.42/src/bridge/model/bridge-channel.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/bridge/model/bridge-channel.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/bridge/model/bridge-channel.h ns-3.43/src/bridge/model/bridge-channel.h
--- ns-3.42/src/bridge/model/bridge-channel.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/bridge/model/bridge-channel.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/bridge/model/bridge-net-device.cc ns-3.43/src/bridge/model/bridge-net-device.cc
--- ns-3.42/src/bridge/model/bridge-net-device.cc	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/bridge/model/bridge-net-device.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/bridge/model/bridge-net-device.h ns-3.43/src/bridge/model/bridge-net-device.h
--- ns-3.42/src/bridge/model/bridge-net-device.h	2024-05-29 15:29:46.920073000 -0700
+++ ns-3.43/src/bridge/model/bridge-net-device.h	2024-10-09 16:41:09.848655700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/brite/examples/brite-generic-example.cc ns-3.43/src/brite/examples/brite-generic-example.cc
--- ns-3.42/src/brite/examples/brite-generic-example.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/brite/examples/brite-generic-example.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 The Georgia Institute of Technology
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Brian Swenson <bswenson3@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/brite/examples/brite-generic-example.py ns-3.43/src/brite/examples/brite-generic-example.py
--- ns-3.42/src/brite/examples/brite-generic-example.py	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/brite/examples/brite-generic-example.py	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 #
 # Copyright (c) 2012 The Georgia Institute of Technology
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Brian Swenson <bswenson3@gatech.edu>
 # Modified by: Gabriel Ferreira <gabrielcarvfer@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/brite/examples/brite-MPI-example.cc ns-3.43/src/brite/examples/brite-MPI-example.cc
--- ns-3.42/src/brite/examples/brite-MPI-example.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/brite/examples/brite-MPI-example.cc	2024-10-09 16:41:09.848655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 The Georgia Institute of Technology
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Brian Swenson <bswenson3@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/brite/helper/brite-topology-helper.cc ns-3.43/src/brite/helper/brite-topology-helper.cc
--- ns-3.42/src/brite/helper/brite-topology-helper.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/brite/helper/brite-topology-helper.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/brite/helper/brite-topology-helper.h ns-3.43/src/brite/helper/brite-topology-helper.h
--- ns-3.42/src/brite/helper/brite-topology-helper.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/brite/helper/brite-topology-helper.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/brite/test/brite-test-topology.cc ns-3.43/src/brite/test/brite-test-topology.cc
--- ns-3.42/src/brite/test/brite-test-topology.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/brite/test/brite-test-topology.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/examples/buildings-pathloss-profiler.cc ns-3.43/src/buildings/examples/buildings-pathloss-profiler.cc
--- ns-3.42/src/buildings/examples/buildings-pathloss-profiler.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/examples/buildings-pathloss-profiler.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/examples/outdoor-group-mobility-animate.sh ns-3.43/src/buildings/examples/outdoor-group-mobility-animate.sh
--- ns-3.42/src/buildings/examples/outdoor-group-mobility-animate.sh	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/examples/outdoor-group-mobility-animate.sh	2024-10-09 16:41:09.852655600 -0700
@@ -3,18 +3,7 @@
 # Copyright (c) 2019, University of Padova, Dep. of Information Engineering, SIGNET lab
 # Copyright (c) 2021, University of Washington: animation extensions
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Authors: Michele Polese <michele.polese@gmail.com>
 #          Tom Henderson <tomhend@uw.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/examples/outdoor-group-mobility-example.cc ns-3.43/src/buildings/examples/outdoor-group-mobility-example.cc
--- ns-3.42/src/buildings/examples/outdoor-group-mobility-example.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/examples/outdoor-group-mobility-example.cc	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2020 Institute for the Wireless Internet of Things, Northeastern University,
  * Boston, MA Copyright (c) 2021, University of Washington: refactor for hierarchical model
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Michele Polese <michele.polese@gmail.com>
  * Heavily edited by Tom Henderson to use HierarchicalMobilityModel
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/examples/outdoor-random-walk-example-animate.sh ns-3.43/src/buildings/examples/outdoor-random-walk-example-animate.sh
--- ns-3.42/src/buildings/examples/outdoor-random-walk-example-animate.sh	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/examples/outdoor-random-walk-example-animate.sh	2024-10-09 16:41:09.852655600 -0700
@@ -3,18 +3,7 @@
 # Copyright (c) 2019, University of Padova, Dep. of Information Engineering, SIGNET lab
 # Copyright (c) 2021, University of Washington: animation extensions
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Authors: Michele Polese <michele.polese@gmail.com>
 #          Tom Henderson <tomhend@uw.edu> (animation extensions)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/examples/outdoor-random-walk-example.cc ns-3.43/src/buildings/examples/outdoor-random-walk-example.cc
--- ns-3.42/src/buildings/examples/outdoor-random-walk-example.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/examples/outdoor-random-walk-example.cc	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2019, University of Padova, Dep. of Information Engineering, SIGNET lab
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es> for the code adapted from the lena-dual-stripe.cc example
  * Author: Michele Polese <michele.polese@gmail.com> for this version
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/examples/outdoor-random-walk-example.sh ns-3.43/src/buildings/examples/outdoor-random-walk-example.sh
--- ns-3.42/src/buildings/examples/outdoor-random-walk-example.sh	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/examples/outdoor-random-walk-example.sh	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
 
 # Copyright (c) 2019, University of Padova, Dep. of Information Engineering, SIGNET lab
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Michele Polese <michele.polese@gmail.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/helper/building-allocator.cc ns-3.43/src/buildings/helper/building-allocator.cc
--- ns-3.42/src/buildings/helper/building-allocator.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/helper/building-allocator.cc	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 INRIA
  * Copyright (C) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Nicola Baldo <nbaldo@cttc.es> (took position-allocator and turned it into
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/helper/building-allocator.h ns-3.43/src/buildings/helper/building-allocator.h
--- ns-3.42/src/buildings/helper/building-allocator.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/helper/building-allocator.h	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 INRIA
  * Copyright (C) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Nicola Baldo <nbaldo@cttc.es> (took position-allocator and turned it into
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/helper/building-container.cc ns-3.43/src/buildings/helper/building-container.cc
--- ns-3.42/src/buildings/helper/building-container.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/helper/building-container.cc	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (original node-container.cc)
  *         Nicola Baldo (wrote building-container.cc based on node-container.cc)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/helper/building-container.h ns-3.43/src/buildings/helper/building-container.h
--- ns-3.42/src/buildings/helper/building-container.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/helper/building-container.h	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (original node-container.h)
  *         Nicola Baldo (wrote building-container.h based on node-container.h)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/helper/building-position-allocator.cc ns-3.43/src/buildings/helper/building-position-allocator.cc
--- ns-3.42/src/buildings/helper/building-position-allocator.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/helper/building-position-allocator.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (C)  2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  *         Michele Polese <michele.polese@gmail.com> for the OutdoorPositionAllocator class
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/helper/building-position-allocator.h ns-3.43/src/buildings/helper/building-position-allocator.h
--- ns-3.42/src/buildings/helper/building-position-allocator.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/helper/building-position-allocator.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (C) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  *         Michele Polese <michele.polese@gmail.com> for the OutdoorPositionAllocator class
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/helper/buildings-helper.cc ns-3.43/src/buildings/helper/buildings-helper.cc
--- ns-3.42/src/buildings/helper/buildings-helper.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/helper/buildings-helper.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/helper/buildings-helper.h ns-3.43/src/buildings/helper/buildings-helper.h
--- ns-3.42/src/buildings/helper/buildings-helper.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/helper/buildings-helper.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/building.cc ns-3.43/src/buildings/model/building.cc
--- ns-3.42/src/buildings/model/building.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/building.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Marco Miozzo  <marco.miozzo@cttc.es>
  *          Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/building.h ns-3.43/src/buildings/model/building.h
--- ns-3.42/src/buildings/model/building.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/building.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/building-list.cc ns-3.43/src/buildings/model/building-list.cc
--- ns-3.42/src/buildings/model/building-list.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/building-list.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jaume.nin@cttc,cat>
  * Based on BuildingList implementation by Mathieu Lacage  <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/building-list.h ns-3.43/src/buildings/model/building-list.h
--- ns-3.42/src/buildings/model/building-list.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/building-list.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jaume.nin@cttc,cat>
  * Based on NodeList implementation by Mathieu Lacage  <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/buildings-channel-condition-model.cc ns-3.43/src/buildings/model/buildings-channel-condition-model.cc
--- ns-3.42/src/buildings/model/buildings-channel-condition-model.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/buildings-channel-condition-model.cc	2024-10-09 16:41:09.852655600 -0700
@@ -4,18 +4,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "buildings-channel-condition-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/buildings-channel-condition-model.h ns-3.43/src/buildings/model/buildings-channel-condition-model.h
--- ns-3.42/src/buildings/model/buildings-channel-condition-model.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/buildings-channel-condition-model.h	2024-10-09 16:41:09.852655600 -0700
@@ -4,18 +4,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef BUILDINGS_CHANNEL_CONDITION_MODEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/buildings-propagation-loss-model.cc ns-3.43/src/buildings/model/buildings-propagation-loss-model.cc
--- ns-3.42/src/buildings/model/buildings-propagation-loss-model.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/buildings-propagation-loss-model.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/buildings-propagation-loss-model.h ns-3.43/src/buildings/model/buildings-propagation-loss-model.h
--- ns-3.42/src/buildings/model/buildings-propagation-loss-model.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/buildings-propagation-loss-model.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/hybrid-buildings-propagation-loss-model.cc ns-3.43/src/buildings/model/hybrid-buildings-propagation-loss-model.cc
--- ns-3.42/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/hybrid-buildings-propagation-loss-model.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/hybrid-buildings-propagation-loss-model.h ns-3.43/src/buildings/model/hybrid-buildings-propagation-loss-model.h
--- ns-3.42/src/buildings/model/hybrid-buildings-propagation-loss-model.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/hybrid-buildings-propagation-loss-model.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
@@ -39,7 +28,7 @@
  * \ingroup buildings
  * \ingroup propagation
  *
- *  \brief The HybridBuildingsPropagationModel is a compound of different models able to evaluate
+ * \brief The HybridBuildingsPropagationModel is a compound of different models able to evaluate
  * the pathloss from 200 to 2600 MHz, in different environments and with buildings (i.e., indoor and
  * outdoor communications).
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/itu-r-1238-propagation-loss-model.cc ns-3.43/src/buildings/model/itu-r-1238-propagation-loss-model.cc
--- ns-3.42/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/itu-r-1238-propagation-loss-model.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/itu-r-1238-propagation-loss-model.h ns-3.43/src/buildings/model/itu-r-1238-propagation-loss-model.h
--- ns-3.42/src/buildings/model/itu-r-1238-propagation-loss-model.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/itu-r-1238-propagation-loss-model.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/mobility-building-info.cc ns-3.43/src/buildings/model/mobility-building-info.cc
--- ns-3.42/src/buildings/model/mobility-building-info.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/mobility-building-info.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/mobility-building-info.h ns-3.43/src/buildings/model/mobility-building-info.h
--- ns-3.42/src/buildings/model/mobility-building-info.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/mobility-building-info.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/oh-buildings-propagation-loss-model.cc ns-3.43/src/buildings/model/oh-buildings-propagation-loss-model.cc
--- ns-3.42/src/buildings/model/oh-buildings-propagation-loss-model.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/oh-buildings-propagation-loss-model.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/oh-buildings-propagation-loss-model.h ns-3.43/src/buildings/model/oh-buildings-propagation-loss-model.h
--- ns-3.42/src/buildings/model/oh-buildings-propagation-loss-model.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/oh-buildings-propagation-loss-model.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/random-walk-2d-outdoor-mobility-model.cc ns-3.43/src/buildings/model/random-walk-2d-outdoor-mobility-model.cc
--- ns-3.42/src/buildings/model/random-walk-2d-outdoor-mobility-model.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/random-walk-2d-outdoor-mobility-model.cc	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006,2007 INRIA
  * Copyright (c) 2019 University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Michele Polese <michele.polese@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/random-walk-2d-outdoor-mobility-model.h ns-3.43/src/buildings/model/random-walk-2d-outdoor-mobility-model.h
--- ns-3.42/src/buildings/model/random-walk-2d-outdoor-mobility-model.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/random-walk-2d-outdoor-mobility-model.h	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006,2007 INRIA
  * Copyright (c) 2019 University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Michele Polese <michele.polese@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/three-gpp-v2v-channel-condition-model.cc ns-3.43/src/buildings/model/three-gpp-v2v-channel-condition-model.cc
--- ns-3.42/src/buildings/model/three-gpp-v2v-channel-condition-model.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/three-gpp-v2v-channel-condition-model.cc	2024-10-09 16:41:09.852655600 -0700
@@ -3,18 +3,7 @@
  * University of Padova
  * Copyright (c) 2020 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "three-gpp-v2v-channel-condition-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/model/three-gpp-v2v-channel-condition-model.h ns-3.43/src/buildings/model/three-gpp-v2v-channel-condition-model.h
--- ns-3.42/src/buildings/model/three-gpp-v2v-channel-condition-model.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/model/three-gpp-v2v-channel-condition-model.h	2024-10-09 16:41:09.852655600 -0700
@@ -3,18 +3,7 @@
  * University of Padova
  * Copyright (c) 2020 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef THREE_GPP_V2V_CHANNEL_CONDITION_MODEL
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/building-position-allocator-test.cc ns-3.43/src/buildings/test/building-position-allocator-test.cc
--- ns-3.42/src/buildings/test/building-position-allocator-test.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/building-position-allocator-test.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/buildings-channel-condition-model-test.cc ns-3.43/src/buildings/test/buildings-channel-condition-model-test.cc
--- ns-3.42/src/buildings/test/buildings-channel-condition-model-test.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/buildings-channel-condition-model-test.cc	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/buildings-helper-test.cc ns-3.43/src/buildings/test/buildings-helper-test.cc
--- ns-3.42/src/buildings/test/buildings-helper-test.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/buildings-helper-test.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/buildings-pathloss-test.cc ns-3.43/src/buildings/test/buildings-pathloss-test.cc
--- ns-3.42/src/buildings/test/buildings-pathloss-test.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/buildings-pathloss-test.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/buildings-pathloss-test.h ns-3.43/src/buildings/test/buildings-pathloss-test.h
--- ns-3.42/src/buildings/test/buildings-pathloss-test.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/buildings-pathloss-test.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/buildings-penetration-loss-pathloss-test.cc ns-3.43/src/buildings/test/buildings-penetration-loss-pathloss-test.cc
--- ns-3.42/src/buildings/test/buildings-penetration-loss-pathloss-test.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/buildings-penetration-loss-pathloss-test.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/buildings-shadowing-test.cc ns-3.43/src/buildings/test/buildings-shadowing-test.cc
--- ns-3.42/src/buildings/test/buildings-shadowing-test.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/buildings-shadowing-test.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/buildings-shadowing-test.h ns-3.43/src/buildings/test/buildings-shadowing-test.h
--- ns-3.42/src/buildings/test/buildings-shadowing-test.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/buildings-shadowing-test.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/outdoor-random-walk-test.cc ns-3.43/src/buildings/test/outdoor-random-walk-test.cc
--- ns-3.42/src/buildings/test/outdoor-random-walk-test.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/outdoor-random-walk-test.cc	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/buildings/test/three-gpp-v2v-channel-condition-model-test.cc ns-3.43/src/buildings/test/three-gpp-v2v-channel-condition-model-test.cc
--- ns-3.42/src/buildings/test/three-gpp-v2v-channel-condition-model-test.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/buildings/test/three-gpp-v2v-channel-condition-model-test.cc	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2020 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2020 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-defines.cc ns-3.43/src/click/examples/nsclick-defines.cc
--- ns-3.42/src/click/examples/nsclick-defines.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-defines.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sascha Jopen <jopen@cs.uni-bonn.de>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-lan-single-interface.click ns-3.43/src/click/examples/nsclick-lan-single-interface.click
--- ns-3.42/src/click/examples/nsclick-lan-single-interface.click	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-lan-single-interface.click	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
 //
 // Copyright (c) 2011, Deutsche Telekom Laboratories
 //
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License version
-// 2 as published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Ruben Merz <ruben@net.t-labs.tu-berlin.de>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-raw-wlan.cc ns-3.43/src/click/examples/nsclick-raw-wlan.cc
--- ns-3.42/src/click/examples/nsclick-raw-wlan.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-raw-wlan.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Lalith Suresh <suresh.lalith@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-routing.cc ns-3.43/src/click/examples/nsclick-routing.cc
--- ns-3.42/src/click/examples/nsclick-routing.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-routing.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Lalith Suresh <suresh.lalith@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-routing-node0.click ns-3.43/src/click/examples/nsclick-routing-node0.click
--- ns-3.42/src/click/examples/nsclick-routing-node0.click	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-routing-node0.click	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
 //
 // Copyright (c) 2011, Deutsche Telekom Laboratories
 //
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License version
-// 2 as published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Ruben Merz <ruben@net.t-labs.tu-berlin.de>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-routing-node2.click ns-3.43/src/click/examples/nsclick-routing-node2.click
--- ns-3.42/src/click/examples/nsclick-routing-node2.click	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-routing-node2.click	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
 //
 // Copyright (c) 2011, Deutsche Telekom Laboratories
 //
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License version
-// 2 as published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Ruben Merz <ruben@net.t-labs.tu-berlin.de>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-simple-lan.cc ns-3.43/src/click/examples/nsclick-simple-lan.cc
--- ns-3.42/src/click/examples/nsclick-simple-lan.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-simple-lan.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Lalith Suresh <suresh.lalith@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-simple-lan.py ns-3.43/src/click/examples/nsclick-simple-lan.py
--- ns-3.42/src/click/examples/nsclick-simple-lan.py	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-simple-lan.py	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Authors: Lalith Suresh <suresh.lalith@gmail.com>
 # Modified by: Gabriel Ferreira <gabrielcarvfer@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-udp-client-server-csma.cc ns-3.43/src/click/examples/nsclick-udp-client-server-csma.cc
--- ns-3.42/src/click/examples/nsclick-udp-client-server-csma.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-udp-client-server-csma.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Adaptation of examples/udp/udp-client-server.cc for
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-udp-client-server-wifi.cc ns-3.43/src/click/examples/nsclick-udp-client-server-wifi.cc
--- ns-3.42/src/click/examples/nsclick-udp-client-server-wifi.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-udp-client-server-wifi.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Adaptation of examples/udp/udp-client-server.cc for
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-wifi-single-interface.click ns-3.43/src/click/examples/nsclick-wifi-single-interface.click
--- ns-3.42/src/click/examples/nsclick-wifi-single-interface.click	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-wifi-single-interface.click	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
 //
 // Copyright (c) 2011, Deutsche Telekom Laboratories
 //
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License version
-// 2 as published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Ruben Merz <ruben@net.t-labs.tu-berlin.de>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/examples/nsclick-wifi-single-interface-promisc.click ns-3.43/src/click/examples/nsclick-wifi-single-interface-promisc.click
--- ns-3.42/src/click/examples/nsclick-wifi-single-interface-promisc.click	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/examples/nsclick-wifi-single-interface-promisc.click	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
 //
 // Copyright (c) 2011, Deutsche Telekom Laboratories
 //
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License version
-// 2 as published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Ruben Merz <ruben@net.t-labs.tu-berlin.de>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/helper/click-internet-stack-helper.cc ns-3.43/src/click/helper/click-internet-stack-helper.cc
--- ns-3.42/src/click/helper/click-internet-stack-helper.cc	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/helper/click-internet-stack-helper.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Faker Moatamri <faker.moatamri@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/helper/click-internet-stack-helper.h ns-3.43/src/click/helper/click-internet-stack-helper.h
--- ns-3.42/src/click/helper/click-internet-stack-helper.h	2024-05-29 15:29:46.924073000 -0700
+++ ns-3.43/src/click/helper/click-internet-stack-helper.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Lalith Suresh  <suresh.lalith@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/model/ipv4-click-routing.cc ns-3.43/src/click/model/ipv4-click-routing.cc
--- ns-3.42/src/click/model/ipv4-click-routing.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/click/model/ipv4-click-routing.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Lalith Suresh
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Lalith Suresh <suresh.lalith@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/model/ipv4-click-routing.h ns-3.43/src/click/model/ipv4-click-routing.h
--- ns-3.42/src/click/model/ipv4-click-routing.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/click/model/ipv4-click-routing.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Lalith Suresh
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Lalith Suresh <suresh.lalith@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/model/ipv4-l3-click-protocol.cc ns-3.43/src/click/model/ipv4-l3-click-protocol.cc
--- ns-3.42/src/click/model/ipv4-l3-click-protocol.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/click/model/ipv4-l3-click-protocol.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: George F. Riley <riley@ece.gatech.edu>
 // Author: Lalith Suresh <suresh.lalith@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/model/ipv4-l3-click-protocol.h ns-3.43/src/click/model/ipv4-l3-click-protocol.h
--- ns-3.42/src/click/model/ipv4-l3-click-protocol.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/click/model/ipv4-l3-click-protocol.h	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: George F. Riley <riley@ece.gatech.edu>
 // Author: Lalith Suresh <suresh.lalith@gmail.com>
@@ -268,8 +257,10 @@
     void SetIpForward(bool forward) override;
     bool GetIpForward() const override;
 
+    /** \copydoc Ipv4::SetWeakEsModel */
     NS_DEPRECATED_3_41("Use SetStrongEndSystemModel instead")
     void SetWeakEsModel(bool model) override;
+    /** \copydoc Ipv4::GetWeakEsModel */
     NS_DEPRECATED_3_41("Use GetStrongEndSystemModel instead")
     bool GetWeakEsModel() const override;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/test/ipv4-click-routing-test.cc ns-3.43/src/click/test/ipv4-click-routing-test.cc
--- ns-3.42/src/click/test/ipv4-click-routing-test.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/click/test/ipv4-click-routing-test.cc	2024-10-09 16:41:09.852655600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Lalith Suresh
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Lalith Suresh <suresh.lalith@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/click/test/nsclick-test-lan-single-interface.click ns-3.43/src/click/test/nsclick-test-lan-single-interface.click
--- ns-3.42/src/click/test/nsclick-test-lan-single-interface.click	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/click/test/nsclick-test-lan-single-interface.click	2024-10-09 16:41:09.852655600 -0700
@@ -2,18 +2,7 @@
 //
 // Copyright (c) 2011, Deutsche Telekom Laboratories
 //
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License version
-// 2 as published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Ruben Merz <ruben@net.t-labs.tu-berlin.de>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/CMakeLists.txt ns-3.43/src/CMakeLists.txt
--- ns-3.42/src/CMakeLists.txt	2024-05-29 15:29:46.916073000 -0700
+++ ns-3.43/src/CMakeLists.txt	2024-10-09 16:41:09.844655800 -0700
@@ -53,71 +53,124 @@
   endif()
 endforeach()
 
-# Prevents link errors due to symbol collisions if the same library is linked
-# multiple times
-list(REMOVE_DUPLICATES ns3-external-libs)
-
-# Build the lib-ns3-static (ns3.x-static-buildtype.a/.lib) with all sublibraries
-if(${NS3_STATIC})
-  add_library(
-    ${lib-ns3-static} STATIC ${PROJECT_SOURCE_DIR}/build-support/empty.cc
-                             "${lib-ns3-static-objs}"
-  )
-
-  # Replace shared library suffix and check if static version exists before
-  # linking
-  set(ns3-external-static-libs)
-  foreach(sharedlib ${ns3-external-libs})
-    if(NOT (${sharedlib} MATCHES ".so"))
-      list(APPEND ns3-external-static-libs ${sharedlib})
-      continue()
-    endif()
+if(NOT ${XCODE})
 
-    string(REPLACE ".so" ".a" output ${sharedlib})
-    if(EXISTS ${output})
-      list(APPEND ns3-external-static-libs ${output})
-    else()
-      message(
-        FATAL_ERROR "Static library version of ${sharedlib} was not found"
+  # Create object libraries from shared libraries to be reused by static and
+  # monolib builds
+  set(lib-ns3-static-objs)
+  if(${NS3_STATIC} OR ${NS3_MONOLIB})
+    foreach(module ${ns3-libs} ${ns3-contrib-libs})
+      # Retrieve source files from shared library target
+      get_target_property(target_sources ${module} SOURCES)
+
+      # Prepend module path to source files
+      set(FOLDER "src")
+      if(${module} IN_LIST ns3-contrib-libs)
+        set(FOLDER "contrib")
+      endif()
+      list(TRANSFORM target_sources
+           PREPEND ${PROJECT_SOURCE_DIR}/${FOLDER}/${module}/
       )
-    endif()
-  endforeach()
 
-  # Required by some static libraries, such as sqlite, for some odd reason
-  if(LINUX)
-    list(APPEND ns3-external-static-libs -ldl)
-  endif()
+      # Create object library from shared library
+      add_library(${module}-obj OBJECT ${target_sources})
 
-  target_link_libraries(
-    ${lib-ns3-static} ${STATIC_LINK_FLAGS} ${LIB_AS_NEEDED_PRE_STATIC}
-    ${ns3-external-static-libs} ${LIB_AS_NEEDED_POST_STATIC}
-  )
-  if(${NS3_CLANG_TIMETRACE})
-    add_dependencies(timeTraceReport ${lib-ns3-static})
+      # Reuse PCH
+      if(${PRECOMPILE_HEADERS_ENABLED})
+        target_precompile_headers(${module}-obj REUSE_FROM stdlib_pch)
+      endif()
+
+      # Retrieve properties from shared library target and apply to object
+      foreach(property INCLUDE_DIRECTORIES LINK_DIRECTORIES
+                       INTERFACE_COMPILE_DEFINITIONS
+      )
+        get_target_property(target_definitions ${module} ${property})
+        if("${target_definitions}" MATCHES "target_definitions-NOTFOUND")
+          continue()
+        endif()
+        if(${property} STREQUAL "INTERFACE_COMPILE_DEFINITIONS")
+          set(property COMPILE_DEFINITIONS)
+        endif()
+
+        set_target_properties(
+          ${module}-obj PROPERTIES ${property} "${target_definitions}"
+        )
+      endforeach()
+
+      # Append to the list of object files
+      list(APPEND lib-ns3-static-objs $<TARGET_OBJECTS:${module}-obj>)
+    endforeach()
   endif()
-endif()
 
-# Build the lib-ns3 (ns3.x-monolib-buildtype.dll/.dylib/.so) with all
-# sublibraries
-if(${NS3_MONOLIB})
-  add_library(
-    ${lib-ns3-monolib} SHARED ${PROJECT_SOURCE_DIR}/build-support/empty.cc
-                              "${lib-ns3-static-objs}"
-  )
-  set_target_properties(
-    ${lib-ns3-monolib}
-    PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE
-               RUNTIME_OUTPUT_DIRECTORY
-               ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} # set output directory for DLLs
-  )
-  target_link_libraries(
-    ${lib-ns3-monolib} ${LIB_AS_NEEDED_PRE} ${ns3-external-libs}
-    ${LIB_AS_NEEDED_POST}
-  )
-  if(${NS3_CLANG_TIMETRACE})
-    add_dependencies(timeTraceReport ${lib-ns3-monolib})
-  endif()
-endif()
+  # Prevents link errors due to symbol collisions if the same library is linked
+  # multiple times
+  list(REMOVE_DUPLICATES ns3-external-libs)
+
+  # Build the lib-ns3-static (ns3.x-static-buildtype.a/.lib) with all
+  # sublibraries
+  if(${NS3_STATIC})
+    add_library(
+      ${lib-ns3-static} STATIC ${PROJECT_SOURCE_DIR}/build-support/empty.cc
+                               "${lib-ns3-static-objs}"
+    )
+
+    # Replace shared library suffix and check if static version exists before
+    # linking
+    set(ns3-external-static-libs)
+    foreach(sharedlib ${ns3-external-libs})
+      if(NOT (${sharedlib} MATCHES ".so"))
+        list(APPEND ns3-external-static-libs ${sharedlib})
+        continue()
+      endif()
+
+      string(REPLACE ".so" ".a" output ${sharedlib})
+      if(EXISTS ${output})
+        list(APPEND ns3-external-static-libs ${output})
+      else()
+        message(
+          FATAL_ERROR "Static library version of ${sharedlib} was not found"
+        )
+      endif()
+    endforeach()
+
+    # Required by some static libraries, such as sqlite, for some odd reason
+    if(LINUX)
+      list(APPEND ns3-external-static-libs -ldl)
+    endif()
+
+    target_link_libraries(
+      ${lib-ns3-static} ${STATIC_LINK_FLAGS} ${LIB_AS_NEEDED_PRE_STATIC}
+      ${ns3-external-static-libs} ${LIB_AS_NEEDED_POST_STATIC}
+    )
+    if(${NS3_CLANG_TIMETRACE})
+      add_dependencies(timeTraceReport ${lib-ns3-static})
+    endif()
+  endif() # NS3_STATIC
+
+  # Build the lib-ns3 (ns3.x-monolib-buildtype.dll/.dylib/.so) with all
+  # sublibraries
+  if(${NS3_MONOLIB})
+    add_library(
+      ${lib-ns3-monolib} SHARED ${PROJECT_SOURCE_DIR}/build-support/empty.cc
+                                "${lib-ns3-static-objs}"
+    )
+    set_target_properties(
+      ${lib-ns3-monolib}
+      PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE
+                 RUNTIME_OUTPUT_DIRECTORY
+                 ${CMAKE_LIBRARY_OUTPUT_DIRECTORY} # set output directory for
+                                                   # DLLs
+    )
+    target_link_libraries(
+      ${lib-ns3-monolib} ${LIB_AS_NEEDED_PRE} ${ns3-external-libs}
+      ${LIB_AS_NEEDED_POST}
+    )
+    if(${NS3_CLANG_TIMETRACE})
+      add_dependencies(timeTraceReport ${lib-ns3-monolib})
+    endif()
+  endif() # NS3_MONOLIB
+
+endif() # NOT XCODE
 
 if(${NS3_FETCH_OPTIONAL_COMPONENTS})
   add_dependency_to_optional_modules_dependencies()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/attribute-default-iterator.cc ns-3.43/src/config-store/model/attribute-default-iterator.cc
--- ns-3.42/src/config-store/model/attribute-default-iterator.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/attribute-default-iterator.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/attribute-default-iterator.h ns-3.43/src/config-store/model/attribute-default-iterator.h
--- ns-3.42/src/config-store/model/attribute-default-iterator.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/attribute-default-iterator.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/attribute-iterator.cc ns-3.43/src/config-store/model/attribute-iterator.cc
--- ns-3.42/src/config-store/model/attribute-iterator.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/attribute-iterator.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -231,8 +220,13 @@
             if (ptrChecker != nullptr)
             {
                 NS_LOG_DEBUG("pointer attribute " << info.name);
+                if (info.supportLevel == TypeId::DEPRECATED ||
+                    info.supportLevel == TypeId::OBSOLETE)
+                {
+                    continue;
+                }
                 PointerValue ptr;
-                object->GetAttribute(info.name, ptr);
+                object->GetAttribute(info.name, ptr, true);
                 Ptr<Object> tmp = ptr.Get<Object>();
                 if (tmp)
                 {
@@ -251,7 +245,7 @@
             {
                 NS_LOG_DEBUG("ObjectPtrContainer attribute " << info.name);
                 ObjectPtrContainerValue vector;
-                object->GetAttribute(info.name, vector);
+                object->GetAttribute(info.name, vector, true);
                 StartVisitArrayAttribute(object, info.name, vector);
                 ObjectPtrContainerValue::Iterator it;
                 for (it = vector.Begin(); it != vector.End(); ++it)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/attribute-iterator.h ns-3.43/src/config-store/model/attribute-iterator.h
--- ns-3.42/src/config-store/model/attribute-iterator.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/attribute-iterator.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/config-store.cc ns-3.43/src/config-store/model/config-store.cc
--- ns-3.42/src/config-store/model/config-store.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/config-store.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
@@ -74,11 +63,15 @@
                 EnumValue(ConfigStore::RAW_TEXT),
                 MakeEnumAccessor<FileFormat>(&ConfigStore::SetFileFormat),
                 MakeEnumChecker(ConfigStore::RAW_TEXT, "RawText", ConfigStore::XML, "Xml"))
-            .AddAttribute("SaveDeprecated",
-                          "Save DEPRECATED attributes",
-                          BooleanValue(true),
-                          MakeBooleanAccessor(&ConfigStore::SetSaveDeprecated),
-                          MakeBooleanChecker());
+            .AddAttribute(
+                "SaveDeprecated",
+                "Save DEPRECATED attributes",
+                BooleanValue(true),
+                MakeBooleanAccessor(&ConfigStore::SetSaveDeprecated),
+                MakeBooleanChecker(),
+                TypeId::OBSOLETE,
+                "OBSOLETE since ns-3.43 as it is no longer needed; deprecated attributes are saved "
+                "only if their value differs from their respective original initial value");
     return tid;
 }
 
@@ -140,8 +133,6 @@
         }
     }
     m_file->SetFilename(m_filename);
-    m_file->SetSaveDeprecated(m_saveDeprecated);
-
     NS_LOG_FUNCTION(this << ": format: " << m_fileFormat << ", mode: " << m_mode
                          << ", file name: " << m_filename);
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/config-store.h ns-3.43/src/config-store/model/config-store.h
--- ns-3.42/src/config-store/model/config-store.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/config-store.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/display-functions.cc ns-3.43/src/config-store/model/display-functions.cc
--- ns-3.42/src/config-store/model/display-functions.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/display-functions.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/display-functions.h ns-3.43/src/config-store/model/display-functions.h
--- ns-3.42/src/config-store/model/display-functions.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/display-functions.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/file-config.cc ns-3.43/src/config-store/model/file-config.cc
--- ns-3.42/src/config-store/model/file-config.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/file-config.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
@@ -26,12 +15,6 @@
 {
 }
 
-void
-FileConfig::SetSaveDeprecated(bool saveDeprecated)
-{
-    m_saveDeprecated = saveDeprecated;
-}
-
 NoneFileConfig::NoneFileConfig()
 {
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/file-config.h ns-3.43/src/config-store/model/file-config.h
--- ns-3.42/src/config-store/model/file-config.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/file-config.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
@@ -40,11 +29,6 @@
      */
     virtual void SetFilename(std::string filename) = 0;
     /**
-     * Set if to save deprecated attributes
-     * \param saveDeprecated the deprecated attributes save policy
-     */
-    void SetSaveDeprecated(bool saveDeprecated);
-    /**
      * Load or save the default values
      */
     virtual void Default() = 0;
@@ -56,9 +40,6 @@
      * Load or save the attributes values
      */
     virtual void Attributes() = 0;
-
-  protected:
-    bool m_saveDeprecated; ///< save deprecated attributes
 };
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/gtk-config-store.cc ns-3.43/src/config-store/model/gtk-config-store.cc
--- ns-3.42/src/config-store/model/gtk-config-store.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/gtk-config-store.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/gtk-config-store.h ns-3.43/src/config-store/model/gtk-config-store.h
--- ns-3.42/src/config-store/model/gtk-config-store.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/gtk-config-store.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/model-node-creator.cc ns-3.43/src/config-store/model/model-node-creator.cc
--- ns-3.42/src/config-store/model/model-node-creator.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/model-node-creator.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/model-node-creator.h ns-3.43/src/config-store/model/model-node-creator.h
--- ns-3.42/src/config-store/model/model-node-creator.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/model-node-creator.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/model-typeid-creator.cc ns-3.43/src/config-store/model/model-typeid-creator.cc
--- ns-3.42/src/config-store/model/model-typeid-creator.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/model-typeid-creator.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/model-typeid-creator.h ns-3.43/src/config-store/model/model-typeid-creator.h
--- ns-3.42/src/config-store/model/model-typeid-creator.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/model-typeid-creator.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- *  This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Moatamri Faker <faker.moatamri@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/raw-text-config.cc ns-3.43/src/config-store/model/raw-text-config.cc
--- ns-3.42/src/config-store/model/raw-text-config.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/raw-text-config.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
@@ -75,11 +64,6 @@
             m_os = os;
         }
 
-        void SetSaveDeprecated(bool saveDeprecated)
-        {
-            m_saveDeprecated = saveDeprecated;
-        }
-
       private:
         void StartVisitTypeId(std::string name) override
         {
@@ -91,39 +75,49 @@
             NS_LOG_DEBUG("Saving " << m_typeId << "::" << name);
             TypeId tid = TypeId::LookupByName(m_typeId);
             ns3::TypeId::SupportLevel supportLevel = TypeId::SupportLevel::SUPPORTED;
+            std::string originalInitialValue;
+            std::string valueTypeName;
             for (std::size_t i = 0; i < tid.GetAttributeN(); i++)
             {
                 TypeId::AttributeInformation tmp = tid.GetAttribute(i);
                 if (tmp.name == name)
                 {
                     supportLevel = tmp.supportLevel;
+                    originalInitialValue = tmp.originalInitialValue->SerializeToString(tmp.checker);
+                    valueTypeName = tmp.checker->GetValueTypeName();
                     break;
                 }
             }
-            if (supportLevel == TypeId::SupportLevel::OBSOLETE)
+            if (valueTypeName == "ns3::CallbackValue")
             {
                 NS_LOG_WARN("Global attribute " << m_typeId << "::" << name
-                                                << " was not saved because it is OBSOLETE");
+                                                << " was not saved because it is a CallbackValue");
+                return;
             }
-            else if (supportLevel == TypeId::SupportLevel::DEPRECATED && !m_saveDeprecated)
+            if (supportLevel == TypeId::SupportLevel::OBSOLETE)
             {
                 NS_LOG_WARN("Global attribute " << m_typeId << "::" << name
-                                                << " was not saved because it is DEPRECATED");
+                                                << " was not saved because it is OBSOLETE");
+                return;
             }
-            else
+            if (supportLevel == TypeId::SupportLevel::DEPRECATED &&
+                defaultValue == originalInitialValue)
             {
-                *m_os << "default " << m_typeId << "::" << name << " \"" << defaultValue << "\""
-                      << std::endl;
+                NS_LOG_WARN("Global attribute "
+                            << m_typeId << "::" << name
+                            << " was not saved because it is DEPRECATED and its value has not "
+                               "changed from the original initial value");
+                return;
             }
+            *m_os << "default " << m_typeId << "::" << name << " \"" << defaultValue << "\""
+                  << std::endl;
         }
 
         std::string m_typeId;
         std::ostream* m_os;
-        bool m_saveDeprecated;
     };
 
     RawTextDefaultIterator iterator = RawTextDefaultIterator(m_os);
-    iterator.SetSaveDeprecated(m_saveDeprecated);
     iterator.Iterate();
 }
 
@@ -153,52 +147,52 @@
         {
         }
 
-        void SetSaveDeprecated(bool saveDeprecated)
-        {
-            m_saveDeprecated = saveDeprecated;
-        }
-
       private:
         void DoVisitAttribute(Ptr<Object> object, std::string name) override
         {
             StringValue str;
-
-            ns3::TypeId::SupportLevel supportLevel = TypeId::SupportLevel::SUPPORTED;
             TypeId tid = object->GetInstanceTypeId();
 
-            for (std::size_t i = 0; i < tid.GetAttributeN(); i++)
+            auto [found, inTid, attr] = TypeId::FindAttribute(tid, name);
+
+            if (found)
             {
-                TypeId::AttributeInformation tmp = tid.GetAttribute(i);
-                if (tmp.name == name)
+                if (attr.checker && attr.checker->GetValueTypeName() == "ns3::CallbackValue")
                 {
-                    supportLevel = tmp.supportLevel;
-                    break;
+                    NS_LOG_WARN("Attribute " << GetCurrentPath()
+                                             << " was not saved because it is a CallbackValue");
+                    return;
+                }
+                auto supportLevel = attr.supportLevel;
+                if (supportLevel == TypeId::SupportLevel::OBSOLETE)
+                {
+                    NS_LOG_WARN("Attribute " << GetCurrentPath()
+                                             << " was not saved because it is OBSOLETE");
+                    return;
+                }
+
+                std::string originalInitialValue =
+                    attr.originalInitialValue->SerializeToString(attr.checker);
+                object->GetAttribute(name, str, true);
+
+                if (supportLevel == TypeId::SupportLevel::DEPRECATED &&
+                    str.Get() == originalInitialValue)
+                {
+                    NS_LOG_WARN("Attribute "
+                                << GetCurrentPath()
+                                << " was not saved because it is DEPRECATED and its value has not "
+                                   "changed from the original initial value");
+                    return;
                 }
-            }
-            if (supportLevel == TypeId::SupportLevel::OBSOLETE)
-            {
-                NS_LOG_WARN("Attribute " << GetCurrentPath()
-                                         << " was not saved because it is OBSOLETE");
-            }
-            else if (supportLevel == TypeId::SupportLevel::DEPRECATED && !m_saveDeprecated)
-            {
-                NS_LOG_WARN("Attribute " << GetCurrentPath()
-                                         << " was not saved because it is DEPRECATED");
-            }
-            else
-            {
-                object->GetAttribute(name, str);
                 NS_LOG_DEBUG("Saving " << GetCurrentPath());
                 *m_os << "value " << GetCurrentPath() << " \"" << str.Get() << "\"" << std::endl;
             }
         }
 
         std::ostream* m_os;
-        bool m_saveDeprecated;
     };
 
     RawTextAttributeIterator iter = RawTextAttributeIterator(m_os);
-    iter.SetSaveDeprecated(m_saveDeprecated);
     iter.Iterate();
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/raw-text-config.h ns-3.43/src/config-store/model/raw-text-config.h
--- ns-3.42/src/config-store/model/raw-text-config.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/raw-text-config.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/xml-config.cc ns-3.43/src/config-store/model/xml-config.cc
--- ns-3.42/src/config-store/model/xml-config.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/xml-config.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
@@ -115,11 +104,6 @@
             m_writer = writer;
         }
 
-        void SetSaveDeprecated(bool saveDeprecated)
-        {
-            m_saveDeprecated = saveDeprecated;
-        }
-
       private:
         void StartVisitTypeId(std::string name) override
         {
@@ -130,25 +114,38 @@
         {
             TypeId tid = TypeId::LookupByName(m_typeid);
             ns3::TypeId::SupportLevel supportLevel = TypeId::SupportLevel::SUPPORTED;
+            std::string originalInitialValue;
+            std::string valueTypeName;
             for (std::size_t i = 0; i < tid.GetAttributeN(); i++)
             {
                 TypeId::AttributeInformation tmp = tid.GetAttribute(i);
                 if (tmp.name == name)
                 {
                     supportLevel = tmp.supportLevel;
+                    originalInitialValue = tmp.originalInitialValue->SerializeToString(tmp.checker);
+                    valueTypeName = tmp.checker->GetValueTypeName();
                     break;
                 }
             }
+            if (valueTypeName == "ns3::CallbackValue")
+            {
+                NS_LOG_WARN("Global attribute " << m_typeid << "::" << name
+                                                << " was not saved because it is a CallbackValue");
+                return;
+            }
             if (supportLevel == TypeId::SupportLevel::OBSOLETE)
             {
                 NS_LOG_WARN("Global attribute " << m_typeid << "::" << name
                                                 << " was not saved because it is OBSOLETE");
                 return;
             }
-            else if (supportLevel == TypeId::SupportLevel::DEPRECATED && !m_saveDeprecated)
+            if (supportLevel == TypeId::SupportLevel::DEPRECATED &&
+                defaultValue == originalInitialValue)
             {
-                NS_LOG_WARN("Global attribute " << m_typeid << "::" << name
-                                                << " was not saved because it is DEPRECATED");
+                NS_LOG_WARN("Global attribute "
+                            << m_typeid << "::" << name
+                            << " was not saved because it is DEPRECATED and its value has not "
+                               "changed from the original initial value");
                 return;
             }
 
@@ -180,11 +177,9 @@
 
         xmlTextWriterPtr m_writer;
         std::string m_typeid;
-        bool m_saveDeprecated;
     };
 
     XmlDefaultIterator iterator = XmlDefaultIterator(m_writer);
-    iterator.SetSaveDeprecated(m_saveDeprecated);
     iterator.Iterate();
 }
 
@@ -199,39 +194,45 @@
         {
         }
 
-        void SetSaveDeprecated(bool saveDeprecated)
-        {
-            m_saveDeprecated = saveDeprecated;
-        }
-
       private:
         void DoVisitAttribute(Ptr<Object> object, std::string name) override
         {
+            StringValue str;
             TypeId tid = object->GetInstanceTypeId();
-            ns3::TypeId::SupportLevel supportLevel = TypeId::SupportLevel::SUPPORTED;
-            for (std::size_t i = 0; i < tid.GetAttributeN(); i++)
+
+            auto [found, inTid, attr] = TypeId::FindAttribute(tid, name);
+
+            if (found)
             {
-                TypeId::AttributeInformation tmp = tid.GetAttribute(i);
-                if (tmp.name == name)
+                if (attr.checker && attr.checker->GetValueTypeName() == "ns3::CallbackValue")
                 {
-                    supportLevel = tmp.supportLevel;
-                    break;
+                    NS_LOG_WARN("Attribute " << GetCurrentPath()
+                                             << " was not saved because it is a CallbackValue");
+                    return;
+                }
+                auto supportLevel = attr.supportLevel;
+                if (supportLevel == TypeId::SupportLevel::OBSOLETE)
+                {
+                    NS_LOG_WARN("Attribute " << GetCurrentPath()
+                                             << " was not saved because it is OBSOLETE");
+                    return;
+                }
+
+                std::string originalInitialValue =
+                    attr.originalInitialValue->SerializeToString(attr.checker);
+                object->GetAttribute(name, str, true);
+
+                if (supportLevel == TypeId::SupportLevel::DEPRECATED &&
+                    str.Get() == originalInitialValue)
+                {
+                    NS_LOG_WARN("Attribute "
+                                << GetCurrentPath()
+                                << " was not saved because it is DEPRECATED and its value has not "
+                                   "changed from the original initial value");
+                    return;
                 }
             }
-            if (supportLevel == TypeId::SupportLevel::OBSOLETE)
-            {
-                NS_LOG_WARN("Attribute " << GetCurrentPath()
-                                         << " was not saved because it is OBSOLETE");
-                return;
-            }
-            else if (supportLevel == TypeId::SupportLevel::DEPRECATED && !m_saveDeprecated)
-            {
-                NS_LOG_WARN("Attribute " << GetCurrentPath()
-                                         << " was not saved because it is DEPRECATED");
-                return;
-            }
-            StringValue str;
-            object->GetAttribute(name, str);
+
             int rc;
             rc = xmlTextWriterStartElement(m_writer, BAD_CAST "value");
             if (rc < 0)
@@ -259,11 +260,9 @@
         }
 
         xmlTextWriterPtr m_writer;
-        bool m_saveDeprecated;
     };
 
     XmlTextAttributeIterator iter = XmlTextAttributeIterator(m_writer);
-    iter.SetSaveDeprecated(m_saveDeprecated);
     iter.Iterate();
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/config-store/model/xml-config.h ns-3.43/src/config-store/model/xml-config.h
--- ns-3.42/src/config-store/model/xml-config.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/config-store/model/xml-config.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/CMakeLists.txt ns-3.43/src/core/CMakeLists.txt
--- ns-3.42/src/core/CMakeLists.txt	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/CMakeLists.txt	2024-10-09 16:41:09.856655800 -0700
@@ -1,6 +1,18 @@
 # Set lib core link dependencies
 set(libraries_to_link)
 
+set(config_headers
+    ${CMAKE_HEADER_OUTPUT_DIRECTORY}/config-store-config.h
+    ${CMAKE_HEADER_OUTPUT_DIRECTORY}/core-config.h
+)
+if(${ENABLE_BUILD_VERSION})
+  list(
+    APPEND
+    config_headers
+    ${CMAKE_HEADER_OUTPUT_DIRECTORY}/version-defines.h
+  )
+endif()
+
 set(gsl_test_sources)
 if(${GSL_FOUND})
   set(libraries_to_link
@@ -183,10 +195,12 @@
     model/realtime-simulator-impl.cc
     model/wall-clock-synchronizer.cc
     model/matrix-array.cc
+    model/demangle.cc
 )
 
 # Define core lib headers
 set(header_files
+    ${config_headers}
     ${int64x64_headers}
     ${example_as_test_headers}
     ${embedded_version_headers}
@@ -211,6 +225,7 @@
     model/config.h
     model/default-deleter.h
     model/default-simulator-impl.h
+    model/demangle.h
     model/deprecated.h
     model/des-metrics.h
     model/double.h
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/doc/core.h ns-3.43/src/core/doc/core.h
--- ns-3.42/src/core/doc/core.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/doc/core.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Peter D. Barnes, Jr.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Tom Henderson <tomh@tomh.org>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/doc/environment-variables.h ns-3.43/src/core/doc/environment-variables.h
--- ns-3.42/src/core/doc/environment-variables.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/doc/environment-variables.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/assert-example.cc ns-3.43/src/core/examples/assert-example.cc
--- ns-3.42/src/core/examples/assert-example.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/assert-example.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/build-version-example.cc ns-3.43/src/core/examples/build-version-example.cc
--- ns-3.42/src/core/examples/build-version-example.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/build-version-example.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/command-line-example.cc ns-3.43/src/core/examples/command-line-example.cc
--- ns-3.42/src/core/examples/command-line-example.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/command-line-example.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/empirical-random-variable-example.cc ns-3.43/src/core/examples/empirical-random-variable-example.cc
--- ns-3.42/src/core/examples/empirical-random-variable-example.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/empirical-random-variable-example.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/fatal-example.cc ns-3.43/src/core/examples/fatal-example.cc
--- ns-3.42/src/core/examples/fatal-example.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/fatal-example.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/hash-example.cc ns-3.43/src/core/examples/hash-example.cc
--- ns-3.42/src/core/examples/hash-example.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/hash-example.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/core-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/length-example.cc ns-3.43/src/core/examples/length-example.cc
--- ns-3.42/src/core/examples/length-example.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/length-example.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathew Bielejeski <bielejeski1@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/log-example.cc ns-3.43/src/core/examples/log-example.cc
--- ns-3.42/src/core/examples/log-example.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/log-example.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/main-callback.cc ns-3.43/src/core/examples/main-callback.cc
--- ns-3.42/src/core/examples/main-callback.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/main-callback.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/main-ptr.cc ns-3.43/src/core/examples/main-ptr.cc
--- ns-3.42/src/core/examples/main-ptr.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/main-ptr.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/main-random-variable-stream.cc ns-3.43/src/core/examples/main-random-variable-stream.cc
--- ns-3.42/src/core/examples/main-random-variable-stream.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/main-random-variable-stream.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Timo Bingmann
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Timo Bingmann <timo.bingmann@student.kit.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/main-test-sync.cc ns-3.43/src/core/examples/main-test-sync.cc
--- ns-3.42/src/core/examples/main-test-sync.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/main-test-sync.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/command-line.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/sample-log-time-format.cc ns-3.43/src/core/examples/sample-log-time-format.cc
--- ns-3.42/src/core/examples/sample-log-time-format.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/sample-log-time-format.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/sample-random-variable.cc ns-3.43/src/core/examples/sample-random-variable.cc
--- ns-3.42/src/core/examples/sample-random-variable.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/sample-random-variable.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 #include "ns3/command-line.h"
 #include "ns3/nstime.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/sample-random-variable-stream.cc ns-3.43/src/core/examples/sample-random-variable-stream.cc
--- ns-3.42/src/core/examples/sample-random-variable-stream.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/sample-random-variable-stream.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 #include "ns3/command-line.h"
 #include "ns3/nstime.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/sample-rng-plot.py ns-3.43/src/core/examples/sample-rng-plot.py
--- ns-3.42/src/core/examples/sample-rng-plot.py	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/sample-rng-plot.py	2024-10-09 16:41:09.856655800 -0700
@@ -1,16 +1,5 @@
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 
 ## @file
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/sample-show-progress.cc ns-3.43/src/core/examples/sample-show-progress.cc
--- ns-3.42/src/core/examples/sample-show-progress.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/sample-show-progress.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro <gjc@inescporto.pt>
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/sample-simulator.cc ns-3.43/src/core/examples/sample-simulator.cc
--- ns-3.42/src/core/examples/sample-simulator.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/sample-simulator.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/sample-simulator.py ns-3.43/src/core/examples/sample-simulator.py
--- ns-3.42/src/core/examples/sample-simulator.py	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/sample-simulator.py	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 #
 # Copyright (c) 2010 INRIA
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
 #
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/system-path-examples.cc ns-3.43/src/core/examples/system-path-examples.cc
--- ns-3.42/src/core/examples/system-path-examples.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/system-path-examples.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/examples/test-string-value-formatting.cc ns-3.43/src/core/examples/test-string-value-formatting.cc
--- ns-3.42/src/core/examples/test-string-value-formatting.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/examples/test-string-value-formatting.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Tom Henderson
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/core-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/helper/csv-reader.cc ns-3.43/src/core/helper/csv-reader.cc
--- ns-3.42/src/core/helper/csv-reader.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/helper/csv-reader.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathew Bielejeski <bielejeski1@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/helper/csv-reader.h ns-3.43/src/core/helper/csv-reader.h
--- ns-3.42/src/core/helper/csv-reader.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/helper/csv-reader.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathew Bielejeski <bielejeski1@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/helper/event-garbage-collector.cc ns-3.43/src/core/helper/event-garbage-collector.cc
--- ns-3.42/src/core/helper/event-garbage-collector.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/helper/event-garbage-collector.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/helper/event-garbage-collector.h ns-3.43/src/core/helper/event-garbage-collector.h
--- ns-3.42/src/core/helper/event-garbage-collector.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/helper/event-garbage-collector.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/helper/random-variable-stream-helper.cc ns-3.43/src/core/helper/random-variable-stream-helper.cc
--- ns-3.42/src/core/helper/random-variable-stream-helper.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/helper/random-variable-stream-helper.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "random-variable-stream-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/helper/random-variable-stream-helper.h ns-3.43/src/core/helper/random-variable-stream-helper.h
--- ns-3.42/src/core/helper/random-variable-stream-helper.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/helper/random-variable-stream-helper.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef RANDOM_VARIABLE_STREAM_HELPER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/abort.h ns-3.43/src/core/model/abort.h
--- ns-3.42/src/core/model/abort.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/abort.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA, 2010 NICTA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Original author unknown
  *          Quincy Tse <quincy.tse@nicta.com.au>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/ascii-file.cc ns-3.43/src/core/model/ascii-file.cc
--- ns-3.42/src/core/model/ascii-file.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/ascii-file.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/ascii-file.h ns-3.43/src/core/model/ascii-file.h
--- ns-3.42/src/core/model/ascii-file.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/ascii-file.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/ascii-test.h ns-3.43/src/core/model/ascii-test.h
--- ns-3.42/src/core/model/ascii-test.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/ascii-test.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/assert.h ns-3.43/src/core/model/assert.h
--- ns-3.42/src/core/model/assert.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/assert.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA, 2010 NICTA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *         Quincy Tse <quincy.tse@nicta.com.au>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/attribute-accessor-helper.h ns-3.43/src/core/model/attribute-accessor-helper.h
--- ns-3.42/src/core/model/attribute-accessor-helper.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/attribute-accessor-helper.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -117,7 +106,7 @@
  *  Implementation of the templates declared above.
  ***************************************************************/
 
-#include "type-traits.h"
+#include <type_traits>
 
 namespace ns3
 {
@@ -133,7 +122,7 @@
 struct AccessorTrait
 {
     /** The non-const, non reference type. */
-    typedef typename TypeTraits<typename TypeTraits<T>::ReferencedType>::NonConstType Result;
+    using Result = std::remove_cvref_t<T>;
 };
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/attribute.cc ns-3.43/src/core/model/attribute.cc
--- ns-3.42/src/core/model/attribute.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/attribute.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/attribute-construction-list.cc ns-3.43/src/core/model/attribute-construction-list.cc
--- ns-3.42/src/core/model/attribute-construction-list.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/attribute-construction-list.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/attribute-construction-list.h ns-3.43/src/core/model/attribute-construction-list.h
--- ns-3.42/src/core/model/attribute-construction-list.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/attribute-construction-list.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/attribute-container.h ns-3.43/src/core/model/attribute-container.h
--- ns-3.42/src/core/model/attribute-container.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/attribute-container.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Caliola Engineering, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jared Dulmage <jared.dulmage@caliola.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/attribute.h ns-3.43/src/core/model/attribute.h
--- ns-3.42/src/core/model/attribute.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/attribute.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/attribute-helper.h ns-3.43/src/core/model/attribute-helper.h
--- ns-3.42/src/core/model/attribute-helper.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/attribute-helper.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -204,7 +193,7 @@
     class name##Value : public AttributeValue                                                      \
     {                                                                                              \
       public:                                                                                      \
-        name##Value();                                                                             \
+        name##Value() = default;                                                                   \
         name##Value(const type& value);                                                            \
         void Set(const type& value);                                                               \
         type Get() const;                                                                          \
@@ -292,10 +281,6 @@
  * Typically invoked in the source file
  */
 #define ATTRIBUTE_VALUE_IMPLEMENT_WITH_NAME(type, name)                                            \
-    name##Value::name##Value()                                                                     \
-        : m_value()                                                                                \
-    {                                                                                              \
-    }                                                                                              \
     name##Value::name##Value(const type& value)                                                    \
         : m_value(value)                                                                           \
     {                                                                                              \
@@ -321,6 +306,11 @@
     bool name##Value::DeserializeFromString(std::string value,                                     \
                                             Ptr<const AttributeChecker> checker)                   \
     {                                                                                              \
+        if (value.empty())                                                                         \
+        {                                                                                          \
+            m_value = type();                                                                      \
+            return true;                                                                           \
+        }                                                                                          \
         std::istringstream iss;                                                                    \
         iss.str(value);                                                                            \
         iss >> m_value;                                                                            \
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/boolean.cc ns-3.43/src/core/model/boolean.cc
--- ns-3.42/src/core/model/boolean.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/boolean.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/boolean.h ns-3.43/src/core/model/boolean.h
--- ns-3.42/src/core/model/boolean.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/boolean.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/breakpoint.cc ns-3.43/src/core/model/breakpoint.cc
--- ns-3.42/src/core/model/breakpoint.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/breakpoint.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA, INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Gustavo Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/breakpoint.h ns-3.43/src/core/model/breakpoint.h
--- ns-3.42/src/core/model/breakpoint.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/breakpoint.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INESC Porto, INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro <gjc@inescporto.pt>
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/build-profile.h ns-3.43/src/core/model/build-profile.h
--- ns-3.42/src/core/model/build-profile.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/build-profile.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 LLNL
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/cairo-wideint.c ns-3.43/src/core/model/cairo-wideint.c
--- ns-3.42/src/core/model/cairo-wideint.c	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/cairo-wideint.c	2024-10-09 16:41:09.856655800 -0700
@@ -1,3 +1,6 @@
+// NOLINTBEGIN
+// clang-format off
+
 /* cairo - a vector graphics library with display and print output
  *
  * Copyright © 2004 Keith Packard
@@ -30,9 +33,6 @@
  * Code changes for ns-3 from upstream are marked with `//PDB'
  */
 
-// NOLINTBEGIN
-// clang-format off
-
 #include "cairo-wideint-private.h"
 
 #include <climits>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/cairo-wideint-private.h ns-3.43/src/core/model/cairo-wideint-private.h
--- ns-3.42/src/core/model/cairo-wideint-private.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/cairo-wideint-private.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,3 +1,6 @@
+// NOLINTBEGIN
+// clang-format off
+
 /* cairo - a vector graphics library with display and print output
  *
  * Copyright © 2004 Keith Packard
@@ -29,9 +32,6 @@
  *
  */
 
-// NOLINTBEGIN
-// clang-format off
-
 #ifndef CAIRO_WIDEINT_H
 #define CAIRO_WIDEINT_H
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/calendar-scheduler.cc ns-3.43/src/core/model/calendar-scheduler.cc
--- ns-3.42/src/core/model/calendar-scheduler.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/calendar-scheduler.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Alexander Krotov <krotov@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/calendar-scheduler.h ns-3.43/src/core/model/calendar-scheduler.h
--- ns-3.42/src/core/model/calendar-scheduler.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/calendar-scheduler.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Alexander Krotov <krotov@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/callback.cc ns-3.43/src/core/model/callback.cc
--- ns-3.42/src/core/model/callback.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/callback.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -88,67 +77,3 @@
 ATTRIBUTE_CHECKER_IMPLEMENT(Callback);
 
 } // namespace ns3
-
-#if (__GNUC__ >= 3)
-
-#include <cstdlib>
-#include <cxxabi.h>
-
-namespace ns3
-{
-
-std::string
-CallbackImplBase::Demangle(const std::string& mangled)
-{
-    NS_LOG_FUNCTION(mangled);
-
-    int status;
-    char* demangled = abi::__cxa_demangle(mangled.c_str(), nullptr, nullptr, &status);
-
-    std::string ret;
-    if (status == 0)
-    {
-        NS_ASSERT(demangled);
-        ret = demangled;
-    }
-    else if (status == -1)
-    {
-        NS_LOG_UNCOND("Callback demangling failed: Memory allocation failure occurred.");
-        ret = mangled;
-    }
-    else if (status == -2)
-    {
-        NS_LOG_UNCOND("Callback demangling failed: Mangled name is not a valid under the C++ ABI "
-                      "mangling rules.");
-        ret = mangled;
-    }
-    else if (status == -3)
-    {
-        NS_LOG_UNCOND("Callback demangling failed: One of the arguments is invalid.");
-        ret = mangled;
-    }
-    else
-    {
-        NS_LOG_UNCOND("Callback demangling failed: status " << status);
-        ret = mangled;
-    }
-
-    if (demangled)
-    {
-        std::free(demangled);
-    }
-    return ret;
-}
-
-} // namespace ns3
-
-#else
-
-std::string
-ns3::CallbackImplBase::Demangle(const std::string& mangled)
-{
-    NS_LOG_FUNCTION(this << mangled);
-    return mangled;
-}
-
-#endif
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/callback.h ns-3.43/src/core/model/callback.h
--- ns-3.42/src/core/model/callback.h	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/callback.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Stefano Avallone <stavallo@unina.it>
@@ -23,6 +12,7 @@
 
 #include "attribute-helper.h"
 #include "attribute.h"
+#include "demangle.h"
 #include "fatal-error.h"
 #include "ptr.h"
 #include "simple-ref-count.h"
@@ -100,12 +90,6 @@
 
   protected:
     /**
-     * \param [in] mangled The mangled string
-     * \return The demangled form of mangled
-     */
-    static std::string Demangle(const std::string& mangled);
-
-    /**
      * Helper to get the C++ typeid as a string.
      *
      * \tparam T \explicit The type of the argument.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/command-line.cc ns-3.43/src/core/model/command-line.cc
--- ns-3.42/src/core/model/command-line.cc	2024-05-29 15:29:46.928073200 -0700
+++ ns-3.43/src/core/model/command-line.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/command-line.h ns-3.43/src/core/model/command-line.h
--- ns-3.42/src/core/model/command-line.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/command-line.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -466,7 +455,7 @@
 
     /**
      * \ingroup commandline
-     *\brief An argument Item assigning to POD
+     * \brief An argument Item assigning to POD
      */
     template <typename T>
     class UserItem : public Item
@@ -672,8 +661,9 @@
 
 }; // class CommandLine
 
-/** \ingroup commandline
- *  \defgroup commandlinehelper Helpers to specialize UserItem
+/**
+ * \ingroup commandline
+ * \defgroup commandlinehelper Helpers to specialize UserItem
  */
 /**
  * \ingroup commandlinehelper
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/config.cc ns-3.43/src/core/model/config.cc
--- ns-3.42/src/core/model/config.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/config.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/config.h ns-3.43/src/core/model/config.h
--- ns-3.42/src/core/model/config.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/config.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/default-deleter.h ns-3.43/src/core/model/default-deleter.h
--- ns-3.42/src/core/model/default-deleter.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/default-deleter.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/default-simulator-impl.cc ns-3.43/src/core/model/default-simulator-impl.cc
--- ns-3.42/src/core/model/default-simulator-impl.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/default-simulator-impl.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/default-simulator-impl.h ns-3.43/src/core/model/default-simulator-impl.h
--- ns-3.42/src/core/model/default-simulator-impl.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/default-simulator-impl.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/demangle.cc ns-3.43/src/core/model/demangle.cc
--- ns-3.42/src/core/model/demangle.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/core/model/demangle.cc	2024-10-09 16:41:09.856655800 -0700
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2005,2006 INRIA
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ * Modified by: Gabriel Ferreira <gabrielcarvfer@gmail.com>
+ *              Moved the Demangle function out of CallbackImplBase
+ */
+
+#include "demangle.h"
+
+#include "assert.h"
+#include "log.h"
+
+NS_LOG_COMPONENT_DEFINE("Demangle");
+
+#if (__GNUC__ >= 3)
+
+#include <cstdlib>
+#include <cxxabi.h>
+
+std::string
+ns3::Demangle(const std::string& mangled)
+{
+    NS_LOG_FUNCTION(mangled);
+
+    int status;
+    char* demangled = abi::__cxa_demangle(mangled.c_str(), nullptr, nullptr, &status);
+
+    std::string ret;
+    if (status == 0)
+    {
+        NS_ASSERT(demangled);
+        ret = demangled;
+    }
+    else if (status == -1)
+    {
+        NS_LOG_DEBUG("Demangling failed: Memory allocation failure occurred.");
+        ret = mangled;
+    }
+    else if (status == -2)
+    {
+        NS_LOG_DEBUG("Demangling failed: Mangled name is not a valid under the C++ ABI "
+                     "mangling rules.");
+        ret = mangled;
+    }
+    else if (status == -3)
+    {
+        NS_LOG_DEBUG("Demangling failed: One of the arguments is invalid.");
+        ret = mangled;
+    }
+    else
+    {
+        NS_LOG_DEBUG("Demangling failed: status " << status);
+        ret = mangled;
+    }
+
+    if (demangled)
+    {
+        std::free(demangled);
+    }
+    return ret;
+}
+
+#else
+
+std::string
+ns3::Demangle(const std::string& mangled)
+{
+    NS_LOG_FUNCTION(mangled);
+    return mangled;
+}
+
+#endif
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/demangle.h ns-3.43/src/core/model/demangle.h
--- ns-3.42/src/core/model/demangle.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/core/model/demangle.h	2024-10-09 16:41:09.856655800 -0700
@@ -0,0 +1,25 @@
+/*
+ * Copyright (c) 2005,2006 INRIA
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
+ * Modified by: Gabriel Ferreira <gabrielcarvfer@gmail.com>
+ *              Moved the Demangle function out of CallbackImplBase
+ */
+
+#ifndef NS3_DEMANGLE_H
+#define NS3_DEMANGLE_H
+
+#include <string>
+
+namespace ns3
+{
+/**
+ * \param [in] mangled The mangled string
+ * \return The demangled form of mangled
+ */
+std::string Demangle(const std::string& mangled);
+}; // namespace ns3
+
+#endif // NS3_DEMANGLE_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/deprecated.h ns-3.43/src/core/model/deprecated.h
--- ns-3.42/src/core/model/deprecated.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/deprecated.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -92,7 +81,14 @@
  * \param msg Optional message to add to the compiler warning.
  *
  */
-#define NS_DEPRECATED(msg) [[deprecated(msg)]]
+#define NS_DEPRECATED(msg) /** \deprecated msg */ [[deprecated(msg)]]
+
+/**
+ * \ingroup deprecation
+ * \def NS_DEPRECATED_3_43
+ * Tag for things deprecated in version ns-3.43.
+ */
+#define NS_DEPRECATED_3_43(msg) NS_DEPRECATED("Deprecated in ns-3.43: " msg)
 
 /**
  * \ingroup deprecation
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/des-metrics.cc ns-3.43/src/core/model/des-metrics.cc
--- ns-3.42/src/core/model/des-metrics.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/des-metrics.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 LLNL
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/des-metrics.h ns-3.43/src/core/model/des-metrics.h
--- ns-3.42/src/core/model/des-metrics.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/des-metrics.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 LLNL
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/double.cc ns-3.43/src/core/model/double.cc
--- ns-3.42/src/core/model/double.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/double.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/double.h ns-3.43/src/core/model/double.h
--- ns-3.42/src/core/model/double.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/double.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/enum.h ns-3.43/src/core/model/enum.h
--- ns-3.42/src/core/model/enum.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/enum.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -21,6 +10,7 @@
 
 #include "attribute-accessor-helper.h"
 #include "attribute.h"
+#include "demangle.h"
 
 #include <algorithm> // find_if
 #include <list>
@@ -341,7 +331,7 @@
 std::string
 EnumChecker<T>::GetValueTypeName() const
 {
-    return "ns3::EnumValue<" + std::string(typeid(T).name()) + ">";
+    return "ns3::EnumValue<" + Demangle(typeid(T).name()) + ">";
 }
 
 template <typename T>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/environment-variable.cc ns-3.43/src/core/model/environment-variable.cc
--- ns-3.42/src/core/model/environment-variable.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/environment-variable.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/environment-variable.h ns-3.43/src/core/model/environment-variable.h
--- ns-3.42/src/core/model/environment-variable.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/environment-variable.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/event-id.cc ns-3.43/src/core/model/event-id.cc
--- ns-3.42/src/core/model/event-id.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/event-id.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/event-id.h ns-3.43/src/core/model/event-id.h
--- ns-3.42/src/core/model/event-id.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/event-id.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/event-impl.cc ns-3.43/src/core/model/event-impl.cc
--- ns-3.42/src/core/model/event-impl.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/event-impl.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/event-impl.h ns-3.43/src/core/model/event-impl.h
--- ns-3.42/src/core/model/event-impl.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/event-impl.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/example-as-test.cc ns-3.43/src/core/model/example-as-test.cc
--- ns-3.42/src/core/model/example-as-test.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/example-as-test.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
@@ -42,7 +31,6 @@
 NS_LOG_COMPONENT_DEFINE("ExampleAsTestCase");
 
 // Running tests as examples currently requires Python.
-#if defined(NS3_ENABLE_EXAMPLES)
 
 ExampleAsTestCase::ExampleAsTestCase(const std::string name,
                                      const std::string program,
@@ -161,6 +149,4 @@
     AddTestCase(new ExampleAsTestCase(name, program, dataDir, args, shouldNotErr), duration);
 }
 
-#endif // NS3_ENABLE_EXAMPLES
-
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/example-as-test.h ns-3.43/src/core/model/example-as-test.h
--- ns-3.42/src/core/model/example-as-test.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/example-as-test.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/fatal-error.h ns-3.43/src/core/model/fatal-error.h
--- ns-3.42/src/core/model/fatal-error.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/fatal-error.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA, 2010 NICTA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *         Quincy Tse <quincy.tse@nicta.com.au>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/fatal-impl.cc ns-3.43/src/core/model/fatal-impl.cc
--- ns-3.42/src/core/model/fatal-impl.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/fatal-impl.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 NICTA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Quincy Tse <quincy.tse@nicta.com.au>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/fatal-impl.h ns-3.43/src/core/model/fatal-impl.h
--- ns-3.42/src/core/model/fatal-impl.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/fatal-impl.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 NICTA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Quincy Tse <quincy.tse@nicta.com.au>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/fd-reader.h ns-3.43/src/core/model/fd-reader.h
--- ns-3.42/src/core/model/fd-reader.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/fd-reader.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Goff <thomas.goff@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/global-value.cc ns-3.43/src/core/model/global-value.cc
--- ns-3.42/src/core/model/global-value.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/global-value.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/global-value.h ns-3.43/src/core/model/global-value.h
--- ns-3.42/src/core/model/global-value.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/global-value.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/hash.cc ns-3.43/src/core/model/hash.cc
--- ns-3.42/src/core/model/hash.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/hash.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/hash-fnv.cc ns-3.43/src/core/model/hash-fnv.cc
--- ns-3.42/src/core/model/hash-fnv.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/hash-fnv.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/hash-fnv.h ns-3.43/src/core/model/hash-fnv.h
--- ns-3.42/src/core/model/hash-fnv.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/hash-fnv.h	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/hash-function.cc ns-3.43/src/core/model/hash-function.cc
--- ns-3.42/src/core/model/hash-function.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/hash-function.cc	2024-10-09 16:41:09.856655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/hash-function.h ns-3.43/src/core/model/hash-function.h
--- ns-3.42/src/core/model/hash-function.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/hash-function.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
@@ -42,9 +31,9 @@
 {
 
 /**
- *  \ingroup hash
+ * \ingroup hash
  *
- *  \brief Hash function implementation base class.
+ * \brief Hash function implementation base class.
  */
 class Implementation : public SimpleRefCount<Implementation>
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/hash.h ns-3.43/src/core/model/hash.h
--- ns-3.42/src/core/model/hash.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/hash.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
@@ -41,7 +30,7 @@
  * \ingroup core
  * \defgroup hash Hash Functions
  *
- *  \brief Generic Hash function interface.
+ * \brief Generic Hash function interface.
  *
  * See \ref Hasher for main entry point.
  * See \ref hash-example.cc for example usage.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/hash-murmur3.cc ns-3.43/src/core/model/hash-murmur3.cc
--- ns-3.42/src/core/model/hash-murmur3.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/hash-murmur3.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/hash-murmur3.h ns-3.43/src/core/model/hash-murmur3.h
--- ns-3.42/src/core/model/hash-murmur3.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/hash-murmur3.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/heap-scheduler.cc ns-3.43/src/core/model/heap-scheduler.cc
--- ns-3.42/src/core/model/heap-scheduler.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/heap-scheduler.cc	2024-10-09 16:41:09.860655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 INRIA
  * Copyright (c) 2005 Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/heap-scheduler.h ns-3.43/src/core/model/heap-scheduler.h
--- ns-3.42/src/core/model/heap-scheduler.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/heap-scheduler.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/int64x64-128.cc ns-3.43/src/core/model/int64x64-128.cc
--- ns-3.42/src/core/model/int64x64-128.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/int64x64-128.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,19 +1,7 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "int64x64-128.h"
@@ -22,6 +10,8 @@
 #include "assert.h"
 #include "log.h"
 
+#if defined(INT64X64_USE_128) && !defined(PYTHON_SCAN)
+
 /**
  * \file
  * \ingroup highprec
@@ -253,3 +243,5 @@
 }
 
 } // namespace ns3
+
+#endif /* INT64X64_128_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/int64x64-128.h ns-3.43/src/core/model/int64x64-128.h
--- ns-3.42/src/core/model/int64x64-128.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/int64x64-128.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,29 +1,19 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
+#ifndef INT64X64_128_H
+#define INT64X64_128_H
+
 #include "ns3/core-config.h"
 
-#if !defined(INT64X64_128_H) && defined(INT64X64_USE_128) && !defined(PYTHON_SCAN)
 /**
  * \ingroup highprec
  * Use uint128_t for int64x64_t implementation
  */
-#define INT64X64_128_H
+#if defined(INT64X64_USE_128) && !defined(PYTHON_SCAN)
 
 #include <cmath> // pow
 #include <stdint.h>
@@ -58,22 +48,11 @@
     static const uint128_t HP128_MASK_HI_BIT = (((int128_t)1) << 127);
     /// Mask for fraction part.
     static const uint64_t HP_MASK_LO = 0xffffffffffffffffULL;
-    /**
-     * Floating point value of HP_MASK_LO + 1.
-     * We really want:
-     * \code
-     *   static const long double HP_MAX_64 = std:pow (2.0L, 64);
-     * \endcode
-     * but we can't call functions in const definitions.
-     *
-     * We could make this a static and initialize in int64x64-128.cc or
-     * int64x64.cc, but this requires handling static initialization order
-     * when most of the implementation is inline.  Instead, we resort to
-     * this define.
-     */
-#define HP_MAX_64 (std::pow(2.0L, 64))
 
   public:
+    /// Floating point value of HP_MASK_LO + 1.
+    static constexpr long double HP_MAX_64 = (static_cast<uint64_t>(1) << 63) * 2.0L;
+
     /**
      * Type tag for the underlying implementation.
      *
@@ -238,7 +217,8 @@
     inline double GetDouble() const
     {
         const bool negative = _v < 0;
-        const uint128_t value = negative ? -_v : _v;
+        const int128_t vTemp = _v + (_v == std::numeric_limits<int128_t>::min());
+        const uint128_t value = negative ? -vTemp : vTemp;
         const long double fhi = value >> 64;
         const long double flo = (value & HP_MASK_LO) / HP_MAX_64;
         long double retval = fhi;
@@ -471,4 +451,5 @@
 
 } // namespace ns3
 
+#endif /* defined(INT64X64_USE_128) && !defined(PYTHON_SCAN) */
 #endif /* INT64X64_128_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/int64x64-cairo.cc ns-3.43/src/core/model/int64x64-cairo.cc
--- ns-3.42/src/core/model/int64x64-cairo.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/int64x64-cairo.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -26,6 +15,8 @@
 #include <cmath>
 #include <iostream>
 
+#if defined(INT64X64_USE_CAIRO) && !defined(PYTHON_SCAN)
+
 // Include directly to allow optimizations within this compilation unit.
 extern "C"
 {
@@ -235,3 +226,5 @@
 }
 
 } // namespace ns3
+
+#endif /* INT64X64_CAIRO_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/int64x64-cairo.h ns-3.43/src/core/model/int64x64-cairo.h
--- ns-3.42/src/core/model/int64x64-cairo.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/int64x64-cairo.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,25 +1,16 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
+#ifndef INT64X64_CAIRO_H
+#define INT64X64_CAIRO_H
+
 #include "ns3/core-config.h"
-#if !defined(INT64X64_CAIRO_H) && defined(INT64X64_USE_CAIRO) && !defined(PYTHON_SCAN)
+
+#if defined(INT64X64_USE_CAIRO) && !defined(PYTHON_SCAN)
 /** Using the ns3::int64x64_t based on Cairo 128-bit integers. */
-#define INT64X64_CAIRO_H
 
 #include "cairo-wideint-private.h"
 
@@ -44,21 +35,11 @@
     static const uint64_t HPCAIRO_MASK_HI_BIT = (((uint64_t)1) << 63);
     /// Mask for fraction part
     static const uint64_t HP_MASK_LO = 0xffffffffffffffffULL;
-    /**
-     * Floating point value of HP_MASK_LO + 1
-     * We really want:
-     * \code
-     *   static const long double HP_MAX_64 = std:pow (2.0L, 64);
-     * \endcode
-     * but we can't call functions in const definitions,
-     * We could make this a static and initialize in int64x64-cairo.cc or
-     * int64x64.cc, but this requires handling static initialization order
-     * when most of the implementation is inline.  Instead, we resort to
-     * this define.
-     */
-#define HP_MAX_64 (std::pow(2.0L, 64))
 
   public:
+    /// Floating point value of HP_MASK_LO + 1
+    static constexpr long double HP_MAX_64 = (static_cast<uint64_t>(1) << 63) * 2.0L;
+
     /**
      * Type tag for the underlying implementation.
      *
@@ -453,4 +434,5 @@
 
 } // namespace ns3
 
+#endif /* defined(INT64X64_USE_CAIRO) && !defined(PYTHON_SCAN) */
 #endif /* INT64X64_CAIRO_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/int64x64.cc ns-3.43/src/core/model/int64x64.cc
--- ns-3.42/src/core/model/int64x64.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/int64x64.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,19 +1,7 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "int64x64.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/int64x64-double.h ns-3.43/src/core/model/int64x64-double.h
--- ns-3.42/src/core/model/int64x64-double.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/int64x64-double.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,25 +1,16 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
+#ifndef INT64X64_DOUBLE_H
+#define INT64X64_DOUBLE_H
+
 #include "ns3/core-config.h"
-#if !defined(INT64X64_DOUBLE_H) && (defined(INT64X64_USE_DOUBLE) || defined(PYTHON_SCAN))
+
+#if defined(INT64X64_USE_DOUBLE) || defined(PYTHON_SCAN)
 /** Using the ns3::int64x64_t based on double values. */
-#define INT64X64_DOUBLE_H
 
 #include <cmath> // pow
 #include <stdint.h>
@@ -43,21 +34,11 @@
 {
     /// Mask for fraction part
     static const uint64_t HP_MASK_LO = 0xffffffffffffffffULL;
-    /**
-     * Floating point value of HP_MASK_LO + 1
-     * We really want:
-     * \code
-     *   static const long double HP_MAX_64 = std:pow (2.0L, 64);
-     * \endcode
-     * but we can't call functions in const definitions,
-     * We could make this a static and initialize in int64x64-double.cc or
-     * int64x64.cc, but this requires handling static initialization order
-     * when most of the implementation is inline.  Instead, we resort to
-     * this define.
-     */
-#define HP_MAX_64 (std::pow(2.0L, 64))
 
   public:
+    /// Floating point value of HP_MASK_LO + 1
+    static constexpr long double HP_MAX_64 = (static_cast<uint64_t>(1) << 63) * 2.0L;
+
     /**
      * Type tag for the underlying implementation.
      *
@@ -396,4 +377,5 @@
 
 } // namespace ns3
 
+#endif /* defined(INT64X64_USE_DOUBLE) || defined(PYTHON_SCAN) */
 #endif /* INT64X64_DOUBLE_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/int64x64.h ns-3.43/src/core/model/int64x64.h
--- ns-3.42/src/core/model/int64x64.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/int64x64.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,19 +1,7 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef INT64X64_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/integer.cc ns-3.43/src/core/model/integer.cc
--- ns-3.42/src/core/model/integer.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/integer.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/integer.h ns-3.43/src/core/model/integer.h
--- ns-3.42/src/core/model/integer.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/integer.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/length.cc ns-3.43/src/core/model/length.cc
--- ns-3.42/src/core/model/length.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/length.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathew Bielejeski <bielejeski1@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/length.h ns-3.43/src/core/model/length.h
--- ns-3.42/src/core/model/length.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/length.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathew Bielejeski <bielejeski1@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/list-scheduler.cc ns-3.43/src/core/model/list-scheduler.cc
--- ns-3.42/src/core/model/list-scheduler.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/list-scheduler.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/list-scheduler.h ns-3.43/src/core/model/list-scheduler.h
--- ns-3.42/src/core/model/list-scheduler.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/list-scheduler.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/log.cc ns-3.43/src/core/model/log.cc
--- ns-3.42/src/core/model/log.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/log.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -492,8 +481,9 @@
 LogSetTimePrinter(TimePrinter printer)
 {
     g_logTimePrinter = printer;
-    /** \internal
-     *  This is the only place where we are more or less sure that all log variables
+    /**
+     * \internal
+     * This is the only place where we are more or less sure that all log variables
      * are registered. See \bugid{1082} for details.
      */
     CheckEnvironmentVariables();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/log.h ns-3.43/src/core/model/log.h
--- ns-3.42/src/core/model/log.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/log.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -195,7 +184,7 @@
  *   using ns3::g_log;
  *
  *   // Further definitions outside of the ns3 namespace
- *\endcode
+ * \endcode
  *
  * \param [in] name The log component name.
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/log-macros-disabled.h ns-3.43/src/core/model/log-macros-disabled.h
--- ns-3.42/src/core/model/log-macros-disabled.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/log-macros-disabled.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Andrey Mazo
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrey Mazo <ahippo@yandex.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/log-macros-enabled.h ns-3.43/src/core/model/log-macros-enabled.h
--- ns-3.42/src/core/model/log-macros-enabled.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/log-macros-enabled.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/make-event.h ns-3.43/src/core/model/make-event.h
--- ns-3.42/src/core/model/make-event.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/make-event.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/map-scheduler.cc ns-3.43/src/core/model/map-scheduler.cc
--- ns-3.42/src/core/model/map-scheduler.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/map-scheduler.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * The idea to use a std c++ map came from GTNetS
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/map-scheduler.h ns-3.43/src/core/model/map-scheduler.h
--- ns-3.42/src/core/model/map-scheduler.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/map-scheduler.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/math.h ns-3.43/src/core/model/math.h
--- ns-3.42/src/core/model/math.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/math.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *
  * FreeBSD log2 patch from graphviz port to FreeBSD 9, courtesy of
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/matrix-array.cc ns-3.43/src/core/model/matrix-array.cc
--- ns-3.42/src/core/model/matrix-array.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/matrix-array.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Biljana Bojovic <bbojovic@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/matrix-array.h ns-3.43/src/core/model/matrix-array.h
--- ns-3.42/src/core/model/matrix-array.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/matrix-array.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Biljana Bojovic <bbojovic@cttc.es>
  */
@@ -200,7 +189,7 @@
      */
     MatrixArray FrobeniusNorm() const;
     /**
-     *\brief Multiply each matrix in the array by the left and the right matrix.
+     * \brief Multiply each matrix in the array by the left and the right matrix.
      * For each page of this MatrixArray the operation performed is
      * lMatrix * matrix(pageIndex) * rMatrix, and the resulting MatrixArray<T>
      * contains the array of the results per page. If "this" has dimensions
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/names.cc ns-3.43/src/core/model/names.cc
--- ns-3.42/src/core/model/names.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/names.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "names.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/names.h ns-3.43/src/core/model/names.h
--- ns-3.42/src/core/model/names.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/names.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef OBJECT_NAMES_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/node-printer.cc ns-3.43/src/core/model/node-printer.cc
--- ns-3.42/src/core/model/node-printer.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/node-printer.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/node-printer.h ns-3.43/src/core/model/node-printer.h
--- ns-3.42/src/core/model/node-printer.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/node-printer.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/nstime.h ns-3.43/src/core/model/nstime.h
--- ns-3.42/src/core/model/nstime.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/nstime.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object-base.cc ns-3.43/src/core/model/object-base.cc
--- ns-3.42/src/core/model/object-base.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object-base.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -248,12 +237,12 @@
 }
 
 void
-ObjectBase::GetAttribute(std::string name, AttributeValue& value) const
+ObjectBase::GetAttribute(std::string name, AttributeValue& value, bool permissive) const
 {
     NS_LOG_FUNCTION(this << name << &value);
     TypeId::AttributeInformation info;
     TypeId tid = GetInstanceTypeId();
-    if (!tid.LookupAttributeByName(name, &info))
+    if (!tid.LookupAttributeByName(name, &info, permissive))
     {
         NS_FATAL_ERROR(
             "Attribute name=" << name << " does not exist for this object: tid=" << tid.GetName());
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object-base.h ns-3.43/src/core/model/object-base.h
--- ns-3.42/src/core/model/object-base.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object-base.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -235,8 +224,11 @@
      *
      * \param [in]  name The name of the attribute to read.
      * \param [out] value Where the result should be stored.
+     * \param [in] permissive If false (by default), will generate warnings and errors for
+     * deprecated and obsolete attributes, respectively. If set to true, warnings for deprecated
+     * attributes will be suppressed.
      */
-    void GetAttribute(std::string name, AttributeValue& value) const;
+    void GetAttribute(std::string name, AttributeValue& value, bool permissive = false) const;
     /**
      * Get the value of an attribute without raising errors.
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object.cc ns-3.43/src/core/model/object.cc
--- ns-3.42/src/core/model/object.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA, Gustavo Carneiro
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Gustavo Carneiro <gjcarneiro@gmail.com>,
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object-factory.cc ns-3.43/src/core/model/object-factory.cc
--- ns-3.42/src/core/model/object-factory.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object-factory.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object-factory.h ns-3.43/src/core/model/object-factory.h
--- ns-3.42/src/core/model/object-factory.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object-factory.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object.h ns-3.43/src/core/model/object.h
--- ns-3.42/src/core/model/object.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA, Gustavo Carneiro
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Gustavo Carneiro <gjcarneiro@gmail.com>,
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object-map.h ns-3.43/src/core/model/object-map.h
--- ns-3.42/src/core/model/object-map.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object-map.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA, Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object-ptr-container.cc ns-3.43/src/core/model/object-ptr-container.cc
--- ns-3.42/src/core/model/object-ptr-container.cc	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object-ptr-container.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA, Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object-ptr-container.h ns-3.43/src/core/model/object-ptr-container.h
--- ns-3.42/src/core/model/object-ptr-container.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object-ptr-container.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA, Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/object-vector.h ns-3.43/src/core/model/object-vector.h
--- ns-3.42/src/core/model/object-vector.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/object-vector.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA, Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/pair.h ns-3.43/src/core/model/pair.h
--- ns-3.42/src/core/model/pair.h	2024-05-29 15:29:46.932073000 -0700
+++ ns-3.43/src/core/model/pair.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Caliola Engineering, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jared Dulmage <jared.dulmage@caliola.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/pointer.cc ns-3.43/src/core/model/pointer.cc
--- ns-3.42/src/core/model/pointer.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/pointer.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/pointer.h ns-3.43/src/core/model/pointer.h
--- ns-3.42/src/core/model/pointer.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/pointer.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/priority-queue-scheduler.cc ns-3.43/src/core/model/priority-queue-scheduler.cc
--- ns-3.42/src/core/model/priority-queue-scheduler.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/priority-queue-scheduler.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 IITP
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/priority-queue-scheduler.h ns-3.43/src/core/model/priority-queue-scheduler.h
--- ns-3.42/src/core/model/priority-queue-scheduler.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/priority-queue-scheduler.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/ptr.h ns-3.43/src/core/model/ptr.h
--- ns-3.42/src/core/model/ptr.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/ptr.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/random-variable-stream.cc ns-3.43/src/core/model/random-variable-stream.cc
--- ns-3.42/src/core/model/random-variable-stream.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/random-variable-stream.cc	2024-10-09 16:41:09.860655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 Georgia Tech Research Corporation
  * Copyright (c) 2011 Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rajib Bhattacharjea<raj.b@gatech.edu>
  *          Hadi Arbabi<marbabi@cs.odu.edu>
@@ -33,10 +22,12 @@
 #include "rng-seed-manager.h"
 #include "rng-stream.h"
 #include "string.h"
+#include "uinteger.h"
 
 #include <algorithm> // upper_bound
 #include <cmath>
 #include <iostream>
+#include <numbers>
 
 /**
  * \file
@@ -84,7 +75,6 @@
 
 RandomVariableStream::~RandomVariableStream()
 {
-    NS_LOG_FUNCTION(this);
     delete m_rng;
 }
 
@@ -98,15 +88,16 @@
 bool
 RandomVariableStream::IsAntithetic() const
 {
-    NS_LOG_FUNCTION(this);
     return m_isAntithetic;
 }
 
 uint32_t
 RandomVariableStream::GetInteger()
 {
-    NS_LOG_FUNCTION(this);
-    return static_cast<uint32_t>(GetValue());
+    auto value = static_cast<uint32_t>(GetValue());
+    NS_LOG_DEBUG(GetInstanceTypeId().GetName()
+                 << " integer value: " << value << " stream: " << GetStream());
+    return value;
 }
 
 void
@@ -122,6 +113,7 @@
         // number assignment.
         uint64_t nextStream = RngSeedManager::GetNextStreamIndex();
         NS_ASSERT(nextStream <= ((1ULL) << 63));
+        NS_LOG_INFO(GetInstanceTypeId().GetName() << " automatic stream: " << nextStream);
         m_rng = new RngStream(RngSeedManager::GetSeed(), nextStream, RngSeedManager::GetRun());
     }
     else
@@ -130,6 +122,7 @@
         // number assignment.
         uint64_t base = ((1ULL) << 63);
         uint64_t target = base + stream;
+        NS_LOG_INFO(GetInstanceTypeId().GetName() << " configured stream: " << stream);
         m_rng = new RngStream(RngSeedManager::GetSeed(), target, RngSeedManager::GetRun());
     }
     m_stream = stream;
@@ -138,14 +131,12 @@
 int64_t
 RandomVariableStream::GetStream() const
 {
-    NS_LOG_FUNCTION(this);
     return m_stream;
 }
 
 RngStream*
 RandomVariableStream::Peek() const
 {
-    NS_LOG_FUNCTION(this);
     return m_rng;
 }
 
@@ -181,49 +172,50 @@
 double
 UniformRandomVariable::GetMin() const
 {
-    NS_LOG_FUNCTION(this);
     return m_min;
 }
 
 double
 UniformRandomVariable::GetMax() const
 {
-    NS_LOG_FUNCTION(this);
     return m_max;
 }
 
 double
 UniformRandomVariable::GetValue(double min, double max)
 {
-    NS_LOG_FUNCTION(this << min << max);
     double v = min + Peek()->RandU01() * (max - min);
     if (IsAntithetic())
     {
         v = min + (max - v);
     }
+    NS_LOG_DEBUG("value: " << v << " stream: " << GetStream() << " min: " << min
+                           << " max: " << max);
     return v;
 }
 
 uint32_t
 UniformRandomVariable::GetInteger(uint32_t min, uint32_t max)
 {
-    NS_LOG_FUNCTION(this << min << max);
     NS_ASSERT(min <= max);
-    return static_cast<uint32_t>(GetValue((double)(min), (double)(max) + 1.0));
+    auto v = static_cast<uint32_t>(GetValue((double)(min), (double)(max) + 1.0));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " min: " << min << " max "
+                                   << max);
+    return v;
 }
 
 double
 UniformRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_min, m_max);
 }
 
 uint32_t
 UniformRandomVariable::GetInteger()
 {
-    NS_LOG_FUNCTION(this);
-    return static_cast<uint32_t>(GetValue(m_min, m_max + 1));
+    auto v = static_cast<uint32_t>(GetValue(m_min, m_max + 1));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream());
+    return v;
 }
 
 NS_OBJECT_ENSURE_REGISTERED(ConstantRandomVariable);
@@ -259,21 +251,20 @@
 double
 ConstantRandomVariable::GetValue(double constant)
 {
-    NS_LOG_FUNCTION(this << constant);
+    NS_LOG_DEBUG("value: " << constant << " stream: " << GetStream());
     return constant;
 }
 
 uint32_t
 ConstantRandomVariable::GetInteger(uint32_t constant)
 {
-    NS_LOG_FUNCTION(this << constant);
+    NS_LOG_DEBUG("integer value: " << constant << " stream: " << GetStream());
     return constant;
 }
 
 double
 ConstantRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_constant);
 }
 
@@ -323,28 +314,24 @@
 double
 SequentialRandomVariable::GetMin() const
 {
-    NS_LOG_FUNCTION(this);
     return m_min;
 }
 
 double
 SequentialRandomVariable::GetMax() const
 {
-    NS_LOG_FUNCTION(this);
     return m_max;
 }
 
 Ptr<RandomVariableStream>
 SequentialRandomVariable::GetIncrement() const
 {
-    NS_LOG_FUNCTION(this);
     return m_increment;
 }
 
 uint32_t
 SequentialRandomVariable::GetConsecutive() const
 {
-    NS_LOG_FUNCTION(this);
     return m_consecutive;
 }
 
@@ -352,7 +339,6 @@
 SequentialRandomVariable::GetValue()
 {
     // Set the current sequence value if it hasn't been set.
-    NS_LOG_FUNCTION(this);
     if (!m_isCurrentSet)
     {
         // Start the sequence at its minimum value.
@@ -371,6 +357,7 @@
             m_current = m_min + (m_current - m_max);
         }
     }
+    NS_LOG_DEBUG("value: " << r << " stream: " << GetStream());
     return r;
 }
 
@@ -406,21 +393,18 @@
 double
 ExponentialRandomVariable::GetMean() const
 {
-    NS_LOG_FUNCTION(this);
     return m_mean;
 }
 
 double
 ExponentialRandomVariable::GetBound() const
 {
-    NS_LOG_FUNCTION(this);
     return m_bound;
 }
 
 double
 ExponentialRandomVariable::GetValue(double mean, double bound)
 {
-    NS_LOG_FUNCTION(this << mean << bound);
     while (true)
     {
         // Get a uniform random variable in [0,1].
@@ -436,6 +420,8 @@
         // Use this value if it's acceptable.
         if (bound == 0 || r <= bound)
         {
+            NS_LOG_DEBUG("value: " << r << " stream: " << GetStream() << " mean: " << mean
+                                   << " bound: " << bound);
             return r;
         }
     }
@@ -445,13 +431,15 @@
 ExponentialRandomVariable::GetInteger(uint32_t mean, uint32_t bound)
 {
     NS_LOG_FUNCTION(this << mean << bound);
-    return static_cast<uint32_t>(GetValue(mean, bound));
+    auto v = static_cast<uint32_t>(GetValue(mean, bound));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " mean: " << mean
+                                   << " bound: " << bound);
+    return v;
 }
 
 double
 ExponentialRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_mean, m_bound);
 }
 
@@ -496,30 +484,24 @@
 double
 ParetoRandomVariable::GetScale() const
 {
-    NS_LOG_FUNCTION(this);
     return m_scale;
 }
 
 double
 ParetoRandomVariable::GetShape() const
 {
-    NS_LOG_FUNCTION(this);
     return m_shape;
 }
 
 double
 ParetoRandomVariable::GetBound() const
 {
-    NS_LOG_FUNCTION(this);
     return m_bound;
 }
 
 double
 ParetoRandomVariable::GetValue(double scale, double shape, double bound)
 {
-    // Calculate the scale parameter.
-    NS_LOG_FUNCTION(this << scale << shape << bound);
-
     while (true)
     {
         // Get a uniform random variable in [0,1].
@@ -535,6 +517,8 @@
         // Use this value if it's acceptable.
         if (bound == 0 || r <= bound)
         {
+            NS_LOG_DEBUG("value: " << r << " stream: " << GetStream() << " scale: " << scale
+                                   << " shape: " << shape << " bound: " << bound);
             return r;
         }
     }
@@ -543,14 +527,15 @@
 uint32_t
 ParetoRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound)
 {
-    NS_LOG_FUNCTION(this << scale << shape << bound);
-    return static_cast<uint32_t>(GetValue(scale, shape, bound));
+    auto v = static_cast<uint32_t>(GetValue(scale, shape, bound));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " scale: " << scale
+                                   << " shape: " << shape << " bound: " << bound);
+    return v;
 }
 
 double
 ParetoRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_scale, m_shape, m_bound);
 }
 
@@ -594,28 +579,38 @@
 double
 WeibullRandomVariable::GetScale() const
 {
-    NS_LOG_FUNCTION(this);
     return m_scale;
 }
 
 double
 WeibullRandomVariable::GetShape() const
 {
-    NS_LOG_FUNCTION(this);
     return m_shape;
 }
 
 double
 WeibullRandomVariable::GetBound() const
 {
-    NS_LOG_FUNCTION(this);
     return m_bound;
 }
 
 double
+WeibullRandomVariable::GetMean(double scale, double shape)
+{
+    NS_LOG_FUNCTION(scale << shape);
+    return scale * std::tgamma(1 + (1 / shape));
+}
+
+double
+WeibullRandomVariable::GetMean() const
+{
+    NS_LOG_FUNCTION(this);
+    return GetMean(m_scale, m_shape);
+}
+
+double
 WeibullRandomVariable::GetValue(double scale, double shape, double bound)
 {
-    NS_LOG_FUNCTION(this << scale << shape << bound);
     double exponent = 1.0 / shape;
     while (true)
     {
@@ -632,6 +627,8 @@
         // Use this value if it's acceptable.
         if (bound == 0 || r <= bound)
         {
+            NS_LOG_DEBUG("value: " << r << " stream: " << GetStream() << " scale: " << scale
+                                   << " shape: " << shape << " bound: " << bound);
             return r;
         }
     }
@@ -640,8 +637,10 @@
 uint32_t
 WeibullRandomVariable::GetInteger(uint32_t scale, uint32_t shape, uint32_t bound)
 {
-    NS_LOG_FUNCTION(this << scale << shape << bound);
-    return static_cast<uint32_t>(GetValue(scale, shape, bound));
+    auto v = static_cast<uint32_t>(GetValue(scale, shape, bound));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " scale: " << scale
+                                   << " shape: " << shape << " bound: " << bound);
+    return v;
 }
 
 double
@@ -693,34 +692,32 @@
 double
 NormalRandomVariable::GetMean() const
 {
-    NS_LOG_FUNCTION(this);
     return m_mean;
 }
 
 double
 NormalRandomVariable::GetVariance() const
 {
-    NS_LOG_FUNCTION(this);
     return m_variance;
 }
 
 double
 NormalRandomVariable::GetBound() const
 {
-    NS_LOG_FUNCTION(this);
     return m_bound;
 }
 
 double
 NormalRandomVariable::GetValue(double mean, double variance, double bound)
 {
-    NS_LOG_FUNCTION(this << mean << variance << bound);
     if (m_nextValid)
     { // use previously generated
         m_nextValid = false;
         double x2 = mean + m_v2 * m_y * std::sqrt(variance);
         if (std::fabs(x2 - mean) <= bound)
         {
+            NS_LOG_DEBUG("value: " << x2 << " stream: " << GetStream() << " mean: " << mean
+                                   << " variance: " << variance << " bound: " << bound);
             return x2;
         }
     }
@@ -748,6 +745,8 @@
                 m_nextValid = true;
                 m_y = y;
                 m_v2 = v2;
+                NS_LOG_DEBUG("value: " << x1 << " stream: " << GetStream() << " mean: " << mean
+                                       << " variance: " << variance << " bound: " << bound);
                 return x1;
             }
             // otherwise try and return the other if it is valid
@@ -755,6 +754,8 @@
             if (std::fabs(x2 - mean) <= bound)
             {
                 m_nextValid = false;
+                NS_LOG_DEBUG("value: " << x2 << " stream: " << GetStream() << " mean: " << mean
+                                       << " variance: " << variance << " bound: " << bound);
                 return x2;
             }
             // otherwise, just run this loop again
@@ -765,14 +766,15 @@
 uint32_t
 NormalRandomVariable::GetInteger(uint32_t mean, uint32_t variance, uint32_t bound)
 {
-    NS_LOG_FUNCTION(this << mean << variance << bound);
-    return static_cast<uint32_t>(GetValue(mean, variance, bound));
+    auto v = static_cast<uint32_t>(GetValue(mean, variance, bound));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " mean: " << mean
+                                   << " variance: " << variance << " bound: " << bound);
+    return v;
 }
 
 double
 NormalRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_mean, m_variance, m_bound);
 }
 
@@ -812,14 +814,12 @@
 double
 LogNormalRandomVariable::GetMu() const
 {
-    NS_LOG_FUNCTION(this);
     return m_mu;
 }
 
 double
 LogNormalRandomVariable::GetSigma() const
 {
-    NS_LOG_FUNCTION(this);
     return m_sigma;
 }
 
@@ -829,19 +829,7 @@
  *
  * Copyright (C) 1996, 1997, 1998, 1999, 2000 James Theiler, Brian Gough
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at
- * your option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ * SPDX-License-Identifier: GPL-2.0-or-later
  */
 /* The lognormal distribution has the form
 
@@ -855,9 +843,10 @@
     if (m_nextValid)
     { // use previously generated
         m_nextValid = false;
-        double normal = m_v2 * m_normal;
-
-        return std::exp(sigma * normal + mu);
+        double v = std::exp(sigma * m_v2 * m_normal + mu);
+        NS_LOG_DEBUG("value: " << v << " stream: " << GetStream() << " mu: " << mu
+                               << " sigma: " << sigma);
+        return v;
     }
 
     double v1;
@@ -866,8 +855,6 @@
     double normal;
     double x;
 
-    NS_LOG_FUNCTION(this << mu << sigma);
-
     do
     {
         /* choose x,y in uniform square (-1,-1) to (+1,+1) */
@@ -893,6 +880,8 @@
     m_v2 = v2;
 
     x = std::exp(sigma * normal + mu);
+    NS_LOG_DEBUG("value: " << x << " stream: " << GetStream() << " mu: " << mu
+                           << " sigma: " << sigma);
 
     return x;
 }
@@ -900,14 +889,15 @@
 uint32_t
 LogNormalRandomVariable::GetInteger(uint32_t mu, uint32_t sigma)
 {
-    NS_LOG_FUNCTION(this << mu << sigma);
-    return static_cast<uint32_t>(GetValue(mu, sigma));
+    auto v = static_cast<uint32_t>(GetValue(mu, sigma));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " mu: " << mu
+                                   << " sigma: " << sigma);
+    return v;
 }
 
 double
 LogNormalRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_mu, m_sigma);
 }
 
@@ -945,14 +935,12 @@
 double
 GammaRandomVariable::GetAlpha() const
 {
-    NS_LOG_FUNCTION(this);
     return m_alpha;
 }
 
 double
 GammaRandomVariable::GetBeta() const
 {
-    NS_LOG_FUNCTION(this);
     return m_beta;
 }
 
@@ -975,7 +963,6 @@
 double
 GammaRandomVariable::GetValue(double alpha, double beta)
 {
-    NS_LOG_FUNCTION(this << alpha << beta);
     if (alpha < 1)
     {
         double u = Peek()->RandU01();
@@ -983,6 +970,9 @@
         {
             u = (1 - u);
         }
+        double v = GetValue(1.0 + alpha, beta) * std::pow(u, 1.0 / alpha);
+        NS_LOG_DEBUG("value: " << v << " stream: " << GetStream() << " alpha: " << alpha
+                               << " beta: " << beta);
         return GetValue(1.0 + alpha, beta) * std::pow(u, 1.0 / alpha);
     }
 
@@ -1022,26 +1012,29 @@
         }
     }
 
-    return beta * d * v;
+    double value = beta * d * v;
+    NS_LOG_DEBUG("value: " << value << " stream: " << GetStream() << " alpha: " << alpha
+                           << " beta: " << beta);
+    return value;
 }
 
 double
 GammaRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_alpha, m_beta);
 }
 
 double
 GammaRandomVariable::GetNormalValue(double mean, double variance, double bound)
 {
-    NS_LOG_FUNCTION(this << mean << variance << bound);
     if (m_nextValid)
     { // use previously generated
         m_nextValid = false;
         double x2 = mean + m_v2 * m_y * std::sqrt(variance);
         if (std::fabs(x2 - mean) <= bound)
         {
+            NS_LOG_DEBUG("value: " << x2 << " stream: " << GetStream() << " mean: " << mean
+                                   << " variance: " << variance << " bound: " << bound);
             return x2;
         }
     }
@@ -1069,6 +1062,8 @@
                 m_nextValid = true;
                 m_y = y;
                 m_v2 = v2;
+                NS_LOG_DEBUG("value: " << x1 << " stream: " << GetStream() << " mean: " << mean
+                                       << " variance: " << variance << " bound: " << bound);
                 return x1;
             }
             // otherwise try and return the other if it is valid
@@ -1076,6 +1071,8 @@
             if (std::fabs(x2 - mean) <= bound)
             {
                 m_nextValid = false;
+                NS_LOG_DEBUG("value: " << x2 << " stream: " << GetStream() << " mean: " << mean
+                                       << " variance: " << variance << " bound: " << bound);
                 return x2;
             }
             // otherwise, just run this loop again
@@ -1116,14 +1113,12 @@
 uint32_t
 ErlangRandomVariable::GetK() const
 {
-    NS_LOG_FUNCTION(this);
     return m_k;
 }
 
 double
 ErlangRandomVariable::GetLambda() const
 {
-    NS_LOG_FUNCTION(this);
     return m_lambda;
 }
 
@@ -1142,7 +1137,6 @@
 double
 ErlangRandomVariable::GetValue(uint32_t k, double lambda)
 {
-    NS_LOG_FUNCTION(this << k << lambda);
     double mean = lambda;
     double bound = 0.0;
 
@@ -1151,28 +1145,29 @@
     {
         result += GetExponentialValue(mean, bound);
     }
-
+    NS_LOG_DEBUG("value: " << result << " stream: " << GetStream() << " k: " << k
+                           << " lambda: " << lambda);
     return result;
 }
 
 uint32_t
 ErlangRandomVariable::GetInteger(uint32_t k, uint32_t lambda)
 {
-    NS_LOG_FUNCTION(this << k << lambda);
-    return static_cast<uint32_t>(GetValue(k, lambda));
+    auto v = static_cast<uint32_t>(GetValue(k, lambda));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " k: " << k
+                                   << " lambda: " << lambda);
+    return v;
 }
 
 double
 ErlangRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_k, m_lambda);
 }
 
 double
 ErlangRandomVariable::GetExponentialValue(double mean, double bound)
 {
-    NS_LOG_FUNCTION(this << mean << bound);
     while (true)
     {
         // Get a uniform random variable in [0,1].
@@ -1188,6 +1183,8 @@
         // Use this value if it's acceptable.
         if (bound == 0 || r <= bound)
         {
+            NS_LOG_DEBUG("value: " << r << " stream: " << GetStream() << " mean:: " << mean
+                                   << " bound: " << bound);
             return r;
         }
     }
@@ -1232,21 +1229,18 @@
 double
 TriangularRandomVariable::GetMean() const
 {
-    NS_LOG_FUNCTION(this);
     return m_mean;
 }
 
 double
 TriangularRandomVariable::GetMin() const
 {
-    NS_LOG_FUNCTION(this);
     return m_min;
 }
 
 double
 TriangularRandomVariable::GetMax() const
 {
-    NS_LOG_FUNCTION(this);
     return m_max;
 }
 
@@ -1254,7 +1248,6 @@
 TriangularRandomVariable::GetValue(double mean, double min, double max)
 {
     // Calculate the mode.
-    NS_LOG_FUNCTION(this << mean << min << max);
     double mode = 3.0 * mean - min - max;
 
     // Get a uniform random variable in [0,1].
@@ -1267,25 +1260,32 @@
     // Calculate the triangular random variable.
     if (u <= (mode - min) / (max - min))
     {
-        return min + std::sqrt(u * (max - min) * (mode - min));
+        double v = min + std::sqrt(u * (max - min) * (mode - min));
+        NS_LOG_DEBUG("value: " << v << " stream: " << GetStream() << " mean: " << mean
+                               << " min: " << min << " max: " << max);
+        return v;
     }
     else
     {
-        return max - std::sqrt((1 - u) * (max - min) * (max - mode));
+        double v = max - std::sqrt((1 - u) * (max - min) * (max - mode));
+        NS_LOG_DEBUG("value: " << v << " stream: " << GetStream() << " mean: " << mean
+                               << " min: " << min << " max: " << max);
+        return v;
     }
 }
 
 uint32_t
 TriangularRandomVariable::GetInteger(uint32_t mean, uint32_t min, uint32_t max)
 {
-    NS_LOG_FUNCTION(this << mean << min << max);
-    return static_cast<uint32_t>(GetValue(mean, min, max));
+    auto v = static_cast<uint32_t>(GetValue(mean, min, max));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " mean: " << mean
+                                   << " min: " << min << " max: " << max);
+    return v;
 }
 
 double
 TriangularRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_mean, m_min, m_max);
 }
 
@@ -1321,21 +1321,18 @@
 uint32_t
 ZipfRandomVariable::GetN() const
 {
-    NS_LOG_FUNCTION(this);
     return m_n;
 }
 
 double
 ZipfRandomVariable::GetAlpha() const
 {
-    NS_LOG_FUNCTION(this);
     return m_alpha;
 }
 
 double
 ZipfRandomVariable::GetValue(uint32_t n, double alpha)
 {
-    NS_LOG_FUNCTION(this << n << alpha);
     // Calculate the normalization constant c.
     m_c = 0.0;
     for (uint32_t i = 1; i <= n; i++)
@@ -1353,15 +1350,17 @@
 
     double sum_prob = 0;
     double zipf_value = 0;
-    for (uint32_t i = 1; i <= m_n; i++)
+    for (uint32_t i = 1; i <= n; i++)
     {
-        sum_prob += m_c / std::pow((double)i, m_alpha);
+        sum_prob += m_c / std::pow((double)i, alpha);
         if (sum_prob > u)
         {
             zipf_value = i;
             break;
         }
     }
+    NS_LOG_DEBUG("value: " << zipf_value << " stream: " << GetStream() << " n: " << n
+                           << " alpha: " << alpha);
     return zipf_value;
 }
 
@@ -1369,13 +1368,15 @@
 ZipfRandomVariable::GetInteger(uint32_t n, uint32_t alpha)
 {
     NS_LOG_FUNCTION(this << n << alpha);
-    return static_cast<uint32_t>(GetValue(n, alpha));
+    auto v = static_cast<uint32_t>(GetValue(n, alpha));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " n: " << n
+                                   << " alpha: " << alpha);
+    return v;
 }
 
 double
 ZipfRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_n, m_alpha);
 }
 
@@ -1406,14 +1407,12 @@
 double
 ZetaRandomVariable::GetAlpha() const
 {
-    NS_LOG_FUNCTION(this);
     return m_alpha;
 }
 
 double
 ZetaRandomVariable::GetValue(double alpha)
 {
-    NS_LOG_FUNCTION(this << alpha);
     m_b = std::pow(2.0, alpha - 1.0);
 
     double u;
@@ -1438,25 +1437,25 @@
             v = (1 - v);
         }
 
-        X = std::floor(std::pow(u, -1.0 / (m_alpha - 1.0)));
-        T = std::pow(1.0 + 1.0 / X, m_alpha - 1.0);
+        X = std::floor(std::pow(u, -1.0 / (alpha - 1.0)));
+        T = std::pow(1.0 + 1.0 / X, alpha - 1.0);
         test = v * X * (T - 1.0) / (m_b - 1.0);
     } while (test > (T / m_b));
-
+    NS_LOG_DEBUG("value: " << X << " stream: " << GetStream() << " alpha: " << alpha);
     return X;
 }
 
 uint32_t
 ZetaRandomVariable::GetInteger(uint32_t alpha)
 {
-    NS_LOG_FUNCTION(this << alpha);
-    return static_cast<uint32_t>(GetValue(alpha));
+    auto v = static_cast<uint32_t>(GetValue(alpha));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " alpha: " << alpha);
+    return v;
 }
 
 double
 ZetaRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_alpha);
 }
 
@@ -1521,7 +1520,6 @@
 double
 DeterministicRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     // Make sure the array has been set.
     NS_ASSERT(m_count > 0);
 
@@ -1529,7 +1527,9 @@
     {
         m_next = 0;
     }
-    return m_data[m_next++];
+    double v = m_data[m_next++];
+    NS_LOG_DEBUG("value: " << v << " stream: " << GetStream());
+    return v;
 }
 
 NS_OBJECT_ENSURE_REGISTERED(EmpiricalRandomVariable);
@@ -1569,8 +1569,7 @@
 bool
 EmpiricalRandomVariable::PreSample(double& value)
 {
-    NS_LOG_FUNCTION(this);
-
+    NS_LOG_FUNCTION(this << value);
     if (!m_validated)
     {
         Validate();
@@ -1602,8 +1601,6 @@
 double
 EmpiricalRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
-
     double value;
     if (PreSample(value))
     {
@@ -1619,6 +1616,7 @@
     {
         value = DoSampleCDF(value);
     }
+    NS_LOG_DEBUG("value: " << value << " stream: " << GetStream());
     return value;
 }
 
@@ -1770,8 +1768,6 @@
 double
 BinomialRandomVariable::GetValue(uint32_t trials, double probability)
 {
-    NS_LOG_FUNCTION(this << trials << probability);
-
     double successes = 0;
 
     for (uint32_t i = 0; i < trials; ++i)
@@ -1787,21 +1783,23 @@
             successes += 1;
         }
     }
-
+    NS_LOG_DEBUG("value: " << successes << " stream: " << GetStream() << " trials: " << trials
+                           << " probability: " << probability);
     return successes;
 }
 
 uint32_t
 BinomialRandomVariable::GetInteger(uint32_t trials, uint32_t probability)
 {
-    NS_LOG_FUNCTION(this << trials << probability);
-    return static_cast<uint32_t>(GetValue(trials, probability));
+    auto v = static_cast<uint32_t>(GetValue(trials, probability));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream() << " trials: " << trials
+                                   << " probability: " << probability);
+    return v;
 }
 
 double
 BinomialRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_trials, m_probability);
 }
 
@@ -1832,29 +1830,240 @@
 double
 BernoulliRandomVariable::GetValue(double probability)
 {
-    NS_LOG_FUNCTION(this << probability);
-
     double v = Peek()->RandU01();
     if (IsAntithetic())
     {
         v = (1 - v);
     }
 
-    return (v <= probability) ? 1.0 : 0.0;
+    double value = (v <= probability) ? 1.0 : 0.0;
+    NS_LOG_DEBUG("value: " << value << " stream: " << GetStream()
+                           << " probability: " << probability);
+    return value;
 }
 
 uint32_t
 BernoulliRandomVariable::GetInteger(uint32_t probability)
 {
-    NS_LOG_FUNCTION(this << probability);
-    return static_cast<uint32_t>(GetValue(probability));
+    auto v = static_cast<uint32_t>(GetValue(probability));
+    NS_LOG_DEBUG("integer value: " << v << " stream: " << GetStream()
+                                   << " probability: " << probability);
+    return v;
 }
 
 double
 BernoulliRandomVariable::GetValue()
 {
-    NS_LOG_FUNCTION(this);
     return GetValue(m_probability);
 }
 
+NS_OBJECT_ENSURE_REGISTERED(LaplacianRandomVariable);
+
+TypeId
+LaplacianRandomVariable::GetTypeId()
+{
+    static TypeId tid =
+        TypeId("ns3::LaplacianRandomVariable")
+            .SetParent<RandomVariableStream>()
+            .SetGroupName("Core")
+            .AddConstructor<LaplacianRandomVariable>()
+            .AddAttribute("Location",
+                          "The location parameter for the Laplacian distribution returned by this "
+                          "RNG stream.",
+                          DoubleValue(0.0),
+                          MakeDoubleAccessor(&LaplacianRandomVariable::m_location),
+                          MakeDoubleChecker<double>())
+            .AddAttribute(
+                "Scale",
+                "The scale parameter for the Laplacian distribution returned by this RNG stream.",
+                DoubleValue(1.0),
+                MakeDoubleAccessor(&LaplacianRandomVariable::m_scale),
+                MakeDoubleChecker<double>())
+            .AddAttribute("Bound",
+                          "The bound on the values returned by this RNG stream.",
+                          DoubleValue(0.0),
+                          MakeDoubleAccessor(&LaplacianRandomVariable::m_bound),
+                          MakeDoubleChecker<double>());
+    return tid;
+}
+
+LaplacianRandomVariable::LaplacianRandomVariable()
+{
+    NS_LOG_FUNCTION(this);
+}
+
+double
+LaplacianRandomVariable::GetLocation() const
+{
+    return m_location;
+}
+
+double
+LaplacianRandomVariable::GetScale() const
+{
+    return m_scale;
+}
+
+double
+LaplacianRandomVariable::GetBound() const
+{
+    return m_bound;
+}
+
+double
+LaplacianRandomVariable::GetValue(double location, double scale, double bound)
+{
+    NS_LOG_FUNCTION(this << location << scale << bound);
+    NS_ABORT_MSG_IF(scale <= 0, "Scale parameter should be larger than 0");
+
+    while (true)
+    {
+        // Get a uniform random variable in [-0.5,0.5].
+        auto v = (Peek()->RandU01() - 0.5);
+        if (IsAntithetic())
+        {
+            v = (1 - v);
+        }
+
+        // Calculate the laplacian random variable.
+        const auto sgn = (v > 0) ? 1 : ((v < 0) ? -1 : 0);
+        const auto r = location - (scale * sgn * std::log(1.0 - (2.0 * std::abs(v))));
+
+        // Use this value if it's acceptable.
+        if (bound == 0.0 || std::fabs(r - location) <= bound)
+        {
+            return r;
+        }
+    }
+}
+
+uint32_t
+LaplacianRandomVariable::GetInteger(uint32_t location, uint32_t scale, uint32_t bound)
+{
+    NS_LOG_FUNCTION(this << location << scale << bound);
+    return static_cast<uint32_t>(GetValue(location, scale, bound));
+}
+
+double
+LaplacianRandomVariable::GetValue()
+{
+    NS_LOG_FUNCTION(this);
+    return GetValue(m_location, m_scale, m_bound);
+}
+
+double
+LaplacianRandomVariable::GetVariance(double scale)
+{
+    NS_LOG_FUNCTION(scale);
+    return 2.0 * std::pow(scale, 2.0);
+}
+
+double
+LaplacianRandomVariable::GetVariance() const
+{
+    return GetVariance(m_scale);
+}
+
+NS_OBJECT_ENSURE_REGISTERED(LargestExtremeValueRandomVariable);
+
+TypeId
+LargestExtremeValueRandomVariable::GetTypeId()
+{
+    static TypeId tid =
+        TypeId("ns3::LargestExtremeValueRandomVariable")
+            .SetParent<RandomVariableStream>()
+            .SetGroupName("Core")
+            .AddConstructor<LargestExtremeValueRandomVariable>()
+            .AddAttribute("Location",
+                          "The location parameter for the Largest Extreme Value distribution "
+                          "returned by this RNG stream.",
+                          DoubleValue(0.0),
+                          MakeDoubleAccessor(&LargestExtremeValueRandomVariable::m_location),
+                          MakeDoubleChecker<double>())
+            .AddAttribute("Scale",
+                          "The scale parameter for the Largest Extreme Value distribution "
+                          "returned by this RNG stream.",
+                          DoubleValue(1.0),
+                          MakeDoubleAccessor(&LargestExtremeValueRandomVariable::m_scale),
+                          MakeDoubleChecker<double>());
+    return tid;
+}
+
+LargestExtremeValueRandomVariable::LargestExtremeValueRandomVariable()
+{
+    NS_LOG_FUNCTION(this);
+}
+
+double
+LargestExtremeValueRandomVariable::GetLocation() const
+{
+    return m_location;
+}
+
+double
+LargestExtremeValueRandomVariable::GetScale() const
+{
+    return m_scale;
+}
+
+double
+LargestExtremeValueRandomVariable::GetValue(double location, double scale)
+{
+    NS_LOG_FUNCTION(this << location << scale);
+    NS_ABORT_MSG_IF(scale <= 0, "Scale parameter should be larger than 0");
+
+    // Get a uniform random variable in [0,1].
+    auto v = Peek()->RandU01();
+    if (IsAntithetic())
+    {
+        v = (1 - v);
+    }
+
+    // Calculate the largest extreme value random variable.
+    const auto t = std::log(v) * (-1.0);
+    const auto r = location - (scale * std::log(t));
+
+    return r;
+}
+
+uint32_t
+LargestExtremeValueRandomVariable::GetInteger(uint32_t location, uint32_t scale)
+{
+    NS_LOG_FUNCTION(this << location << scale);
+    return static_cast<uint32_t>(GetValue(location, scale));
+}
+
+double
+LargestExtremeValueRandomVariable::GetValue()
+{
+    NS_LOG_FUNCTION(this);
+    return GetValue(m_location, m_scale);
+}
+
+double
+LargestExtremeValueRandomVariable::GetMean(double location, double scale)
+{
+    NS_LOG_FUNCTION(location << scale);
+    return (location + (scale * std::numbers::egamma));
+}
+
+double
+LargestExtremeValueRandomVariable::GetMean() const
+{
+    return GetMean(m_location, m_scale);
+}
+
+double
+LargestExtremeValueRandomVariable::GetVariance(double scale)
+{
+    NS_LOG_FUNCTION(scale);
+    return std::pow((scale * std::numbers::pi), 2) / 6.0;
+}
+
+double
+LargestExtremeValueRandomVariable::GetVariance() const
+{
+    return GetVariance(m_scale);
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/random-variable-stream.h ns-3.43/src/core/model/random-variable-stream.h
--- ns-3.42/src/core/model/random-variable-stream.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/random-variable-stream.h	2024-10-09 16:41:09.860655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 Georgia Tech Research Corporation
  * Copyright (c) 2011 Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rajib Bhattacharjea<raj.b@gatech.edu>
  *          Hadi Arbabi<marbabi@cs.odu.edu>
@@ -863,6 +852,19 @@
     double GetBound() const;
 
     /**
+     * \brief Returns the mean value for the Weibull distribution returned by this RNG stream.
+     * \return The mean value for the Weibull distribution returned by this RNG stream.
+     */
+    double GetMean() const;
+
+    /**
+     * \copydoc GetMean()
+     * \param [in] scale Scale parameter for the Weibull distribution.
+     * \param [in] shape Shape parameter for the Weibull distribution.
+     */
+    static double GetMean(double scale, double shape);
+
+    /**
      * \copydoc GetValue()
      * \param [in] scale Scale parameter for the Weibull distribution.
      * \param [in] shape Shape parameter for the Weibull distribution.
@@ -2271,6 +2273,234 @@
 
 }; // class BernoulliRandomVariable
 
+/**
+ * \ingroup randomvariable
+ * \brief The laplacian distribution Random Number Generator (RNG).
+ *
+ * This class supports the creation of objects that return random numbers
+ * from a fixed laplacian distribution.
+ *
+ * The probability density function of a laplacian variable
+ * is defined as:
+ *
+ *   \f[
+ *      P(x; \mu, \beta) dx = \frac{1}{2 \beta} e^{\frac{- \abs{x - \mu}}{\beta}} dx
+ *   \f]
+ *
+ * where \f$\mu\f$ is the \c Location configurable attribute and \f$\beta\f$
+ * is the \c Scale configurable attribute.  This distribution has mean \f$\mu\f$
+ * and variance \f$ \sigma^2 = 2 \beta^2 \f$.
+ *
+ * The laplacian RNG value \f$x\f$ is generated by
+ *
+ *   \f[
+ *      x = \mu - \beta sgn(u) \log(1 - 2 \abs{u})
+ *   \f]
+ *
+ * where \f$u\f$ is a uniform random variable on [-0.5,0.5).
+ *
+ * \par Bounded Distribution
+ *
+ * The Laplacian distribution can be bounded symmetrically about the mean by
+ * the \c Bound parameter, \f$b\f$, _i.e._ its values are confined to the interval
+ * \f$[\mu - b, \mu + b]\f$.  This preserves the mean but decreases the variance.
+ */
+class LaplacianRandomVariable : public RandomVariableStream
+{
+  public:
+    /**
+     * \brief Register this type.
+     * \return The object TypeId.
+     */
+    static TypeId GetTypeId();
+
+    /**
+     * \brief Creates an unbounded laplacian distribution RNG with the default
+     * values for the location and the scale.
+     */
+    LaplacianRandomVariable();
+
+    /**
+     * \brief Get the configured location value of this RNG.
+     *
+     * \return The configured location value.
+     */
+    double GetLocation() const;
+
+    /**
+     * \brief Get the configured scale value of this RNG.
+     *
+     * \return The configured scale value.
+     */
+    double GetScale() const;
+
+    /**
+     * \brief Get the configured bound of this RNG.
+     * \return The bound.
+     */
+    double GetBound() const;
+
+    /**
+     * \copydoc GetValue()
+     * \param [in] location location value of the laplacian distribution.
+     * \param [in] scale scale value of the laplacian distribution.
+     * \param [in] bound bound on values returned.
+     */
+    double GetValue(double location, double scale, double bound);
+
+    /** \copydoc GetValue(double,double,double) */
+    uint32_t GetInteger(uint32_t location, uint32_t scale, uint32_t bound);
+
+    // Inherited
+    double GetValue() override;
+    using RandomVariableStream::GetInteger;
+
+    /**
+     * \brief Returns the variance value for the laplacian distribution returned by this RNG stream.
+     * \return The variance value for the laplacian distribution returned by this RNG stream.
+     */
+    double GetVariance() const;
+
+    /**
+     * \copydoc GetVariance()
+     * \param [in] scale scale value of the laplacian distribution.
+     */
+    static double GetVariance(double scale);
+
+  private:
+    /** The location value of the laplacian distribution. */
+    double m_location;
+
+    /** The scale value of the laplacian distribution. */
+    double m_scale;
+
+    /** The bound on values that can be returned by this RNG stream. */
+    double m_bound;
+
+}; // class LaplacianRandomVariable
+
+/**
+ * \ingroup randomvariable
+ * \brief The Largest Extreme Value distribution Random Number Generator (RNG).
+ *
+ * This class supports the creation of objects that return random numbers from a fixed Largest
+ * Extreme Value distribution. This corresponds to the type-I Generalized Extreme Value
+ * distribution, also known as Gumbel distribution
+ * (https://en.wikipedia.org/wiki/Gumbel_distribution).
+ *
+ * The probability density function of a Largest Extreme Value variable
+ * is defined as:
+ *
+ *   \f[
+ *      P(x; \mu, \beta) dx = \frac{1}{\beta} e^{-(z+ e^{-z})} dx, \quad z = \frac{x - \mu}{\beta}
+ *   \f]
+ *
+ * where \f$\mu\f$ is the \c Location configurable attribute and \f$\beta\f$
+ * is the \c Scale configurable attribute.
+ *
+ * The Largest Extreme Value RNG value \f$x\f$ is generated by
+ *
+ *   \f[
+ *      x = \mu - \beta \log(-\log(u))
+ *   \f]
+ *
+ * where \f$u\f$ is a uniform random variable on [0,1).
+ *
+ * The mean of the distribution is:
+ *
+ *   \f[
+ *      E = \mu + y \beta
+ *   \f]
+ *
+ * where \f$y\f$ is the Euler-Mascheroni constant.
+ *
+ * The variance of the distribution is
+ *
+ *   \f[
+ *      \sigma^2 = 6 \pi^2 \beta^2
+ *   \f]
+ */
+class LargestExtremeValueRandomVariable : public RandomVariableStream
+{
+  public:
+    /**
+     * \brief Register this type.
+     * \return The object TypeId.
+     */
+    static TypeId GetTypeId();
+
+    /**
+     * \brief Creates a Largest Extreme Value distribution RNG with the default
+     * values for the location and the scale.
+     */
+    LargestExtremeValueRandomVariable();
+
+    /**
+     * \brief Get the configured location value of this RNG.
+     *
+     * \return The configured location value.
+     */
+    double GetLocation() const;
+
+    /**
+     * \brief Get the configured scale value of this RNG.
+     *
+     * \return The configured scale value.
+     */
+    double GetScale() const;
+
+    /**
+     * \copydoc GetValue()
+     * \param [in] location location value of the Largest Extreme Value distribution.
+     * \param [in] scale scale value of the Largest Extreme Value distribution.
+     */
+    double GetValue(double location, double scale);
+
+    /** \copydoc GetValue(double,double) */
+    uint32_t GetInteger(uint32_t location, uint32_t scale);
+
+    // Inherited
+    double GetValue() override;
+    using RandomVariableStream::GetInteger;
+
+    /**
+     * \brief Returns the mean value for the Largest Extreme Value distribution returned by this RNG
+     * stream.
+     * \return The mean value for the Largest Extreme Value distribution returned by this
+     * RNG stream.
+     */
+    double GetMean() const;
+
+    /**
+     * \copydoc GetMean()
+     * \param [in] location location value of the Largest Extreme Value distribution.
+     * \param [in] scale scale value of the Largest Extreme Value distribution.
+     */
+    static double GetMean(double location, double scale);
+
+    /**
+     * \brief Returns the variance value for the Largest Extreme Value distribution returned by this
+     * RNG stream.
+     * \return The variance value for the Largest Extreme Value distribution returned by
+     * this RNG stream.
+     */
+    double GetVariance() const;
+
+    /**
+     * \copydoc GetVariance()
+     * \param [in] scale scale value of the Largest Extreme Value distribution.
+     */
+    static double GetVariance(double scale);
+
+  private:
+    /** The location value of the Largest Extreme Value distribution. */
+    double m_location;
+
+    /** The scale value of the Largest Extreme Value distribution. */
+    double m_scale;
+
+}; // class LargestExtremeValueRandomVariable
+
 } // namespace ns3
 
 #endif /* RANDOM_VARIABLE_STREAM_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/realtime-simulator-impl.cc ns-3.43/src/core/model/realtime-simulator-impl.cc
--- ns-3.42/src/core/model/realtime-simulator-impl.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/realtime-simulator-impl.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "realtime-simulator-impl.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/realtime-simulator-impl.h ns-3.43/src/core/model/realtime-simulator-impl.h
--- ns-3.42/src/core/model/realtime-simulator-impl.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/realtime-simulator-impl.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef REALTIME_SIMULATOR_IMPL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/rng-seed-manager.cc ns-3.43/src/core/model/rng-seed-manager.cc
--- ns-3.42/src/core/model/rng-seed-manager.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/rng-seed-manager.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -112,4 +101,10 @@
     return next;
 }
 
+void
+RngSeedManager::ResetNextStreamIndex()
+{
+    g_nextStreamIndex = 0;
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/rng-seed-manager.h ns-3.43/src/core/model/rng-seed-manager.h
--- ns-3.42/src/core/model/rng-seed-manager.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/rng-seed-manager.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Mathieu Lacage
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -104,6 +93,11 @@
      * \returns The next stream index.
      */
     static uint64_t GetNextStreamIndex();
+
+    /**
+     * Resets the global stream index counter.
+     */
+    static void ResetNextStreamIndex();
 };
 
 /** Alias for compatibility. */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/rng-stream.cc ns-3.43/src/core/model/rng-stream.cc
--- ns-3.42/src/core/model/rng-stream.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/rng-stream.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 //
 //  Copyright (C) 2001  Pierre L'Ecuyer (lecuyer@iro.umontreal.ca)
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Modified for ns-3 by:
 //   - Rajib Bhattacharjea<raj.b@gatech.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/rng-stream.h ns-3.43/src/core/model/rng-stream.h
--- ns-3.42/src/core/model/rng-stream.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/rng-stream.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 //
 //  Copyright (C) 2001  Pierre L'Ecuyer (lecuyer@iro.umontreal.ca)
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Modified for ns-3 by: Rajib Bhattacharjea<raj.b@gatech.edu>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/scheduler.cc ns-3.43/src/core/model/scheduler.cc
--- ns-3.42/src/core/model/scheduler.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/scheduler.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/scheduler.h ns-3.43/src/core/model/scheduler.h
--- ns-3.42/src/core/model/scheduler.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/scheduler.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/show-progress.cc ns-3.43/src/core/model/show-progress.cc
--- ns-3.42/src/core/model/show-progress.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/show-progress.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro <gjc@inescporto.pt>
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/show-progress.h ns-3.43/src/core/model/show-progress.h
--- ns-3.42/src/core/model/show-progress.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/show-progress.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro <gjc@inescporto.pt>
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/shuffle.h ns-3.43/src/core/model/shuffle.h
--- ns-3.42/src/core/model/shuffle.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/shuffle.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/simple-ref-count.h ns-3.43/src/core/model/simple-ref-count.h
--- ns-3.42/src/core/model/simple-ref-count.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/simple-ref-count.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation, INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: George Riley <riley@ece.gatech.edu>
  *          Gustavo Carneiro <gjcarneiro@gmail.com>,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/simulation-singleton.h ns-3.43/src/core/model/simulation-singleton.h
--- ns-3.42/src/core/model/simulation-singleton.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/simulation-singleton.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/simulator.cc ns-3.43/src/core/model/simulator.cc
--- ns-3.42/src/core/model/simulator.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/simulator.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/simulator.h ns-3.43/src/core/model/simulator.h
--- ns-3.42/src/core/model/simulator.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/simulator.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/simulator-impl.cc ns-3.43/src/core/model/simulator-impl.cc
--- ns-3.42/src/core/model/simulator-impl.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/simulator-impl.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/simulator-impl.h ns-3.43/src/core/model/simulator-impl.h
--- ns-3.42/src/core/model/simulator-impl.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/simulator-impl.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -54,7 +43,7 @@
      */
     static TypeId GetTypeId();
 
-    /**  \copydoc Simulator::Destroy   */
+    /** \copydoc Simulator::Destroy */
     virtual void Destroy() = 0;
     /** \copydoc Simulator::IsFinished */
     virtual bool IsFinished() const = 0;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/singleton.h ns-3.43/src/core/model/singleton.h
--- ns-3.42/src/core/model/singleton.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/singleton.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/string.cc ns-3.43/src/core/model/string.cc
--- ns-3.42/src/core/model/string.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/string.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/string.h ns-3.43/src/core/model/string.h
--- ns-3.42/src/core/model/string.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/string.h	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/synchronizer.cc ns-3.43/src/core/model/synchronizer.cc
--- ns-3.42/src/core/model/synchronizer.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/synchronizer.cc	2024-10-09 16:41:09.860655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "synchronizer.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/synchronizer.h ns-3.43/src/core/model/synchronizer.h
--- ns-3.42/src/core/model/synchronizer.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/synchronizer.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef SYNCHRONIZER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/system-path.cc ns-3.43/src/core/model/system-path.cc
--- ns-3.42/src/core/model/system-path.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/system-path.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/system-path.h ns-3.43/src/core/model/system-path.h
--- ns-3.42/src/core/model/system-path.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/system-path.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/system-wall-clock-ms.cc ns-3.43/src/core/model/system-wall-clock-ms.cc
--- ns-3.42/src/core/model/system-wall-clock-ms.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/system-wall-clock-ms.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/system-wall-clock-ms.h ns-3.43/src/core/model/system-wall-clock-ms.h
--- ns-3.42/src/core/model/system-wall-clock-ms.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/system-wall-clock-ms.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/system-wall-clock-timestamp.cc ns-3.43/src/core/model/system-wall-clock-timestamp.cc
--- ns-3.42/src/core/model/system-wall-clock-timestamp.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/system-wall-clock-timestamp.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/system-wall-clock-timestamp.h ns-3.43/src/core/model/system-wall-clock-timestamp.h
--- ns-3.42/src/core/model/system-wall-clock-timestamp.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/system-wall-clock-timestamp.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/test.cc ns-3.43/src/core/model/test.cc
--- ns-3.42/src/core/model/test.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/test.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "test.h"
@@ -22,6 +11,7 @@
 #include "config.h"
 #include "des-metrics.h"
 #include "log.h"
+#include "rng-seed-manager.h"
 #include "singleton.h"
 #include "system-path.h"
 
@@ -357,6 +347,7 @@
     m_result->clock.Start();
     for (auto i = m_children.begin(); i != m_children.end(); ++i)
     {
+        RngSeedManager::ResetNextStreamIndex();
         TestCase* test = *i;
         test->Run(runner);
         if (IsFailed())
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/test.h ns-3.43/src/core/model/test.h
--- ns-3.42/src/core/model/test.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/test.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef NS3_TEST_H
@@ -1068,16 +1057,21 @@
         TAKES_FOREVER = 3 //!< Very long running test.
     };
 
+    /**
+     * Deprecated test duration simple enums.
+     *
+     * Use the `TestCase::Duration` enum class symbols instead.
+     * @{
+     */
     NS_DEPRECATED_3_42("Use Duration::QUICK instead")
-    static constexpr auto QUICK = Duration::QUICK; //!< @deprecated See Duration::QUICK.
+    static constexpr auto QUICK = Duration::QUICK;
     NS_DEPRECATED_3_42("Use Duration::EXTENSIVE instead")
-    static constexpr auto EXTENSIVE = Duration::EXTENSIVE; //!< @deprecated See Duration::EXTENSIVE.
+    static constexpr auto EXTENSIVE = Duration::EXTENSIVE;
     NS_DEPRECATED_3_42("Use Duration::TAKES_FOREVER instead")
-    static constexpr auto TAKES_FOREVER =
-        Duration::TAKES_FOREVER; //!< @deprecated See Duration::TAKES_FOREVER.
+    static constexpr auto TAKES_FOREVER = Duration::TAKES_FOREVER;
 
-    using TestDuration NS_DEPRECATED_3_42("Use Duration instead") =
-        Duration; //!< @deprecated See Duration.
+    using TestDuration NS_DEPRECATED_3_42("Use Duration instead") = Duration;
+    /**@}*/
 
     /**
      *  Destructor
@@ -1278,23 +1272,30 @@
      */
     enum class Type
     {
-        ALL = 0,    //!<
+        ALL = 0,    //!< Token to represent all tests.
         UNIT,       //!< This test suite implements a Unit Test
         SYSTEM,     //!< This test suite implements a System Test
         EXAMPLE,    //!< This test suite implements an Example Test
         PERFORMANCE //!< This test suite implements a Performance Test
     };
 
+    /**
+     * Deprecated test type simple enums.
+     *
+     * Use the `TestSuite::Type` enum class symbols instead.
+     * @{
+     */
     NS_DEPRECATED_3_42("Use Type::ALL instead")
-    static constexpr auto ALL = Type::ALL; //!< @deprecated See Type::ALL.
+    static constexpr auto ALL = Type::ALL;
     NS_DEPRECATED_3_42("Use Type::UNIT instead")
-    static constexpr auto UNIT = Type::UNIT; //!< @deprecated See Type::UNIT.
+    static constexpr auto UNIT = Type::UNIT;
     NS_DEPRECATED_3_42("Use Type::SYSTEM instead")
-    static constexpr auto SYSTEM = Type::SYSTEM; //!< @deprecated See Type::SYSTEM.
+    static constexpr auto SYSTEM = Type::SYSTEM;
     NS_DEPRECATED_3_42("Use Type::EXAMPLE instead")
-    static constexpr auto EXAMPLE = Type::EXAMPLE; //!< @deprecated See Type::EXAMPLE.
+    static constexpr auto EXAMPLE = Type::EXAMPLE;
     NS_DEPRECATED_3_42("Use Type::PERFORMANCE instead")
-    static constexpr auto PERFORMANCE = Type::PERFORMANCE; //!< @deprecated See Type::PERFORMANCE.
+    static constexpr auto PERFORMANCE = Type::PERFORMANCE;
+    /**@}*/
 
     /**
      * \brief Construct a new test suite.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/time.cc ns-3.43/src/core/model/time.cc
--- ns-3.42/src/core/model/time.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/time.cc	2024-10-09 16:41:09.864655700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005,2006 INRIA
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * TimeStep support by Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/time-printer.cc ns-3.43/src/core/model/time-printer.cc
--- ns-3.42/src/core/model/time-printer.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/time-printer.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/time-printer.h ns-3.43/src/core/model/time-printer.h
--- ns-3.42/src/core/model/time-printer.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/time-printer.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/timer.cc ns-3.43/src/core/model/timer.cc
--- ns-3.42/src/core/model/timer.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/timer.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/timer.h ns-3.43/src/core/model/timer.h
--- ns-3.42/src/core/model/timer.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/timer.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/timer-impl.h ns-3.43/src/core/model/timer-impl.h
--- ns-3.42/src/core/model/timer-impl.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/timer-impl.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/traced-callback.h ns-3.43/src/core/model/traced-callback.h
--- ns-3.42/src/core/model/traced-callback.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/traced-callback.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/traced-value.h ns-3.43/src/core/model/traced-value.h
--- ns-3.42/src/core/model/traced-value.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/traced-value.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/trace-source-accessor.cc ns-3.43/src/core/model/trace-source-accessor.cc
--- ns-3.42/src/core/model/trace-source-accessor.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/trace-source-accessor.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/trace-source-accessor.h ns-3.43/src/core/model/trace-source-accessor.h
--- ns-3.42/src/core/model/trace-source-accessor.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/trace-source-accessor.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/trickle-timer.cc ns-3.43/src/core/model/trickle-timer.cc
--- ns-3.42/src/core/model/trickle-timer.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/trickle-timer.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/trickle-timer.h ns-3.43/src/core/model/trickle-timer.h
--- ns-3.42/src/core/model/trickle-timer.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/trickle-timer.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/tuple.h ns-3.43/src/core/model/tuple.h
--- ns-3.42/src/core/model/tuple.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/tuple.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/type-id.cc ns-3.43/src/core/model/type-id.cc
--- ns-3.42/src/core/model/type-id.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/type-id.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -85,6 +74,13 @@
      */
     uint16_t AllocateUid(std::string name);
     /**
+     * Add a deprecated name for the type id.  Use of this name raises
+     * a runtime warning, and only one deprecated name is supported.
+     * \param [in] uid The id.
+     * \param [in] name The deprecated name.
+     */
+    void AddDeprecatedName(uint16_t uid, const std::string& name);
+    /**
      * Set the parent of a type id.
      * \param [in] uid The id.
      * \param [in] parent The id of the parent.
@@ -132,6 +128,12 @@
      */
     std::string GetName(uint16_t uid) const;
     /**
+     * Get the deprecated name of a type id.
+     * \param [in] uid The id.
+     * \returns The name of the type id.
+     */
+    std::string GetDeprecatedName(uint16_t uid) const;
+    /**
      * Get the hash of a type id.
      * \param [in] uid The id.
      * \returns The hash of the type id.
@@ -297,6 +299,8 @@
     {
         /** The type id name. */
         std::string name;
+        /** A deprecated type id name. */
+        std::string deprecatedName;
         /** The type id hash value. */
         TypeId::hash_t hash;
         /** The parent type id. */
@@ -427,7 +431,7 @@
             uint16_t oldUid = GetUid(hinfo->hash);
             m_hashmap.erase(m_hashmap.find(hinfo->hash));
             hinfo->hash = hash | HashChainFlag;
-            m_hashmap.insert(std::make_pair(hinfo->hash, oldUid));
+            m_hashmap.insert({hinfo->hash, oldUid});
             // leave new hash unchained
         }
     }
@@ -447,8 +451,8 @@
     auto uid = static_cast<uint16_t>(tuid);
 
     // Add to both maps:
-    m_namemap.insert(std::make_pair(name, uid));
-    m_hashmap.insert(std::make_pair(hash, uid));
+    m_namemap.insert({name, uid});
+    m_hashmap.insert({hash, uid});
     NS_LOG_LOGIC(IIDL << uid);
     return uid;
 }
@@ -464,6 +468,19 @@
 }
 
 void
+IidManager::AddDeprecatedName(uint16_t uid, const std::string& name)
+{
+    NS_LOG_FUNCTION(IID << uid << name);
+    IidInformation* info = LookupInformation(uid);
+    NS_ASSERT_MSG(info->deprecatedName.empty(),
+                  "Deprecated name already added: " << info->deprecatedName);
+    const auto [it, success] = m_namemap.insert({name, uid});
+    NS_ASSERT_MSG(success,
+                  "Deprecated name " << name << " insertion failed (possibly a duplicate?)");
+    info->deprecatedName = name;
+}
+
+void
 IidManager::SetParent(uint16_t uid, uint16_t parent)
 {
     NS_LOG_FUNCTION(IID << uid << parent);
@@ -546,6 +563,15 @@
     return information->name;
 }
 
+std::string
+IidManager::GetDeprecatedName(uint16_t uid) const
+{
+    NS_LOG_FUNCTION(IID << uid);
+    IidInformation* information = LookupInformation(uid);
+    NS_LOG_LOGIC(IIDL << information->deprecatedName);
+    return information->deprecatedName;
+}
+
 TypeId::hash_t
 IidManager::GetHash(uint16_t uid) const
 {
@@ -833,11 +859,26 @@
 }
 
 TypeId
+TypeId::AddDeprecatedName(const std::string& name)
+{
+    NS_LOG_FUNCTION(this << name);
+    IidManager::Get()->AddDeprecatedName(m_tid, name);
+    NS_LOG_INFO("Set deprecated name " << name << " for TypeId "
+                                       << IidManager::Get()->GetName(m_tid));
+    return *this;
+}
+
+TypeId
 TypeId::LookupByName(std::string name)
 {
     NS_LOG_FUNCTION(name);
     uint16_t uid = IidManager::Get()->GetUid(name);
-    NS_ASSERT_MSG(uid != 0, "Assert in TypeId::LookupByName: " << name << " not found");
+    NS_ASSERT_MSG(uid, "Assert in TypeId::LookupByName: " << name << " not found");
+    if (IidManager::Get()->GetDeprecatedName(uid) == name)
+    {
+        std::cerr << "Deprecation warning for name " << name << "; use "
+                  << IidManager::Get()->GetName(uid) << " instead" << std::endl;
+    }
     return TypeId(uid);
 }
 
@@ -851,6 +892,11 @@
         return false;
     }
     *tid = TypeId(uid);
+    if (IidManager::Get()->GetDeprecatedName(uid) == name)
+    {
+        std::cerr << "Deprecation warning for name " << name << "; use "
+                  << IidManager::Get()->GetName(uid) << " instead" << std::endl;
+    }
     return true;
 }
 
@@ -890,41 +936,64 @@
     return TypeId(IidManager::Get()->GetRegistered(i));
 }
 
+std::tuple<bool, TypeId, TypeId::AttributeInformation>
+TypeId::FindAttribute(const TypeId& tid, const std::string& name)
+{
+    TypeId currentTid = tid;
+    TypeId parentTid;
+    while (true)
+    {
+        for (std::size_t i = 0; i < currentTid.GetAttributeN(); ++i)
+        {
+            const AttributeInformation& attributeInfo = currentTid.GetAttribute(i);
+            if (attributeInfo.name == name)
+            {
+                return {true, currentTid, attributeInfo};
+            }
+        }
+
+        parentTid = currentTid.GetParent();
+
+        if (parentTid == currentTid)
+        {
+            break;
+        }
+
+        currentTid = parentTid;
+    }
+    return {false, TypeId(), AttributeInformation()};
+}
+
 bool
-TypeId::LookupAttributeByName(std::string name, TypeId::AttributeInformation* info) const
+TypeId::LookupAttributeByName(std::string name,
+                              TypeId::AttributeInformation* info,
+                              bool permissive) const
 {
     NS_LOG_FUNCTION(this << name << info);
-    TypeId tid;
-    TypeId nextTid = *this;
-    do
+    auto [found, tid, attribute] = FindAttribute(*this, name);
+    if (found)
     {
-        tid = nextTid;
-        for (std::size_t i = 0; i < tid.GetAttributeN(); i++)
+        if (attribute.supportLevel == TypeId::SUPPORTED)
+        {
+            *info = attribute;
+            return true;
+        }
+        else if (attribute.supportLevel == TypeId::DEPRECATED)
         {
-            TypeId::AttributeInformation tmp = tid.GetAttribute(i);
-            if (tmp.name == name)
+            if (!permissive)
             {
-                if (tmp.supportLevel == TypeId::SUPPORTED)
-                {
-                    *info = tmp;
-                    return true;
-                }
-                else if (tmp.supportLevel == TypeId::DEPRECATED)
-                {
-                    std::cerr << "Attribute '" << name << "' is deprecated: " << tmp.supportMsg
-                              << std::endl;
-                    *info = tmp;
-                    return true;
-                }
-                else if (tmp.supportLevel == TypeId::OBSOLETE)
-                {
-                    NS_FATAL_ERROR("Attribute '" << name << "' is obsolete, with no fallback: "
-                                                 << tmp.supportMsg);
-                }
+                std::cerr << "Attribute '" << name << "' is deprecated: " << attribute.supportMsg
+                          << std::endl;
             }
+            *info = attribute;
+            return true;
         }
-        nextTid = tid.GetParent();
-    } while (nextTid != tid);
+        else if (attribute.supportLevel == TypeId::OBSOLETE)
+        {
+            NS_FATAL_ERROR("Attribute '"
+                           << name << "' is obsolete, with no fallback: " << attribute.supportMsg);
+        }
+    }
     return false;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/type-id.h ns-3.43/src/core/model/type-id.h
--- ns-3.42/src/core/model/type-id.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/type-id.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -183,6 +172,20 @@
     explicit TypeId(const std::string& name);
 
     /**
+     * Add an deprecated name for a TypeId.
+     *
+     * \param [in] name The deprecated name.
+     * \return This TypeId instance.
+     *
+     * To allow for deprecations (such as moving a TypeId into a namespace
+     * but wishing to preserve the original string from namespace ns3),
+     * one additional deprecated name can be registered for a TypeId.  This
+     * deprecated name is not retrievable by GetName().  A runtime warning is
+     * generated if the name is used, and only one deprecated name is supported.
+     */
+    TypeId AddDeprecatedName(const std::string& name);
+
+    /**
      * Get the parent of this TypeId.
      *
      * \returns The parent of this TypeId
@@ -465,15 +468,31 @@
     TypeId HideFromDocumentation();
 
     /**
+     * Find an attribute by name in the inheritance tree for a given TypeId.
+     *
+     * \param [in] tid The TypeId to start the search from.
+     * \param [in] name The name of the attribute to search for.
+     * \return A tuple containing a boolean that indicates whether the attribute was found, the
+     * TypeId where the attribute was found, and the AttributeInformation of the found attribute.
+     */
+    static std::tuple<bool, TypeId, AttributeInformation> FindAttribute(const TypeId& tid,
+                                                                        const std::string& name);
+
+    /**
      * Find an Attribute by name, retrieving the associated AttributeInformation.
      *
      * \param [in]  name The name of the requested attribute
      * \param [in,out] info A pointer to the TypeId::AttributeInformation
      *              data structure where the result value of this method
      *              will be stored.
+     * \param [in] permissive If false (by default), will generate warnings and errors for
+     * deprecated and obsolete attributes, respectively. If set to true, warnings for deprecated
+     * attributes will be suppressed.
      * \returns \c true if the requested attribute could be found.
      */
-    bool LookupAttributeByName(std::string name, AttributeInformation* info) const;
+    bool LookupAttributeByName(std::string name,
+                               AttributeInformation* info,
+                               bool permissive = false) const;
     /**
      * Find a TraceSource by name.
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/type-name.h ns-3.43/src/core/model/type-name.h
--- ns-3.42/src/core/model/type-name.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/type-name.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -37,7 +26,7 @@
  *
  * Type name strings for AttributeValue types.
  * Custom classes should add a template specialization of this function
- * using the macro \c TYPE_NAME_GET_DEFINE(T).
+ * using the macro \c TYPENAMEGET_DEFINE(T).
  *
  * \tparam T \explicit The type.
  * \returns The type name as a string.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/type-traits.h ns-3.43/src/core/model/type-traits.h
--- ns-3.42/src/core/model/type-traits.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/type-traits.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,24 +1,14 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
 #ifndef TYPE_TRAITS_H
 #define TYPE_TRAITS_H
 
+#include "deprecated.h"
 #include "ptr.h"
 
 /**
@@ -36,7 +26,7 @@
  *  \tparam T \deduced The type to inspect.
  */
 template <typename T>
-struct TypeTraits
+struct NS_DEPRECATED_3_43("Use functions provided by #include <type_traits>") TypeTraits
 {
   private:
     /** Null value type traits. */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/uinteger.cc ns-3.43/src/core/model/uinteger.cc
--- ns-3.42/src/core/model/uinteger.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/uinteger.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/uinteger.h ns-3.43/src/core/model/uinteger.h
--- ns-3.42/src/core/model/uinteger.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/uinteger.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/uniform-random-bit-generator.h ns-3.43/src/core/model/uniform-random-bit-generator.h
--- ns-3.42/src/core/model/uniform-random-bit-generator.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/uniform-random-bit-generator.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/unix-fd-reader.cc ns-3.43/src/core/model/unix-fd-reader.cc
--- ns-3.42/src/core/model/unix-fd-reader.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/unix-fd-reader.cc	2024-10-09 16:41:09.864655700 -0700
@@ -2,18 +2,7 @@
 /*
  * Copyright (c) 2010 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Goff <thomas.goff@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/val-array.h ns-3.43/src/core/model/val-array.h
--- ns-3.42/src/core/model/val-array.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/val-array.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Biljana Bojovic <bbojovic@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/vector.cc ns-3.43/src/core/model/vector.cc
--- ns-3.42/src/core/model/vector.cc	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/vector.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/vector.h ns-3.43/src/core/model/vector.h
--- ns-3.42/src/core/model/vector.h	2024-05-29 15:29:46.936073000 -0700
+++ ns-3.43/src/core/model/vector.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -394,25 +383,25 @@
 
 // Document these by hand so they go in group attribute_Vector3D
 
-/*!
-\ingroup attribute_Vector3D
-\fn ns3::Ptr<const ns3::AttributeAccessor> ns3::MakeVectorAccessor (T1 a1)
-\copydoc ns3::MakeAccessorHelper(T1)
-\see AttributeAccessor
-*/
-
-/*!
-\ingroup attribute_Vector3D
-\fn ns3::Ptr<const ns3::AttributeAccessor> ns3::MakeVectorAccessor (T1 a1, T2 a2)
-\copydoc ns3::MakeAccessorHelper(T1,T2)
-\see AttributeAccessor
-*/
-
-/*!
-\ingroup attribute_Vector3D
-\fn ns3::Ptr<const ns3::AttributeChecker> ns3::MakeVectorChecker ()
-\returns The AttributeChecker.
-\see AttributeChecker
-*/
+/**
+ * \ingroup attribute_Vector3D
+ * \fn ns3::Ptr<const ns3::AttributeAccessor> ns3::MakeVectorAccessor (T1 a1)
+ * \copydoc ns3::MakeAccessorHelper(T1)
+ * \see AttributeAccessor
+ */
+
+/**
+ * \ingroup attribute_Vector3D
+ * \fn ns3::Ptr<const ns3::AttributeAccessor> ns3::MakeVectorAccessor (T1 a1, T2 a2)
+ * \copydoc ns3::MakeAccessorHelper(T1,T2)
+ * \see AttributeAccessor
+ */
+
+/**
+ * \ingroup attribute_Vector3D
+ * \fn ns3::Ptr<const ns3::AttributeChecker> ns3::MakeVectorChecker ()
+ * \returns The AttributeChecker.
+ * \see AttributeChecker
+ */
 
 #endif /* NS3_VECTOR_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/version.cache ns-3.43/src/core/model/version.cache
--- ns-3.42/src/core/model/version.cache	2024-05-29 15:30:10.908134200 -0700
+++ ns-3.43/src/core/model/version.cache	2024-10-09 16:41:49.368803700 -0700
@@ -1,10 +1,10 @@
-CLOSEST_TAG = '"ns-3.42"'
-VERSION_COMMIT_HASH = '"gab4cce021"'
+CLOSEST_TAG = '"ns-3.43"'
+VERSION_COMMIT_HASH = '"g753817468"'
 VERSION_DIRTY_FLAG = '0'
 VERSION_MAJOR = '3'
-VERSION_MINOR = '42'
+VERSION_MINOR = '43'
 VERSION_PATCH = '0'
 VERSION_RELEASE_CANDIDATE = '""'
-VERSION_TAG = '"ns-3.42"'
+VERSION_TAG = '"ns-3.43"'
 VERSION_TAG_DISTANCE = '0'
 VERSION_BUILD_PROFILE = 'default'
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/version.cc ns-3.43/src/core/model/version.cc
--- ns-3.42/src/core/model/version.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/model/version.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathew Bielejeski <bielejeski1@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/version-defines.h.in ns-3.43/src/core/model/version-defines.h.in
--- ns-3.42/src/core/model/version-defines.h.in	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/model/version-defines.h.in	2024-10-09 16:41:09.864655700 -0700
@@ -1,19 +1,7 @@
-/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathew Bielejeski <bielejeski1@llnl.gov>
  */
@@ -22,16 +10,16 @@
 #define NS3_VERSION_DEFINES_H_
 
 /**
-  * \file
-  * \ingroup buildversion
-  * Defines the macro values for printing the build version.
-  * These will be populated by the build system.
-  */
+ * \file
+ * \ingroup buildversion
+ * Defines the macro values for printing the build version.
+ * These will be populated by the build system.
+ */
 
 /**
-  * \ingroup buildversion
-  * @{
-  */
+ * \ingroup buildversion
+ * @{
+ */
 
 /**
  * The first tag found which matches the pattern ns-3*.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/version.h ns-3.43/src/core/model/version.h
--- ns-3.42/src/core/model/version.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/model/version.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathew Bielejeski <bielejeski1@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/wall-clock-synchronizer.cc ns-3.43/src/core/model/wall-clock-synchronizer.cc
--- ns-3.42/src/core/model/wall-clock-synchronizer.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/model/wall-clock-synchronizer.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "wall-clock-synchronizer.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/wall-clock-synchronizer.h ns-3.43/src/core/model/wall-clock-synchronizer.h
--- ns-3.42/src/core/model/wall-clock-synchronizer.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/model/wall-clock-synchronizer.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef WALL_CLOCK_CLOCK_SYNCHRONIZER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/warnings.h ns-3.43/src/core/model/warnings.h
--- ns-3.42/src/core/model/warnings.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/model/warnings.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/watchdog.cc ns-3.43/src/core/model/watchdog.cc
--- ns-3.42/src/core/model/watchdog.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/model/watchdog.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/watchdog.h ns-3.43/src/core/model/watchdog.h
--- ns-3.42/src/core/model/watchdog.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/model/watchdog.h	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/model/win32-fd-reader.cc ns-3.43/src/core/model/win32-fd-reader.cc
--- ns-3.42/src/core/model/win32-fd-reader.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/model/win32-fd-reader.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Goff <thomas.goff@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/attribute-container-test-suite.cc ns-3.43/src/core/test/attribute-container-test-suite.cc
--- ns-3.42/src/core/test/attribute-container-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/attribute-container-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Caliola Engineering, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jared Dulmage <jared.dulmage@caliola.com>
  */
@@ -26,7 +15,9 @@
 #include <ns3/ptr.h>
 #include <ns3/string.h>
 #include <ns3/test.h>
+#include <ns3/tuple.h>
 #include <ns3/type-id.h>
+#include <ns3/uinteger.h>
 
 #include <algorithm>
 #include <iterator>
@@ -394,7 +385,25 @@
         NS_TEST_ASSERT_MSG_EQ(attr.GetN(), 3, "Incorrect container size");
 
         std::string reserialized = attr.SerializeToString(checker);
-        NS_TEST_ASSERT_MSG_EQ(reserialized, pairs, "Reserealization failed");
+        NS_TEST_ASSERT_MSG_EQ(reserialized, pairs, "Reserialization failed");
+    }
+
+    {
+        std::string tupleVec = "{-1, 2, 3.4};{-2, 1, 4.3}";
+        AttributeContainerValue<TupleValue<IntegerValue, UintegerValue, DoubleValue>, ';'> attr;
+        auto checker = MakeAttributeContainerChecker(attr);
+        auto acchecker = DynamicCast<AttributeContainerChecker>(checker);
+        acchecker->SetItemChecker(MakeTupleChecker<IntegerValue, UintegerValue, DoubleValue>(
+            MakeIntegerChecker<int8_t>(),
+            MakeUintegerChecker<uint16_t>(),
+            MakeDoubleChecker<double>()));
+        NS_TEST_ASSERT_MSG_EQ(attr.DeserializeFromString(tupleVec, checker),
+                              true,
+                              "Deserialization failed");
+        NS_TEST_ASSERT_MSG_EQ(attr.GetN(), 2, "Incorrect container size");
+
+        std::string reserialized = attr.SerializeToString(checker);
+        NS_TEST_ASSERT_MSG_EQ(reserialized, tupleVec, "Reserialization failed");
     }
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/attribute-test-suite.cc ns-3.43/src/core/test/attribute-test-suite.cc
--- ns-3.42/src/core/test/attribute-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/attribute-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/boolean.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/build-profile-test-suite.cc ns-3.43/src/core/test/build-profile-test-suite.cc
--- ns-3.42/src/core/test/build-profile-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/build-profile-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 LLNL
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/callback-test-suite.cc ns-3.43/src/core/test/callback-test-suite.cc
--- ns-3.42/src/core/test/callback-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/callback-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/callback.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/command-line-test-suite.cc ns-3.43/src/core/test/command-line-test-suite.cc
--- ns-3.42/src/core/test/command-line-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/command-line-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/config-test-suite.cc ns-3.43/src/core/test/config-test-suite.cc
--- ns-3.42/src/core/test/config-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/config-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/environment-variable-test-suite.cc ns-3.43/src/core/test/environment-variable-test-suite.cc
--- ns-3.42/src/core/test/environment-variable-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/environment-variable-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/event-garbage-collector-test-suite.cc ns-3.43/src/core/test/event-garbage-collector-test-suite.cc
--- ns-3.42/src/core/test/event-garbage-collector-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/event-garbage-collector-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/examples-as-tests-test-suite.cc ns-3.43/src/core/test/examples-as-tests-test-suite.cc
--- ns-3.42/src/core/test/examples-as-tests-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/examples-as-tests-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/global-value-test-suite.cc ns-3.43/src/core/test/global-value-test-suite.cc
--- ns-3.42/src/core/test/global-value-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/global-value-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/hash-test-suite.cc ns-3.43/src/core/test/hash-test-suite.cc
--- ns-3.42/src/core/test/hash-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/hash-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/int64x64-test-suite.cc ns-3.43/src/core/test/int64x64-test-suite.cc
--- ns-3.42/src/core/test/int64x64-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/int64x64-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,19 +1,7 @@
 /*
  * Copyright (c) 2011 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/int64x64.h"
@@ -182,7 +170,8 @@
     if (int64x64_t::implementation == int64x64_t::ld_impl)
     {
         // Darwin 12.5.0 (Mac 10.8.5) g++ 4.2.1
-        low = static_cast<uint64_t>(HP_MAX_64 * std::numeric_limits<long double>::epsilon());
+        low = static_cast<uint64_t>(int64x64_t::HP_MAX_64 *
+                                    std::numeric_limits<long double>::epsilon());
     }
 
     Check(0, 0);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/length-test-suite.cc ns-3.43/src/core/test/length-test-suite.cc
--- ns-3.42/src/core/test/length-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/length-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathew Bielejeski<bielejeski1@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/many-uniform-random-variables-one-get-value-call-test-suite.cc ns-3.43/src/core/test/many-uniform-random-variables-one-get-value-call-test-suite.cc
--- ns-3.42/src/core/test/many-uniform-random-variables-one-get-value-call-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/many-uniform-random-variables-one-get-value-call-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/matrix-array-test-suite.cc ns-3.43/src/core/test/matrix-array-test-suite.cc
--- ns-3.42/src/core/test/matrix-array-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/matrix-array-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Biljana Bojovic <bbojovic@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/names-test-suite.cc ns-3.43/src/core/test/names-test-suite.cc
--- ns-3.42/src/core/test/names-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/names-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/names.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/object-test-suite.cc ns-3.43/src/core/test/object-test-suite.cc
--- ns-3.42/src/core/test/object-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/object-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA, Gustavo Carneiro
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Gustavo Carneiro <gjcarneiro@gmail.com>,
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/one-uniform-random-variable-many-get-value-calls-test-suite.cc ns-3.43/src/core/test/one-uniform-random-variable-many-get-value-calls-test-suite.cc
--- ns-3.42/src/core/test/one-uniform-random-variable-many-get-value-calls-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/one-uniform-random-variable-many-get-value-calls-test-suite.cc	2024-10-09 16:41:09.864655700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/pair-value-test-suite.cc ns-3.43/src/core/test/pair-value-test-suite.cc
--- ns-3.42/src/core/test/pair-value-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/pair-value-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Caliola Engineering, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jared Dulmage <jared.dulmage@caliola.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/ptr-test-suite.cc ns-3.43/src/core/test/ptr-test-suite.cc
--- ns-3.42/src/core/test/ptr-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/ptr-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/random-variable-stream-test-suite.cc ns-3.43/src/core/test/random-variable-stream-test-suite.cc
--- ns-3.42/src/core/test/random-variable-stream-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/random-variable-stream-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009-12 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * This file is based on rng-test-suite.cc.
  *
@@ -29,6 +18,7 @@
 #include "ns3/shuffle.h"
 #include "ns3/string.h"
 #include "ns3/test.h"
+#include "ns3/uinteger.h"
 
 #include <cmath>
 #include <ctime>
@@ -140,6 +130,25 @@
         return valueMean;
     }
 
+    /**
+     * Compute the variance of a random variable.
+     * \param [in] rng The random variable to sample.
+     * \param [in] average The previously calculated average value.
+     * \returns The variance of \c N_MEASUREMENTS samples.
+     */
+    double Variance(Ptr<RandomVariableStream> rng, double average) const
+    {
+        NS_LOG_FUNCTION(this << rng);
+        auto sum = 0.0;
+        for (uint32_t i = 0; i < N_MEASUREMENTS; ++i)
+        {
+            const auto value = rng->GetValue();
+            sum += std::pow(value - average, 2);
+        }
+        const auto valueVariance = sum / N_MEASUREMENTS;
+        return valueVariance;
+    }
+
     /** A factory base class to create new instances of a random variable. */
     class RngGeneratorBase
     {
@@ -1242,12 +1251,12 @@
     SetTestSuiteSeed();
 
     auto generator = RngGenerator<WeibullRandomVariable>();
-    double sum = ChiSquaredsAverage(&generator, N_RUNS);
-    double maxStatistic = gsl_cdf_chisq_Qinv(0.05, N_BINS);
+    const auto sum = ChiSquaredsAverage(&generator, N_RUNS);
+    const auto maxStatistic = gsl_cdf_chisq_Qinv(0.05, N_BINS);
     NS_TEST_ASSERT_MSG_LT(sum, maxStatistic, "Chi-squared statistic out of range");
 
-    double scale = 5.0;
-    double shape = 1.0;
+    const auto scale = 5.0;
+    const auto shape = 1.0;
 
     // Create the RNG with the specified range.
     Ptr<WeibullRandomVariable> x = CreateObject<WeibullRandomVariable>();
@@ -1255,7 +1264,7 @@
     x->SetAttribute("Shape", DoubleValue(shape));
 
     // Calculate the mean of these values.
-    double valueMean = Average(x);
+    const auto measuredMean = Average(x);
 
     // The expected value for the mean of the values returned by a
     // Weibull distributed random variable is
@@ -1279,13 +1288,17 @@
     //
     //     E[value]  =  scale  .
     //
-    double expectedMean = scale;
+    const auto expectedMean = scale;
+
+    // Test calculated and expected mean values are identical.
+    const auto valueMean = x->GetMean();
+    NS_TEST_ASSERT_MSG_EQ(valueMean, expectedMean, "Wrong calculated mean value.");
 
     // Test that values have approximately the right mean value.
-    NS_TEST_ASSERT_MSG_EQ_TOL(valueMean,
+    NS_TEST_ASSERT_MSG_EQ_TOL(measuredMean,
                               expectedMean,
                               expectedMean * TOLERANCE,
-                              "Wrong mean value.");
+                              "Wrong measured mean value.");
 }
 
 /**
@@ -2940,6 +2953,142 @@
 
 /**
  * \ingroup rng-tests
+ * Test case for laplacian distribution random variable stream generator
+ */
+class LaplacianTestCase : public TestCaseBase
+{
+  public:
+    LaplacianTestCase();
+
+  private:
+    void DoRun() override;
+
+    /**
+     * Tolerance for testing rng values against expectation,
+     * as a fraction of mean value.
+     */
+    static constexpr double TOLERANCE{1e-2};
+};
+
+LaplacianTestCase::LaplacianTestCase()
+    : TestCaseBase("Laplacian Random Variable Stream Generator")
+{
+}
+
+void
+LaplacianTestCase::DoRun()
+{
+    NS_LOG_FUNCTION(this);
+    SetTestSuiteSeed();
+
+    double mu = -5.0;
+    double scale = 4.0;
+    double bound = 20.0;
+
+    // Create unbounded RNG with the specified range.
+    auto x1 = CreateObject<LaplacianRandomVariable>();
+    x1->SetAttribute("Location", DoubleValue(mu));
+    x1->SetAttribute("Scale", DoubleValue(scale));
+
+    // Calculate the mean of these values.
+    auto valueMean = Average(x1);
+
+    // Calculate the variance of these values.
+    auto valueVariance = Variance(x1, valueMean);
+
+    // Test that values have approximately the right mean value.
+    const auto expectedMean = mu;
+    NS_TEST_ASSERT_MSG_EQ_TOL(valueMean, expectedMean, TOLERANCE, "Wrong mean value.");
+
+    // Test that values have approximately the right variance value.
+    const auto expectedVariance = LaplacianRandomVariable::GetVariance(scale);
+    NS_TEST_ASSERT_MSG_EQ_TOL(valueVariance,
+                              expectedVariance,
+                              TOLERANCE * expectedVariance,
+                              "Wrong variance value.");
+
+    // Create bounded RNG with the specified range.
+    auto x2 = CreateObject<LaplacianRandomVariable>();
+    x2->SetAttribute("Location", DoubleValue(mu));
+    x2->SetAttribute("Scale", DoubleValue(scale));
+    x2->SetAttribute("Bound", DoubleValue(bound));
+
+    // Calculate the mean of these values.
+    valueMean = Average(x2);
+
+    // Test that values have approximately the right mean value.
+    NS_TEST_ASSERT_MSG_EQ_TOL(valueMean, expectedMean, TOLERANCE, "Wrong mean value.");
+
+    // Check that only the correct values are returned
+    const auto lowerBound = mu - bound;
+    const auto upperBound = mu + bound;
+    for (uint32_t i = 0; i < N_MEASUREMENTS; ++i)
+    {
+        const auto value = x2->GetValue();
+        NS_TEST_EXPECT_MSG_EQ((value >= lowerBound) || (value <= upperBound),
+                              true,
+                              "Value not in expected boundaries.");
+    }
+}
+
+/**
+ * \ingroup rng-tests
+ * Test case for largest extreme value distribution random variable stream generator
+ */
+class LargestExtremeValueTestCase : public TestCaseBase
+{
+  public:
+    LargestExtremeValueTestCase();
+
+  private:
+    void DoRun() override;
+
+    /**
+     * Tolerance for testing rng values against expectation,
+     * as a fraction of mean value.
+     */
+    static constexpr double TOLERANCE{1e-2};
+};
+
+LargestExtremeValueTestCase::LargestExtremeValueTestCase()
+    : TestCaseBase("Largest Extreme Value Random Variable Stream Generator")
+{
+}
+
+void
+LargestExtremeValueTestCase::DoRun()
+{
+    NS_LOG_FUNCTION(this);
+    SetTestSuiteSeed();
+
+    double mu = 2.0;
+    double scale = 1.0;
+
+    // Create RNG with the specified range.
+    auto x = CreateObject<LargestExtremeValueRandomVariable>();
+    x->SetAttribute("Location", DoubleValue(mu));
+    x->SetAttribute("Scale", DoubleValue(scale));
+
+    // Calculate the mean of these values.
+    auto valueMean = Average(x);
+
+    // Calculate the variance of these values.
+    auto valueVariance = Variance(x, valueMean);
+
+    // Test that values have approximately the right mean value.
+    const auto expectedMean = LargestExtremeValueRandomVariable::GetMean(mu, scale);
+    NS_TEST_ASSERT_MSG_EQ_TOL(valueMean, expectedMean, TOLERANCE, "Wrong mean value.");
+
+    // Test that values have approximately the right variance value.
+    const auto expectedVariance = LargestExtremeValueRandomVariable::GetVariance(scale);
+    NS_TEST_ASSERT_MSG_EQ_TOL(valueVariance,
+                              expectedVariance,
+                              TOLERANCE * expectedVariance,
+                              "Wrong variance value.");
+}
+
+/**
+ * \ingroup rng-tests
  * RandomVariableStream test suite, covering all random number variable
  * stream generator types.
  */
@@ -2995,6 +3144,8 @@
     AddTestCase(new BinomialTestCase);
     AddTestCase(new BinomialAntitheticTestCase);
     AddTestCase(new ShuffleElementsTest);
+    AddTestCase(new LaplacianTestCase);
+    AddTestCase(new LargestExtremeValueTestCase);
 }
 
 static RandomVariableSuite randomVariableSuite; //!< Static variable for test initialization
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/rng-test-suite.cc ns-3.43/src/core/test/rng-test-suite.cc
--- ns-3.42/src/core/test/rng-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/rng-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/double.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/sample-test-suite.cc ns-3.43/src/core/test/sample-test-suite.cc
--- ns-3.42/src/core/test/sample-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/sample-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/simulator-test-suite.cc ns-3.43/src/core/test/simulator-test-suite.cc
--- ns-3.42/src/core/test/simulator-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/simulator-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/splitstring-test-suite.cc ns-3.43/src/core/test/splitstring-test-suite.cc
--- ns-3.42/src/core/test/splitstring-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/splitstring-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/threaded-test-suite.cc ns-3.43/src/core/test/threaded-test-suite.cc
--- ns-3.42/src/core/test/threaded-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/threaded-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Claudio Freire <claudio-daniel.freire@inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/timer-test-suite.cc ns-3.43/src/core/test/timer-test-suite.cc
--- ns-3.42/src/core/test/timer-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/timer-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/time-test-suite.cc ns-3.43/src/core/test/time-test-suite.cc
--- ns-3.42/src/core/test/time-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/time-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005,2006 INRIA
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * TimeStep support by Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/traced-callback-test-suite.cc ns-3.43/src/core/test/traced-callback-test-suite.cc
--- ns-3.42/src/core/test/traced-callback-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/traced-callback-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/test.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/trickle-timer-test-suite.cc ns-3.43/src/core/test/trickle-timer-test-suite.cc
--- ns-3.42/src/core/test/trickle-timer-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/trickle-timer-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/tuple-value-test-suite.cc ns-3.43/src/core/test/tuple-value-test-suite.cc
--- ns-3.42/src/core/test/tuple-value-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/tuple-value-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/type-id-test-suite.cc ns-3.43/src/core/test/type-id-test-suite.cc
--- ns-3.42/src/core/test/type-id-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/type-id-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/type-traits-test-suite.cc ns-3.43/src/core/test/type-traits-test-suite.cc
--- ns-3.42/src/core/test/type-traits-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/type-traits-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,22 +1,12 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/test.h"
 #include "ns3/type-traits.h"
+#include "ns3/warnings.h"
 
 /**
  * \file
@@ -59,6 +49,12 @@
 void
 TypeTraitsTestCase::DoRun()
 {
+    // NS_DEPRECATED_3_43
+    // The TypeTraits struct has been deprecated in ns-3.43.
+    // While the struct isn't removed, the deprecation warnings must be silenced.
+    // Once the struct is removed, this test suite should be deleted.
+    NS_WARNING_PUSH_DEPRECATED;
+
     NS_TEST_ASSERT_MSG_EQ(TypeTraits<void (TypeTraitsTestCase::*)()>::IsPointerToMember,
                           1,
                           "Check pointer to member function ()");
@@ -79,6 +75,8 @@
         TypeTraits<void (TypeTraitsTestCase::*)(int) const>::PointerToMemberTraits::nArgs,
         1,
         "Check number of arguments for pointer to member function (int) const");
+
+    NS_WARNING_POP;
 }
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/val-array-test-suite.cc ns-3.43/src/core/test/val-array-test-suite.cc
--- ns-3.42/src/core/test/val-array-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/val-array-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Biljana Bojovic <bbojovic@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/core/test/watchdog-test-suite.cc ns-3.43/src/core/test/watchdog-test-suite.cc
--- ns-3.42/src/core/test/watchdog-test-suite.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/core/test/watchdog-test-suite.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/examples/csma-broadcast.cc ns-3.43/src/csma/examples/csma-broadcast.cc
--- ns-3.42/src/csma/examples/csma-broadcast.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/examples/csma-broadcast.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/examples/csma-multicast.cc ns-3.43/src/csma/examples/csma-multicast.cc
--- ns-3.42/src/csma/examples/csma-multicast.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/examples/csma-multicast.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/examples/csma-one-subnet.cc ns-3.43/src/csma/examples/csma-one-subnet.cc
--- ns-3.42/src/csma/examples/csma-one-subnet.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/examples/csma-one-subnet.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/examples/csma-packet-socket.cc ns-3.43/src/csma/examples/csma-packet-socket.cc
--- ns-3.42/src/csma/examples/csma-packet-socket.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/examples/csma-packet-socket.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/examples/csma-ping.cc ns-3.43/src/csma/examples/csma-ping.cc
--- ns-3.42/src/csma/examples/csma-ping.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/examples/csma-ping.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/examples/csma-raw-ip-socket.cc ns-3.43/src/csma/examples/csma-raw-ip-socket.cc
--- ns-3.42/src/csma/examples/csma-raw-ip-socket.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/examples/csma-raw-ip-socket.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/helper/csma-helper.cc ns-3.43/src/csma/helper/csma-helper.cc
--- ns-3.42/src/csma/helper/csma-helper.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/helper/csma-helper.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/helper/csma-helper.h ns-3.43/src/csma/helper/csma-helper.h
--- ns-3.42/src/csma/helper/csma-helper.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/helper/csma-helper.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/model/backoff.cc ns-3.43/src/csma/model/backoff.cc
--- ns-3.42/src/csma/model/backoff.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/model/backoff.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007, Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/model/backoff.h ns-3.43/src/csma/model/backoff.h
--- ns-3.42/src/csma/model/backoff.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/model/backoff.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca
  * Derived from the p2p net device file
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/model/csma-channel.cc ns-3.43/src/csma/model/csma-channel.cc
--- ns-3.42/src/csma/model/csma-channel.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/model/csma-channel.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/model/csma-channel.h ns-3.43/src/csma/model/csma-channel.h
--- ns-3.42/src/csma/model/csma-channel.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/model/csma-channel.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise<emmanuelle.laprise@bluekazoo.ca>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/model/csma-net-device.cc ns-3.43/src/csma/model/csma-net-device.cc
--- ns-3.42/src/csma/model/csma-net-device.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/model/csma-net-device.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma/model/csma-net-device.h ns-3.43/src/csma/model/csma-net-device.h
--- ns-3.42/src/csma/model/csma-net-device.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma/model/csma-net-device.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma-layout/examples/csma-star.cc ns-3.43/src/csma-layout/examples/csma-star.cc
--- ns-3.42/src/csma-layout/examples/csma-star.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma-layout/examples/csma-star.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma-layout/model/csma-star-helper.cc ns-3.43/src/csma-layout/model/csma-star-helper.cc
--- ns-3.42/src/csma-layout/model/csma-star-helper.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma-layout/model/csma-star-helper.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "csma-star-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/csma-layout/model/csma-star-helper.h ns-3.43/src/csma-layout/model/csma-star-helper.h
--- ns-3.42/src/csma-layout/model/csma-star-helper.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/csma-layout/model/csma-star-helper.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Define an object to create a star topology.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/doc/dsdv.h ns-3.43/src/dsdv/doc/dsdv.h
--- ns-3.42/src/dsdv/doc/dsdv.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/dsdv/doc/dsdv.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra, Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/examples/dsdv-manet.cc ns-3.43/src/dsdv/examples/dsdv-manet.cc
--- ns-3.42/src/dsdv/examples/dsdv-manet.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/dsdv/examples/dsdv-manet.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/helper/dsdv-helper.cc ns-3.43/src/dsdv/helper/dsdv-helper.cc
--- ns-3.42/src/dsdv/helper/dsdv-helper.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/dsdv/helper/dsdv-helper.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hemanth Narra <hemanth@ittc.ku.com>, written after OlsrHelper by Mathieu Lacage
  * <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/helper/dsdv-helper.h ns-3.43/src/dsdv/helper/dsdv-helper.h
--- ns-3.42/src/dsdv/helper/dsdv-helper.h	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/dsdv/helper/dsdv-helper.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hemanth Narra <hemanth@ittc.ku.com>, written after OlsrHelper by Mathieu Lacage
  * <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/model/dsdv-packet.cc ns-3.43/src/dsdv/model/dsdv-packet.cc
--- ns-3.42/src/dsdv/model/dsdv-packet.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsdv/model/dsdv-packet.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/model/dsdv-packet.h ns-3.43/src/dsdv/model/dsdv-packet.h
--- ns-3.42/src/dsdv/model/dsdv-packet.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsdv/model/dsdv-packet.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/model/dsdv-packet-queue.cc ns-3.43/src/dsdv/model/dsdv-packet-queue.cc
--- ns-3.42/src/dsdv/model/dsdv-packet-queue.cc	2024-05-29 15:29:46.940073000 -0700
+++ ns-3.43/src/dsdv/model/dsdv-packet-queue.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/model/dsdv-packet-queue.h ns-3.43/src/dsdv/model/dsdv-packet-queue.h
--- ns-3.42/src/dsdv/model/dsdv-packet-queue.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsdv/model/dsdv-packet-queue.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/model/dsdv-routing-protocol.cc ns-3.43/src/dsdv/model/dsdv-routing-protocol.cc
--- ns-3.42/src/dsdv/model/dsdv-routing-protocol.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsdv/model/dsdv-routing-protocol.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra, Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/model/dsdv-routing-protocol.h ns-3.43/src/dsdv/model/dsdv-routing-protocol.h
--- ns-3.42/src/dsdv/model/dsdv-routing-protocol.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsdv/model/dsdv-routing-protocol.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra, Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/model/dsdv-rtable.cc ns-3.43/src/dsdv/model/dsdv-rtable.cc
--- ns-3.42/src/dsdv/model/dsdv-rtable.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsdv/model/dsdv-rtable.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/model/dsdv-rtable.h ns-3.43/src/dsdv/model/dsdv-rtable.h
--- ns-3.42/src/dsdv/model/dsdv-rtable.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsdv/model/dsdv-rtable.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsdv/test/dsdv-testcase.cc ns-3.43/src/dsdv/test/dsdv-testcase.cc
--- ns-3.42/src/dsdv/test/dsdv-testcase.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsdv/test/dsdv-testcase.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hemanth Narra
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hemanth Narra <hemanth@ittc.ku.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/doc/dsr.h ns-3.43/src/dsr/doc/dsr.h
--- ns-3.42/src/dsr/doc/dsr.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/doc/dsr.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/examples/CMakeLists.txt ns-3.43/src/dsr/examples/CMakeLists.txt
--- ns-3.42/src/dsr/examples/CMakeLists.txt	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/examples/CMakeLists.txt	2024-10-09 16:41:09.868656000 -0700
@@ -1,6 +1,6 @@
 build_lib_example(
-  NAME dsr
-  SOURCE_FILES dsr.cc
+  NAME dsr-example
+  SOURCE_FILES dsr-example.cc
   LIBRARIES_TO_LINK
     ${libcore}
     ${libnetwork}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/examples/dsr.cc ns-3.43/src/dsr/examples/dsr.cc
--- ns-3.42/src/dsr/examples/dsr.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/examples/dsr.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 2011 Yufei Cheng
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
- *
- * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
- * ResiliNets Research Group  https://resilinets.org/
- * Information and Telecommunication Technology Center (ITTC)
- * and Department of Electrical Engineering and Computer Science
- * The University of Kansas Lawrence, KS USA.
- *
- * Work supported in part by NSF FIND (Future Internet Design) Program
- * under grant CNS-0626918 (Postmodern Internet Architecture),
- * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
- * US Department of Defense (DoD), and ITTC at The University of Kansas.
- */
-
-#include "ns3/applications-module.h"
-#include "ns3/core-module.h"
-#include "ns3/dsr-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/mobility-module.h"
-#include "ns3/network-module.h"
-#include "ns3/yans-wifi-helper.h"
-
-#include <sstream>
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE("DsrTest");
-
-int
-main(int argc, char* argv[])
-{
-    //
-    // Users may find it convenient to turn on explicit debugging
-    // for selected modules; the below lines suggest how to do this
-    //
-#if 0
-  LogComponentEnable ("Ipv4L3Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("UdpL4Protocol", LOG_LEVEL_ALL);
-  LogComponentEnable ("UdpSocketImpl", LOG_LEVEL_ALL);
-  LogComponentEnable ("NetDevice", LOG_LEVEL_ALL);
-  LogComponentEnable ("Ipv4EndPointDemux", LOG_LEVEL_ALL);
-#endif
-
-#if 0
-  LogComponentEnable ("DsrOptions", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrHelper", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrRouting", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrOptionHeader", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrFsHeader", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrGraReplyTable", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrSendBuffer", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrRouteCache", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrMaintainBuffer", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrRreqTable", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrErrorBuffer", LOG_LEVEL_ALL);
-  LogComponentEnable ("DsrNetworkQueue", LOG_LEVEL_ALL);
-#endif
-
-    NS_LOG_INFO("creating the nodes");
-
-    // General parameters
-    uint32_t nWifis = 50;
-    uint32_t nSinks = 10;
-    double TotalTime = 600.0;
-    double dataTime = 500.0;
-    double ppers = 1;
-    uint32_t packetSize = 64;
-    double dataStart = 100.0; // start sending data at 100s
-
-    // mobility parameters
-    double pauseTime = 0.0;
-    double nodeSpeed = 20.0;
-    double txpDistance = 250.0;
-
-    std::string rate = "0.512kbps";
-    std::string dataMode("DsssRate11Mbps");
-    std::string phyMode("DsssRate11Mbps");
-
-    // Allow users to override the default parameters and set it to new ones from CommandLine.
-    CommandLine cmd(__FILE__);
-    cmd.AddValue("nWifis", "Number of wifi nodes", nWifis);
-    cmd.AddValue("nSinks", "Number of SINK traffic nodes", nSinks);
-    cmd.AddValue("rate", "CBR traffic rate(in kbps), Default:8", rate);
-    cmd.AddValue("nodeSpeed", "Node speed in RandomWayPoint model, Default:20", nodeSpeed);
-    cmd.AddValue("packetSize", "The packet size", packetSize);
-    cmd.AddValue("txpDistance", "Specify node's transmit range, Default:300", txpDistance);
-    cmd.AddValue("pauseTime", "pauseTime for mobility model, Default: 0", pauseTime);
-    cmd.Parse(argc, argv);
-
-    SeedManager::SetSeed(10);
-    SeedManager::SetRun(1);
-
-    NodeContainer adhocNodes;
-    adhocNodes.Create(nWifis);
-    NetDeviceContainer allDevices;
-
-    NS_LOG_INFO("setting the default phy and channel parameters");
-    Config::SetDefault("ns3::WifiRemoteStationManager::NonUnicastMode", StringValue(phyMode));
-    Config::SetDefault("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue("2200"));
-    // disable fragmentation for frames below 2200 bytes
-    Config::SetDefault("ns3::WifiRemoteStationManager::FragmentationThreshold",
-                       StringValue("2200"));
-
-    NS_LOG_INFO("setting the default phy and channel parameters ");
-    WifiHelper wifi;
-    wifi.SetStandard(WIFI_STANDARD_80211b);
-    YansWifiPhyHelper wifiPhy;
-
-    YansWifiChannelHelper wifiChannel;
-    wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
-    wifiChannel.AddPropagationLoss("ns3::RangePropagationLossModel",
-                                   "MaxRange",
-                                   DoubleValue(txpDistance));
-    wifiPhy.SetChannel(wifiChannel.Create());
-
-    // Add a mac and disable rate control
-    WifiMacHelper wifiMac;
-    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
-                                 "DataMode",
-                                 StringValue(dataMode),
-                                 "ControlMode",
-                                 StringValue(phyMode));
-
-    wifiMac.SetType("ns3::AdhocWifiMac");
-    allDevices = wifi.Install(wifiPhy, wifiMac, adhocNodes);
-
-    NS_LOG_INFO("Configure Tracing.");
-
-    AsciiTraceHelper ascii;
-    Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream("dsrtest.tr");
-    wifiPhy.EnableAsciiAll(stream);
-
-    MobilityHelper adhocMobility;
-    ObjectFactory pos;
-    pos.SetTypeId("ns3::RandomRectanglePositionAllocator");
-    pos.Set("X", StringValue("ns3::UniformRandomVariable[Min=0.0|Max=300.0]"));
-    pos.Set("Y", StringValue("ns3::UniformRandomVariable[Min=0.0|Max=1500.0]"));
-    Ptr<PositionAllocator> taPositionAlloc = pos.Create()->GetObject<PositionAllocator>();
-
-    std::ostringstream speedUniformRandomVariableStream;
-    speedUniformRandomVariableStream << "ns3::UniformRandomVariable[Min=0.0|Max=" << nodeSpeed
-                                     << "]";
-
-    std::ostringstream pauseConstantRandomVariableStream;
-    pauseConstantRandomVariableStream << "ns3::ConstantRandomVariable[Constant=" << pauseTime
-                                      << "]";
-
-    adhocMobility.SetMobilityModel(
-        "ns3::RandomWaypointMobilityModel",
-        //                                  "Speed", StringValue
-        //                                  ("ns3::UniformRandomVariable[Min=0.0|Max=nodeSpeed]"),
-        "Speed",
-        StringValue(speedUniformRandomVariableStream.str()),
-        "Pause",
-        StringValue(pauseConstantRandomVariableStream.str()),
-        "PositionAllocator",
-        PointerValue(taPositionAlloc));
-    adhocMobility.Install(adhocNodes);
-
-    InternetStackHelper internet;
-    DsrMainHelper dsrMain;
-    DsrHelper dsr;
-    internet.Install(adhocNodes);
-    dsrMain.Install(dsr, adhocNodes);
-
-    NS_LOG_INFO("assigning ip address");
-    Ipv4AddressHelper address;
-    address.SetBase("10.1.1.0", "255.255.255.0");
-    Ipv4InterfaceContainer allInterfaces;
-    allInterfaces = address.Assign(allDevices);
-
-    uint16_t port = 9;
-    double randomStartTime =
-        (1 / ppers) / nSinks; // distributed btw 1s evenly as we are sending 4pkt/s
-
-    for (uint32_t i = 0; i < nSinks; ++i)
-    {
-        PacketSinkHelper sink("ns3::UdpSocketFactory",
-                              InetSocketAddress(Ipv4Address::GetAny(), port));
-        ApplicationContainer apps_sink = sink.Install(adhocNodes.Get(i));
-        apps_sink.Start(Seconds(0.0));
-        apps_sink.Stop(Seconds(TotalTime));
-
-        OnOffHelper onoff1("ns3::UdpSocketFactory",
-                           Address(InetSocketAddress(allInterfaces.GetAddress(i), port)));
-        onoff1.SetAttribute("OnTime", StringValue("ns3::ConstantRandomVariable[Constant=1.0]"));
-        onoff1.SetAttribute("OffTime", StringValue("ns3::ConstantRandomVariable[Constant=0.0]"));
-        onoff1.SetAttribute("PacketSize", UintegerValue(packetSize));
-        onoff1.SetAttribute("DataRate", DataRateValue(DataRate(rate)));
-
-        ApplicationContainer apps1 = onoff1.Install(adhocNodes.Get(i + nWifis - nSinks));
-        apps1.Start(Seconds(dataStart + i * randomStartTime));
-        apps1.Stop(Seconds(dataTime + i * randomStartTime));
-    }
-
-    NS_LOG_INFO("Run Simulation.");
-    Simulator::Stop(Seconds(TotalTime));
-    Simulator::Run();
-    Simulator::Destroy();
-
-    return 0;
-}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/examples/dsr-example.cc ns-3.43/src/dsr/examples/dsr-example.cc
--- ns-3.42/src/dsr/examples/dsr-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/dsr/examples/dsr-example.cc	2024-10-09 16:41:09.868656000 -0700
@@ -0,0 +1,207 @@
+/*
+ * Copyright (c) 2011 Yufei Cheng
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
+ *
+ * James P.G. Sterbenz <jpgs@ittc.ku.edu>, director
+ * ResiliNets Research Group  https://resilinets.org/
+ * Information and Telecommunication Technology Center (ITTC)
+ * and Department of Electrical Engineering and Computer Science
+ * The University of Kansas Lawrence, KS USA.
+ *
+ * Work supported in part by NSF FIND (Future Internet Design) Program
+ * under grant CNS-0626918 (Postmodern Internet Architecture),
+ * NSF grant CNS-1050226 (Multilayer Network Resilience Analysis and Experimentation on GENI),
+ * US Department of Defense (DoD), and ITTC at The University of Kansas.
+ */
+
+#include "ns3/applications-module.h"
+#include "ns3/core-module.h"
+#include "ns3/dsr-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/network-module.h"
+#include "ns3/yans-wifi-helper.h"
+
+#include <sstream>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("DsrTest");
+
+int
+main(int argc, char* argv[])
+{
+    //
+    // Users may find it convenient to turn on explicit debugging
+    // for selected modules; the below lines suggest how to do this
+    //
+#if 0
+  LogComponentEnable ("Ipv4L3Protocol", LOG_LEVEL_ALL);
+  LogComponentEnable ("UdpL4Protocol", LOG_LEVEL_ALL);
+  LogComponentEnable ("UdpSocketImpl", LOG_LEVEL_ALL);
+  LogComponentEnable ("NetDevice", LOG_LEVEL_ALL);
+  LogComponentEnable ("Ipv4EndPointDemux", LOG_LEVEL_ALL);
+#endif
+
+#if 0
+  LogComponentEnable ("DsrOptions", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrHelper", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrRouting", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrOptionHeader", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrFsHeader", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrGraReplyTable", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrSendBuffer", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrRouteCache", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrMaintainBuffer", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrRreqTable", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrErrorBuffer", LOG_LEVEL_ALL);
+  LogComponentEnable ("DsrNetworkQueue", LOG_LEVEL_ALL);
+#endif
+
+    NS_LOG_INFO("creating the nodes");
+
+    // General parameters
+    uint32_t nWifis = 50;
+    uint32_t nSinks = 10;
+    double TotalTime = 600.0;
+    double dataTime = 500.0;
+    double ppers = 1;
+    uint32_t packetSize = 64;
+    double dataStart = 100.0; // start sending data at 100s
+
+    // mobility parameters
+    double pauseTime = 0.0;
+    double nodeSpeed = 20.0;
+    double txpDistance = 250.0;
+
+    std::string rate = "0.512kbps";
+    std::string dataMode("DsssRate11Mbps");
+    std::string phyMode("DsssRate11Mbps");
+
+    // Allow users to override the default parameters and set it to new ones from CommandLine.
+    CommandLine cmd(__FILE__);
+    cmd.AddValue("nWifis", "Number of wifi nodes", nWifis);
+    cmd.AddValue("nSinks", "Number of SINK traffic nodes", nSinks);
+    cmd.AddValue("rate", "CBR traffic rate(in kbps), Default:8", rate);
+    cmd.AddValue("nodeSpeed", "Node speed in RandomWayPoint model, Default:20", nodeSpeed);
+    cmd.AddValue("packetSize", "The packet size", packetSize);
+    cmd.AddValue("txpDistance", "Specify node's transmit range, Default:300", txpDistance);
+    cmd.AddValue("pauseTime", "pauseTime for mobility model, Default: 0", pauseTime);
+    cmd.Parse(argc, argv);
+
+    SeedManager::SetSeed(10);
+    SeedManager::SetRun(1);
+
+    NodeContainer adhocNodes;
+    adhocNodes.Create(nWifis);
+    NetDeviceContainer allDevices;
+
+    NS_LOG_INFO("setting the default phy and channel parameters");
+    Config::SetDefault("ns3::WifiRemoteStationManager::NonUnicastMode", StringValue(phyMode));
+    Config::SetDefault("ns3::WifiRemoteStationManager::RtsCtsThreshold", StringValue("2200"));
+    // disable fragmentation for frames below 2200 bytes
+    Config::SetDefault("ns3::WifiRemoteStationManager::FragmentationThreshold",
+                       StringValue("2200"));
+
+    NS_LOG_INFO("setting the default phy and channel parameters ");
+    WifiHelper wifi;
+    wifi.SetStandard(WIFI_STANDARD_80211b);
+    YansWifiPhyHelper wifiPhy;
+
+    YansWifiChannelHelper wifiChannel;
+    wifiChannel.SetPropagationDelay("ns3::ConstantSpeedPropagationDelayModel");
+    wifiChannel.AddPropagationLoss("ns3::RangePropagationLossModel",
+                                   "MaxRange",
+                                   DoubleValue(txpDistance));
+    wifiPhy.SetChannel(wifiChannel.Create());
+
+    // Add a mac and disable rate control
+    WifiMacHelper wifiMac;
+    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
+                                 "DataMode",
+                                 StringValue(dataMode),
+                                 "ControlMode",
+                                 StringValue(phyMode));
+
+    wifiMac.SetType("ns3::AdhocWifiMac");
+    allDevices = wifi.Install(wifiPhy, wifiMac, adhocNodes);
+
+    NS_LOG_INFO("Configure Tracing.");
+
+    AsciiTraceHelper ascii;
+    Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream("dsrtest.tr");
+    wifiPhy.EnableAsciiAll(stream);
+
+    MobilityHelper adhocMobility;
+    ObjectFactory pos;
+    pos.SetTypeId("ns3::RandomRectanglePositionAllocator");
+    pos.Set("X", StringValue("ns3::UniformRandomVariable[Min=0.0|Max=300.0]"));
+    pos.Set("Y", StringValue("ns3::UniformRandomVariable[Min=0.0|Max=1500.0]"));
+    Ptr<PositionAllocator> taPositionAlloc = pos.Create()->GetObject<PositionAllocator>();
+
+    std::ostringstream speedUniformRandomVariableStream;
+    speedUniformRandomVariableStream << "ns3::UniformRandomVariable[Min=0.0|Max=" << nodeSpeed
+                                     << "]";
+
+    std::ostringstream pauseConstantRandomVariableStream;
+    pauseConstantRandomVariableStream << "ns3::ConstantRandomVariable[Constant=" << pauseTime
+                                      << "]";
+
+    adhocMobility.SetMobilityModel(
+        "ns3::RandomWaypointMobilityModel",
+        //                                  "Speed", StringValue
+        //                                  ("ns3::UniformRandomVariable[Min=0.0|Max=nodeSpeed]"),
+        "Speed",
+        StringValue(speedUniformRandomVariableStream.str()),
+        "Pause",
+        StringValue(pauseConstantRandomVariableStream.str()),
+        "PositionAllocator",
+        PointerValue(taPositionAlloc));
+    adhocMobility.Install(adhocNodes);
+
+    InternetStackHelper internet;
+    DsrMainHelper dsrMain;
+    DsrHelper dsr;
+    internet.Install(adhocNodes);
+    dsrMain.Install(dsr, adhocNodes);
+
+    NS_LOG_INFO("assigning ip address");
+    Ipv4AddressHelper address;
+    address.SetBase("10.1.1.0", "255.255.255.0");
+    Ipv4InterfaceContainer allInterfaces;
+    allInterfaces = address.Assign(allDevices);
+
+    uint16_t port = 9;
+    double randomStartTime =
+        (1 / ppers) / nSinks; // distributed btw 1s evenly as we are sending 4pkt/s
+
+    for (uint32_t i = 0; i < nSinks; ++i)
+    {
+        PacketSinkHelper sink("ns3::UdpSocketFactory",
+                              InetSocketAddress(Ipv4Address::GetAny(), port));
+        ApplicationContainer apps_sink = sink.Install(adhocNodes.Get(i));
+        apps_sink.Start(Seconds(0.0));
+        apps_sink.Stop(Seconds(TotalTime));
+
+        OnOffHelper onoff1("ns3::UdpSocketFactory",
+                           Address(InetSocketAddress(allInterfaces.GetAddress(i), port)));
+        onoff1.SetAttribute("OnTime", StringValue("ns3::ConstantRandomVariable[Constant=1.0]"));
+        onoff1.SetAttribute("OffTime", StringValue("ns3::ConstantRandomVariable[Constant=0.0]"));
+        onoff1.SetAttribute("PacketSize", UintegerValue(packetSize));
+        onoff1.SetAttribute("DataRate", DataRateValue(DataRate(rate)));
+
+        ApplicationContainer apps1 = onoff1.Install(adhocNodes.Get(i + nWifis - nSinks));
+        apps1.Start(Seconds(dataStart + i * randomStartTime));
+        apps1.Stop(Seconds(dataTime + i * randomStartTime));
+    }
+
+    NS_LOG_INFO("Run Simulation.");
+    Simulator::Stop(Seconds(TotalTime));
+    Simulator::Run();
+    Simulator::Destroy();
+
+    return 0;
+}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/helper/dsr-helper.cc ns-3.43/src/dsr/helper/dsr-helper.cc
--- ns-3.42/src/dsr/helper/dsr-helper.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/helper/dsr-helper.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/helper/dsr-helper.h ns-3.43/src/dsr/helper/dsr-helper.h
--- ns-3.42/src/dsr/helper/dsr-helper.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/helper/dsr-helper.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/helper/dsr-main-helper.cc ns-3.43/src/dsr/helper/dsr-main-helper.cc
--- ns-3.42/src/dsr/helper/dsr-main-helper.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/helper/dsr-main-helper.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/helper/dsr-main-helper.h ns-3.43/src/dsr/helper/dsr-main-helper.h
--- ns-3.42/src/dsr/helper/dsr-main-helper.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/helper/dsr-main-helper.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-errorbuff.cc ns-3.43/src/dsr/model/dsr-errorbuff.cc
--- ns-3.42/src/dsr/model/dsr-errorbuff.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-errorbuff.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-errorbuff.h ns-3.43/src/dsr/model/dsr-errorbuff.h
--- ns-3.42/src/dsr/model/dsr-errorbuff.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-errorbuff.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-fs-header.cc ns-3.43/src/dsr/model/dsr-fs-header.cc
--- ns-3.42/src/dsr/model/dsr-fs-header.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-fs-header.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-fs-header.h ns-3.43/src/dsr/model/dsr-fs-header.h
--- ns-3.42/src/dsr/model/dsr-fs-header.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-fs-header.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-gratuitous-reply-table.cc ns-3.43/src/dsr/model/dsr-gratuitous-reply-table.cc
--- ns-3.42/src/dsr/model/dsr-gratuitous-reply-table.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-gratuitous-reply-table.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-gratuitous-reply-table.h ns-3.43/src/dsr/model/dsr-gratuitous-reply-table.h
--- ns-3.42/src/dsr/model/dsr-gratuitous-reply-table.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-gratuitous-reply-table.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-maintain-buff.cc ns-3.43/src/dsr/model/dsr-maintain-buff.cc
--- ns-3.42/src/dsr/model/dsr-maintain-buff.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-maintain-buff.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-maintain-buff.h ns-3.43/src/dsr/model/dsr-maintain-buff.h
--- ns-3.42/src/dsr/model/dsr-maintain-buff.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-maintain-buff.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-network-queue.cc ns-3.43/src/dsr/model/dsr-network-queue.cc
--- ns-3.42/src/dsr/model/dsr-network-queue.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-network-queue.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-network-queue.h ns-3.43/src/dsr/model/dsr-network-queue.h
--- ns-3.42/src/dsr/model/dsr-network-queue.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-network-queue.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-option-header.cc ns-3.43/src/dsr/model/dsr-option-header.cc
--- ns-3.42/src/dsr/model/dsr-option-header.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-option-header.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-option-header.h ns-3.43/src/dsr/model/dsr-option-header.h
--- ns-3.42/src/dsr/model/dsr-option-header.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-option-header.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
@@ -46,15 +35,15 @@
 namespace dsr
 {
 /**
- * \class DsrOptionHeader
- * \brief Header for Dsr Options.
+ * \ingroup dsr
+ * \brief header for Dsr Options.
  */
 class DsrOptionHeader : public Header
 {
   public:
     /**
      * \struct Alignment
-     * \brief represents the alignment requirements of an option header
+     * \brief Represents the alignment requirements of an option header
      */
     struct Alignment
     {
@@ -146,7 +135,7 @@
 };
 
 /**
- * \class DsrOptionPad1Header
+ * \ingroup dsr
  * \brief Header of Dsr Option Pad1
  */
 class DsrOptionPad1Header : public DsrOptionHeader
@@ -194,7 +183,7 @@
 };
 
 /**
- * \class DsrOptionPadnHeader
+ * \ingroup dsr
  * \brief Header of Dsr Option Padn
  */
 class DsrOptionPadnHeader : public DsrOptionHeader
@@ -243,18 +232,16 @@
 };
 
 /**
- * \class DsrOptionRouteRequestHeader
+ * \ingroup dsr
  * \brief Header of Dsr Option Route Request
- */
+ *
+ * \verbatim
+   Route Request (RREQ) Message Format
 
-/**
-* \ingroup dsr
-* \brief   Route Request (RREQ) Message Format
-  \verbatim
    |      0        |      1        |      2        |      3        |
    0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Option Type |  Opt Data Len |         Identification         |
+   |  Option Type  | Opt Data Len  |        Identification         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                         Target Address                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -266,9 +253,8 @@
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                            Address[n]                         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  \endverbatim
-*/
-
+   \endverbatim
+ */
 class DsrOptionRreqHeader : public DsrOptionHeader
 {
   public:
@@ -398,14 +384,12 @@
 };
 
 /**
- * \class DsrOptionRrepHeader
+ * \ingroup dsr
  * \brief Header of Dsr Option Route Reply
- */
+ *
+ * \verbatim
+   Standard Route Reply (RREP) Message Format
 
-/**
-* \ingroup dsr
-* \brief Route Reply (RREP) Message Format
-  \verbatim
    |      0        |      1        |      2        |      3        |
    0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
                   -+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -419,14 +403,13 @@
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                            Address[n]                         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  \endverbatim
-*/
+   \endverbatim
+ *
+ * The Route Reply header modified for ns-3 implementation:
+ *
+ * \verbatim
+   ns-3 Route Reply (RREP) Message Format
 
-// The Route Reply header modified for ns-3 implementation
-/**
-* \ingroup dsr
-* \brief Route Reply (RREP) Message Format
-  \verbatim
    |      0        |      1        |      2        |      3        |
    0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -440,9 +423,8 @@
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                            Address[n]                         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  \endverbatim
-*/
-
+   \endverbatim
+ */
 class DsrOptionRrepHeader : public DsrOptionHeader
 {
   public:
@@ -530,7 +512,7 @@
      */
     Ipv4Address m_address;
     /**
-     * \brief type def A vector of IPv4 Address.
+     * \brief typedef for a vector of IPv4 Addresses.
      */
     typedef std::vector<Ipv4Address> VectorIpv4Address_t;
     /**
@@ -540,14 +522,12 @@
 };
 
 /**
- * \class DsrOptionSRHeader
+ * \ingroup dsr
  * \brief Header of Dsr Option Source Route
- */
+ *
+ * \verbatim
+   Source Route (SR) Message Format
 
-/**
-* \ingroup dsr
-* \brief Source Route (SR) Message Format
-  \verbatim
    |      0        |      1        |      2        |      3        |
    0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -561,9 +541,8 @@
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                            Address[n]                         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  \endverbatim
-*/
-
+   \endverbatim
+ */
 class DsrOptionSRHeader : public DsrOptionHeader
 {
   public:
@@ -695,14 +674,24 @@
 };
 
 /**
- * \class DsrOptionRerrHeader
- * \brief Header of Dsr Option Route Error
+ * \ingroup dsr
+ * \enum ErrorType
+ * \brief Error type used in several DSR Option Headers
  */
+enum ErrorType
+{
+    NODE_UNREACHABLE = 1,         // !< NODE_UNREACHABLE
+    FLOW_STATE_NOT_SUPPORTED = 2, // !< FLOW_STATE_NOT_SUPPORTED
+    OPTION_NOT_SUPPORTED = 3,     // !< OPTION_NOT_SUPPORTED
+};
 
 /**
-* \ingroup dsr
-* \brief Route Error (RERR) Message Format
-  \verbatim
+ * \ingroup dsr
+ * \brief Header of Dsr Option Route Error
+ *
+ * \verbatim
+   Route Error (RERR) Message Format
+
    |      0        |      1        |      2        |      3        |
    0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -716,17 +705,11 @@
    .                    Type-Specific Information                  .
    .                                                               .
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  \endverbatim
-*/
-
-/// Error type
-enum ErrorType
-{
-    NODE_UNREACHABLE = 1,         // !< NODE_UNREACHABLE
-    FLOW_STATE_NOT_SUPPORTED = 2, // !< FLOW_STATE_NOT_SUPPORTED
-    OPTION_NOT_SUPPORTED = 3,     // !< OPTION_NOT_SUPPORTED
-};
-
+   \endverbatim
+ *
+ * The type-specific information field varies by type of error,
+ * as detailed in the derived classes.
+ */
 class DsrOptionRerrHeader : public DsrOptionHeader
 {
   public:
@@ -843,27 +826,12 @@
 };
 
 /**
-* \ingroup dsr
-* \brief Route Error (RERR) Unreachable node address option Message Format
-  \verbatim
-   |      0        |      1        |      2        |      3        |
-   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Option Type |  Opt Data Len |   Error Type  |Reservd| Salvage|
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                      Error Source Address                     |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                    Error Destination Address                  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   .                                                               .
-   .                    Type-Specific Information                  .
-   .                                                               .
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  \endverbatim
-*/
-/*
- * \brief The type-specific info field
+ * \ingroup dsr
+ * \brief Route Error (RERR) Unreachable node address option Message Format
+ *
  * \verbatim
+   Route Error Unreachable type-specific info field
+
    |      0        |      1        |      2        |      3        |
    0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -871,7 +839,6 @@
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    \endverbatim
  */
-
 class DsrOptionRerrUnreachHeader : public DsrOptionRerrHeader
 {
   public:
@@ -998,28 +965,14 @@
 };
 
 /**
-* \ingroup dsr
-* \brief Route Error (RERR) Unsupported option Message Format
-  \verbatim
-   |      0        |      1        |      2        |      3        |
-   0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |  Option Type |  Opt Data Len |   Error Type  |Reservd| Salvage|
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                      Error Source Address                     |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   |                    Error Destination Address                  |
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-   .                                                               .
-   .                    Type-Specific Information                  .
-   .                                                               .
-   +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  \endverbatim
-*/
-/*
- * \brief The type-specific info field
- * \unsupported option
+ * \ingroup dsr
+ * \brief Route Error (RERR) Unsupported option Message Format
+ *
+ * The type-specific info field of DsrOptionRerrHeader contains
+ *
  * \verbatim
+   Route Error Unsupported type-specific info field
+
    |      0        |
    0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+
@@ -1027,7 +980,6 @@
    +-+-+-+-+-+-+-+-+
    \endverbatim
  */
-
 class DsrOptionRerrUnsupportedHeader : public DsrOptionRerrHeader
 {
   public:
@@ -1140,22 +1092,19 @@
 };
 
 /**
- * \class DsrOptionAckReqHeader
+ * \ingroup dsr
  * \brief Header of Dsr Option ack request
- */
+ *
+ * \verbatim
+   Acknowledgement Request (ACK_RREQ) Message Format
 
-/**
-* \ingroup dsr
-* \brief   Acknowledgement Request (ACK_RREQ) Message Format
-  \verbatim
    |      0        |      1        |      2        |      3        |
    0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |  Option Type |  Opt Data Len |         Identification         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  \endverbatim
-*/
-
+   \endverbatim
+ */
 class DsrOptionAckReqHeader : public DsrOptionHeader
 {
   public:
@@ -1222,14 +1171,12 @@
 };
 
 /**
- * \class DsrOptionAckHeader
+ * \ingroup dsr
  * \brief Header of Dsr Option ack
- */
+ *
+ * \verbatim
+   Acknowledgement (ACK) Message Format
 
-/**
-* \ingroup dsr
-* \brief   Acknowledgement (ACK) Message Format
-  \verbatim
    |      0        |      1        |      2        |      3        |
    0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
@@ -1239,9 +1186,8 @@
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                     ACK Destination Address                   |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-  \endverbatim
-*/
-
+   \endverbatim
+ */
 class DsrOptionAckHeader : public DsrOptionHeader
 {
   public:
@@ -1322,15 +1268,15 @@
 
   private:
     /**
-     * \brief identification field
+     * \brief Identification field
      */
     uint16_t m_identification;
     /**
-     * \brief ack source address
+     * \brief Ack source address
      */
     Ipv4Address m_realSrcAddress;
     /**
-     * \brief ack destination address
+     * \brief Ack destination address
      */
     Ipv4Address m_realDstAddress;
 };
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-options.cc ns-3.43/src/dsr/model/dsr-options.cc
--- ns-3.42/src/dsr/model/dsr-options.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-options.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-options.h ns-3.43/src/dsr/model/dsr-options.h
--- ns-3.42/src/dsr/model/dsr-options.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-options.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-passive-buff.cc ns-3.43/src/dsr/model/dsr-passive-buff.cc
--- ns-3.42/src/dsr/model/dsr-passive-buff.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-passive-buff.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-passive-buff.h ns-3.43/src/dsr/model/dsr-passive-buff.h
--- ns-3.42/src/dsr/model/dsr-passive-buff.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-passive-buff.h	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-rcache.cc ns-3.43/src/dsr/model/dsr-rcache.cc
--- ns-3.42/src/dsr/model/dsr-rcache.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-rcache.cc	2024-10-09 16:41:09.868656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *              Song Luan <lsuper@mail.ustc.edu.cn> (Implemented Link Cache using Dijsktra
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-rcache.h ns-3.43/src/dsr/model/dsr-rcache.h
--- ns-3.42/src/dsr/model/dsr-rcache.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-rcache.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *              Song Luan <lsuper@mail.ustc.edu.cn> (Implemented Link Cache using dijsktra algorithm
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-routing.cc ns-3.43/src/dsr/model/dsr-routing.cc
--- ns-3.42/src/dsr/model/dsr-routing.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-routing.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-routing.h ns-3.43/src/dsr/model/dsr-routing.h
--- ns-3.42/src/dsr/model/dsr-routing.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-routing.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-rreq-table.cc ns-3.43/src/dsr/model/dsr-rreq-table.cc
--- ns-3.42/src/dsr/model/dsr-rreq-table.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-rreq-table.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-rreq-table.h ns-3.43/src/dsr/model/dsr-rreq-table.h
--- ns-3.42/src/dsr/model/dsr-rreq-table.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-rreq-table.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-rsendbuff.cc ns-3.43/src/dsr/model/dsr-rsendbuff.cc
--- ns-3.42/src/dsr/model/dsr-rsendbuff.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-rsendbuff.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/model/dsr-rsendbuff.h ns-3.43/src/dsr/model/dsr-rsendbuff.h
--- ns-3.42/src/dsr/model/dsr-rsendbuff.h	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/model/dsr-rsendbuff.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/dsr/test/dsr-test-suite.cc ns-3.43/src/dsr/test/dsr-test-suite.cc
--- ns-3.42/src/dsr/test/dsr-test-suite.cc	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/dsr/test/dsr-test-suite.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Yufei Cheng
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Yufei Cheng   <yfcheng@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/doc/energy.rst ns-3.43/src/energy/doc/energy.rst
--- ns-3.42/src/energy/doc/energy.rst	2024-05-29 15:29:46.944073200 -0700
+++ ns-3.43/src/energy/doc/energy.rst	2024-10-09 16:41:09.872655900 -0700
@@ -3,7 +3,7 @@
 .. highlight:: bash
 
 Energy Framework
-----------------
+================
 
 Energy is a key issue for wireless devices, and network researchers
 often need to investigate the energy consumption at a node or in the
@@ -16,9 +16,6 @@
 ns-3. The |ns3| energy framework provides the basis for energy storing
 consumption and harvesting.
 
-
-Model Description
-*****************
 The framework is implemented into the ``src/energy/`` folder.
 
 The |ns3| energy framework is composed of 3 essential parts:
@@ -37,7 +34,7 @@
 
 
 Energy Source Models
-====================
+--------------------
 
 An energy source represents a power supply. In |ns3|, nodes can
 have one or more energy sources. Likewise, energy sources can be
@@ -68,7 +65,7 @@
 The ``EnergySource`` base class keeps a list of devices (``DeviceEnergyModel`` objects) and energy harvesters (``EnergyHarvester`` objects) that are using the particular Energy Source as power supply. When energy is completely drained, the Energy Source will notify all devices on this list. Each device can then handle this event independently, based on the desired behavior that should be followed in case of power outage.
 
 Generic Battery Model
-#####################
+~~~~~~~~~~~~~~~~~~~~~
 
 The Generic battery model is able to represent 4 basic types of batteries
 chemistries: Lithium-Ion (LiIon) or Lithium Polymer (LiPo), Nickel Cadmium (NiCd),
@@ -134,7 +131,7 @@
 
 
 RV Battery Model
-################
+~~~~~~~~~~~~~~~~
 
 Attributes:
 
@@ -147,7 +144,7 @@
 * ``RvBatteryModelNumOfTerms``: The number of terms of the infinite sum for estimating battery level.
 
 Basic Energy Source
-###################
+~~~~~~~~~~~~~~~~~~~
 
 Attributes:
 
@@ -158,7 +155,7 @@
 
 
 Energy Consumption Models
-=========================
+-------------------------
 
 A ``DeviceEnergyModel`` is the energy consumption model of a device installed on the node.
 It is designed to be a state based model where each device is assumed to have a number of states, and each state is associated with a power consumption value.
@@ -169,7 +166,7 @@
 However, by converting the speed value into current draw directly, the same set of ``DeviceEnergyModel`` APIs can still be used.
 
 WiFi Radio Energy Model
-#######################
+~~~~~~~~~~~~~~~~~~~~~~~
 
 The WiFi Radio Energy Model is the energy consumption model of a Wifi
 net device. It provides a state for each of the available states of
@@ -219,7 +216,7 @@
 * ``TxCurrentModel``: A pointer to the attached tx current model.
 
 Energy Harvesting Models
-========================
+------------------------
 
 The energy harvester represents the elements that supply energy from
 the environment and recharge an energy source to which it is
@@ -233,7 +230,7 @@
 
 
 Usage
-*****
+-----
 
 The main way that ns-3 users will typically interact with the Energy
 Framework is through the helper API and through the publicly visible
@@ -260,7 +257,7 @@
 by the harvester.
 
 Helpers
-=======
+~~~~~~~
 
 **Energy Source Helper:**
 
@@ -344,7 +341,7 @@
 
 
 Tracing
-=======
+~~~~~~~
 
 Traced values differ between Energy Sources, Devices Energy Models and
 Energy Harvesters implementations, please look at the specific child
@@ -369,7 +366,7 @@
 * ``TotalEnergyHarvested``: Total energy harvested by the BasicEnergyHarvester.
 
 Examples
-========
+~~~~~~~~
 
 The following examples have been written.
 
@@ -388,12 +385,15 @@
 
 
 Tests
-=====
+~~~~~
 The following tests have been written, which can be found in ``src/energy/tests/``:
 
+* ``basic-energy-harvester-test.cc``: Test energy harvester procedure
+* ``li-ion-energy-source-test.cc``: Test the procedure of the li-ion energy source (Deprecated). Use generic-battery-model instead.
+
 
 Validation
-**********
+----------
 
 The RV battery model is validated by comparing results with what was presented in the original RV battery model paper. The generic battery model is validated by superimposing the obtained discharge curves with manufacturer's datasheets plots. The following shows the results of the ``generic-battery-discharge-example.cc`` superimposed to manufacturer's datasheets charts:
 
@@ -425,7 +425,7 @@
 
 
 Scope and Limitations
-=====================
+---------------------
 
 * In the ``GenericBatteryModel`` charging behavior (voltage as a function of SoC) is included but is not been thoroughly tested. Testing requires the implementation of a harvesting device (A charger) capable of providing a CCCV charging method typically used in batteries.
 * In the ``GenericBatteryModel`` impedance (battery resistance) is constant, battery aging or temperature effects are not considered.
@@ -433,7 +433,7 @@
 * The harvesting mode can only be used with basic energy sources because it does not consider the current capacity or voltage of the battery.
 
 Future Work
-===========
+-----------
 
 * Support of device energy models for PHY layers (lr-wpan, WiMax, etc) and other pieces of hardware (UAV, sensors, CPU).
 * Support for realistic charging batteries in the ``GenericBatteryModule``.
@@ -441,7 +441,7 @@
 * Implement an energy harvester that recharges the energy sources according to the power levels defined in a user customizable dataset of real measurements.
 
 References
-==========
+----------
 
 Energy source models and energy consumption models:
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/examples/basic-energy-model-test.cc ns-3.43/src/energy/examples/basic-energy-model-test.cc
--- ns-3.42/src/energy/examples/basic-energy-model-test.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/examples/basic-energy-model-test.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/examples/generic-battery-discharge-example.cc ns-3.43/src/energy/examples/generic-battery-discharge-example.cc
--- ns-3.42/src/energy/examples/generic-battery-discharge-example.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/examples/generic-battery-discharge-example.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Tokushima University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/examples/generic-battery-discharge-example.py ns-3.43/src/energy/examples/generic-battery-discharge-example.py
--- ns-3.42/src/energy/examples/generic-battery-discharge-example.py	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/examples/generic-battery-discharge-example.py	2024-10-09 16:41:09.872655900 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2023 Tokushima University
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
 #
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/examples/generic-battery-wifiradio-example.cc ns-3.43/src/energy/examples/generic-battery-wifiradio-example.cc
--- ns-3.42/src/energy/examples/generic-battery-wifiradio-example.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/examples/generic-battery-wifiradio-example.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Tokushima University, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/examples/li-ion-energy-source-example.cc ns-3.43/src/energy/examples/li-ion-energy-source-example.cc
--- ns-3.42/src/energy/examples/li-ion-energy-source-example.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/examples/li-ion-energy-source-example.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
@@ -45,9 +34,19 @@
  * http://www.panasonic.com/industrial/includes/pdf/Panasonic_LiIon_CGR18650DA.pdf
  */
 
+// NS_DEPRECATED_3_43() - tag for future removal
+// LiIonEnergySource was deprecated in commit
+// https://gitlab.com/nsnam/ns-3-dev/-/commit/086913b0
+//
+// The new battery model is illustrated in
+// `src/energy/examples/generic-battery-discharge-example.cc`
+
+NS_WARNING_PUSH_DEPRECATED;
+
 static void
 PrintCellInfo(Ptr<LiIonEnergySource> es)
 {
+    NS_WARNING_POP;
     std::cout << "At " << Simulator::Now().As(Time::S)
               << " Cell voltage: " << es->GetSupplyVoltage()
               << " V Remaining Capacity: " << es->GetRemainingEnergy() / (3.6 * 3600) << " Ah"
@@ -72,7 +71,9 @@
 
     Ptr<SimpleDeviceEnergyModel> sem = CreateObject<SimpleDeviceEnergyModel>();
     Ptr<EnergySourceContainer> esCont = CreateObject<EnergySourceContainer>();
+    NS_WARNING_PUSH_DEPRECATED;
     Ptr<LiIonEnergySource> es = CreateObject<LiIonEnergySource>();
+    NS_WARNING_POP;
     esCont->Add(es);
     es->SetNode(node);
     sem->SetEnergySource(es);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/examples/rv-battery-model-test.cc ns-3.43/src/energy/examples/rv-battery-model-test.cc
--- ns-3.42/src/energy/examples/rv-battery-model-test.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/examples/rv-battery-model-test.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/basic-energy-harvester-helper.cc ns-3.43/src/energy/helper/basic-energy-harvester-helper.cc
--- ns-3.42/src/energy/helper/basic-energy-harvester-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/basic-energy-harvester-helper.cc	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
@@ -27,7 +16,7 @@
 
 BasicEnergyHarvesterHelper::BasicEnergyHarvesterHelper()
 {
-    m_basicEnergyHarvester.SetTypeId("ns3::BasicEnergyHarvester");
+    m_basicEnergyHarvester.SetTypeId("ns3::energy::BasicEnergyHarvester");
 }
 
 BasicEnergyHarvesterHelper::~BasicEnergyHarvesterHelper()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/basic-energy-harvester-helper.h ns-3.43/src/energy/helper/basic-energy-harvester-helper.h
--- ns-3.42/src/energy/helper/basic-energy-harvester-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/basic-energy-harvester-helper.h	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/basic-energy-source-helper.cc ns-3.43/src/energy/helper/basic-energy-source-helper.cc
--- ns-3.42/src/energy/helper/basic-energy-source-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/basic-energy-source-helper.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
@@ -26,7 +15,7 @@
 
 BasicEnergySourceHelper::BasicEnergySourceHelper()
 {
-    m_basicEnergySource.SetTypeId("ns3::BasicEnergySource");
+    m_basicEnergySource.SetTypeId("ns3::energy::BasicEnergySource");
 }
 
 BasicEnergySourceHelper::~BasicEnergySourceHelper()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/basic-energy-source-helper.h ns-3.43/src/energy/helper/basic-energy-source-helper.h
--- ns-3.42/src/energy/helper/basic-energy-source-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/basic-energy-source-helper.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/energy-harvester-container.cc ns-3.43/src/energy/helper/energy-harvester-container.cc
--- ns-3.42/src/energy/helper/energy-harvester-container.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/energy-harvester-container.cc	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
@@ -34,7 +23,8 @@
 TypeId
 EnergyHarvesterContainer::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::EnergyHarvesterContainer")
+    static TypeId tid = TypeId("ns3::energy::EnergyHarvesterContainer")
+                            .AddDeprecatedName("ns3::EnergyHarvesterContainer")
                             .SetParent<Object>()
                             .SetGroupName("Energy")
                             .AddConstructor<EnergyHarvesterContainer>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/energy-harvester-container.h ns-3.43/src/energy/helper/energy-harvester-container.h
--- ns-3.42/src/energy/helper/energy-harvester-container.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/energy-harvester-container.h	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/energy-harvester-helper.cc ns-3.43/src/energy/helper/energy-harvester-helper.cc
--- ns-3.42/src/energy/helper/energy-harvester-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/energy-harvester-helper.cc	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
@@ -57,7 +46,7 @@
         if (!EnergyHarvesterContainerOnNode)
         {
             ObjectFactory fac;
-            fac.SetTypeId("ns3::EnergyHarvesterContainer");
+            fac.SetTypeId("ns3::energy::EnergyHarvesterContainer");
             EnergyHarvesterContainerOnNode = fac.Create<energy::EnergyHarvesterContainer>();
             EnergyHarvesterContainerOnNode->Add(harvester);
             node->AggregateObject(EnergyHarvesterContainerOnNode);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/energy-harvester-helper.h ns-3.43/src/energy/helper/energy-harvester-helper.h
--- ns-3.42/src/energy/helper/energy-harvester-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/energy-harvester-helper.h	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/energy-model-helper.cc ns-3.43/src/energy/helper/energy-model-helper.cc
--- ns-3.42/src/energy/helper/energy-model-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/energy-model-helper.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
@@ -55,7 +44,7 @@
         if (!EnergySourceContainerOnNode)
         {
             ObjectFactory fac;
-            fac.SetTypeId("ns3::EnergySourceContainer");
+            fac.SetTypeId("ns3::energy::EnergySourceContainer");
             EnergySourceContainerOnNode = fac.Create<energy::EnergySourceContainer>();
             EnergySourceContainerOnNode->Add(src);
             (*i)->AggregateObject(EnergySourceContainerOnNode);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/energy-model-helper.h ns-3.43/src/energy/helper/energy-model-helper.h
--- ns-3.42/src/energy/helper/energy-model-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/energy-model-helper.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/energy-source-container.cc ns-3.43/src/energy/helper/energy-source-container.cc
--- ns-3.42/src/energy/helper/energy-source-container.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/energy-source-container.cc	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
@@ -33,7 +22,8 @@
 TypeId
 EnergySourceContainer::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::EnergySourceContainer")
+    static TypeId tid = TypeId("ns3::energy::EnergySourceContainer")
+                            .AddDeprecatedName("ns3::EnergySourceContainer")
                             .SetParent<Object>()
                             .SetGroupName("Energy")
                             .AddConstructor<EnergySourceContainer>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/energy-source-container.h ns-3.43/src/energy/helper/energy-source-container.h
--- ns-3.42/src/energy/helper/energy-source-container.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/energy-source-container.h	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/generic-battery-model-helper.cc ns-3.43/src/energy/helper/generic-battery-model-helper.cc
--- ns-3.42/src/energy/helper/generic-battery-model-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/generic-battery-model-helper.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Tokushima University, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
@@ -24,7 +13,7 @@
 
 GenericBatteryModelHelper::GenericBatteryModelHelper()
 {
-    m_batteryModel.SetTypeId("ns3::GenericBatteryModel");
+    m_batteryModel.SetTypeId("ns3::energy::GenericBatteryModel");
 }
 
 GenericBatteryModelHelper::~GenericBatteryModelHelper()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/generic-battery-model-helper.h ns-3.43/src/energy/helper/generic-battery-model-helper.h
--- ns-3.42/src/energy/helper/generic-battery-model-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/generic-battery-model-helper.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Tokushima University, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/li-ion-energy-source-helper.cc ns-3.43/src/energy/helper/li-ion-energy-source-helper.cc
--- ns-3.42/src/energy/helper/li-ion-energy-source-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/li-ion-energy-source-helper.cc	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hoda Ayatollahi <hayatoll@ur.rochester.edu>
  *          Cristiano Tapparello <cristiano.tapparello@rochester.edu>
@@ -28,7 +17,7 @@
 
 LiIonEnergySourceHelper::LiIonEnergySourceHelper()
 {
-    m_liIonEnergySource.SetTypeId("ns3::LiIonEnergySource");
+    m_liIonEnergySource.SetTypeId("ns3::energy::LiIonEnergySource");
 }
 
 LiIonEnergySourceHelper::~LiIonEnergySourceHelper()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/li-ion-energy-source-helper.h ns-3.43/src/energy/helper/li-ion-energy-source-helper.h
--- ns-3.42/src/energy/helper/li-ion-energy-source-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/li-ion-energy-source-helper.h	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hoda Ayatollahi <hayatoll@ur.rochester.edu>
  *          Cristiano Tapparello <cristiano.tapparello@rochester.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/rv-battery-model-helper.cc ns-3.43/src/energy/helper/rv-battery-model-helper.cc
--- ns-3.42/src/energy/helper/rv-battery-model-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/rv-battery-model-helper.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
@@ -26,7 +15,7 @@
 
 RvBatteryModelHelper::RvBatteryModelHelper()
 {
-    m_rvBatteryModel.SetTypeId("ns3::RvBatteryModel");
+    m_rvBatteryModel.SetTypeId("ns3::energy::RvBatteryModel");
 }
 
 RvBatteryModelHelper::~RvBatteryModelHelper()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/helper/rv-battery-model-helper.h ns-3.43/src/energy/helper/rv-battery-model-helper.h
--- ns-3.42/src/energy/helper/rv-battery-model-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/helper/rv-battery-model-helper.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/basic-energy-harvester.cc ns-3.43/src/energy/model/basic-energy-harvester.cc
--- ns-3.42/src/energy/model/basic-energy-harvester.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/basic-energy-harvester.cc	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
@@ -39,7 +28,8 @@
 BasicEnergyHarvester::GetTypeId()
 {
     static TypeId tid =
-        TypeId("ns3::BasicEnergyHarvester")
+        TypeId("ns3::energy::BasicEnergyHarvester")
+            .AddDeprecatedName("ns3::BasicEnergyHarvester")
             .SetParent<EnergyHarvester>()
             .SetGroupName("Energy")
             .AddConstructor<BasicEnergyHarvester>()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/basic-energy-harvester.h ns-3.43/src/energy/model/basic-energy-harvester.h
--- ns-3.42/src/energy/model/basic-energy-harvester.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/basic-energy-harvester.h	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/basic-energy-source.cc ns-3.43/src/energy/model/basic-energy-source.cc
--- ns-3.42/src/energy/model/basic-energy-source.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/basic-energy-source.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
@@ -37,7 +26,8 @@
 BasicEnergySource::GetTypeId()
 {
     static TypeId tid =
-        TypeId("ns3::BasicEnergySource")
+        TypeId("ns3::energy::BasicEnergySource")
+            .AddDeprecatedName("ns3::BasicEnergySource")
             .SetParent<EnergySource>()
             .SetGroupName("Energy")
             .AddConstructor<BasicEnergySource>()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/basic-energy-source.h ns-3.43/src/energy/model/basic-energy-source.h
--- ns-3.42/src/energy/model/basic-energy-source.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/basic-energy-source.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/device-energy-model.cc ns-3.43/src/energy/model/device-energy-model.cc
--- ns-3.42/src/energy/model/device-energy-model.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/device-energy-model.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
@@ -32,7 +21,10 @@
 TypeId
 DeviceEnergyModel::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::DeviceEnergyModel").SetParent<Object>().SetGroupName("Energy");
+    static TypeId tid = TypeId("ns3::energy::DeviceEnergyModel")
+                            .AddDeprecatedName("ns3::DeviceEnergyModel")
+                            .SetParent<Object>()
+                            .SetGroupName("Energy");
     return tid;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/device-energy-model-container.cc ns-3.43/src/energy/model/device-energy-model-container.cc
--- ns-3.42/src/energy/model/device-energy-model-container.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/device-energy-model-container.cc	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/device-energy-model-container.h ns-3.43/src/energy/model/device-energy-model-container.h
--- ns-3.42/src/energy/model/device-energy-model-container.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/device-energy-model-container.h	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/device-energy-model.h ns-3.43/src/energy/model/device-energy-model.h
--- ns-3.42/src/energy/model/device-energy-model.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/device-energy-model.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/energy-harvester.cc ns-3.43/src/energy/model/energy-harvester.cc
--- ns-3.42/src/energy/model/energy-harvester.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/energy-harvester.cc	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
@@ -33,7 +22,10 @@
 TypeId
 EnergyHarvester::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::EnergyHarvester").SetParent<Object>().SetGroupName("Energy");
+    static TypeId tid = TypeId("ns3::energy::EnergyHarvester")
+                            .AddDeprecatedName("ns3::EnergyHarvester")
+                            .SetParent<Object>()
+                            .SetGroupName("Energy");
     return tid;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/energy-harvester.h ns-3.43/src/energy/model/energy-harvester.h
--- ns-3.42/src/energy/model/energy-harvester.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/energy-harvester.h	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/energy-source.cc ns-3.43/src/energy/model/energy-source.cc
--- ns-3.42/src/energy/model/energy-source.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/energy-source.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  *
@@ -37,7 +26,10 @@
 TypeId
 EnergySource::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::EnergySource").SetParent<Object>().SetGroupName("Energy");
+    static TypeId tid = TypeId("ns3::energy::EnergySource")
+                            .AddDeprecatedName("ns3::EnergySource")
+                            .SetParent<Object>()
+                            .SetGroupName("Energy");
     return tid;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/energy-source.h ns-3.43/src/energy/model/energy-source.h
--- ns-3.42/src/energy/model/energy-source.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/energy-source.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/generic-battery-model.cc ns-3.43/src/energy/model/generic-battery-model.cc
--- ns-3.42/src/energy/model/generic-battery-model.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/generic-battery-model.cc	2024-10-09 16:41:09.872655900 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2023 Tokushima University, Japan:
  * NiMh,NiCd,LeaAcid batteries and preset and multicell extensions.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  *         Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
@@ -42,7 +31,8 @@
 GenericBatteryModel::GetTypeId()
 {
     static TypeId tid =
-        TypeId("ns3::GenericBatteryModel")
+        TypeId("ns3::energy::GenericBatteryModel")
+            .AddDeprecatedName("ns3::GenericBatteryModel")
             .SetParent<EnergySource>()
             .SetGroupName("Energy")
             .AddConstructor<GenericBatteryModel>()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/generic-battery-model.h ns-3.43/src/energy/model/generic-battery-model.h
--- ns-3.42/src/energy/model/generic-battery-model.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/generic-battery-model.h	2024-10-09 16:41:09.872655900 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2023 Tokushima University, Japan:
  * NiMh,NiCd,LeaAcid batteries and preset and multi-cell extensions.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  *         Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/li-ion-energy-source.cc ns-3.43/src/energy/model/li-ion-energy-source.cc
--- ns-3.42/src/energy/model/li-ion-energy-source.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/li-ion-energy-source.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
@@ -39,7 +28,8 @@
 LiIonEnergySource::GetTypeId()
 {
     static TypeId tid =
-        TypeId("ns3::LiIonEnergySource")
+        TypeId("ns3::energy::LiIonEnergySource")
+            .AddDeprecatedName("ns3::LiIonEnergySource")
             .SetParent<EnergySource>()
             .SetGroupName("Energy")
             .AddConstructor<LiIonEnergySource>()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/li-ion-energy-source.h ns-3.43/src/energy/model/li-ion-energy-source.h
--- ns-3.42/src/energy/model/li-ion-energy-source.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/li-ion-energy-source.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
@@ -36,9 +25,6 @@
  * \ingroup energy
  * \brief Model a generic Lithium Ion Battery basing on [1][2].
  *
- * \deprecated The LiIonEnergySource was deprecated in ns-3.40 in favor of GenericBatteryModel, and
- * will be removed in a future release.
- *
  * The model can be fitted to any type of Li-Ion Battery, simply changing the
  * model parameters.
  * The default values are fitted for the Panasonic CGR18650DA Li-Ion Battery [3].
@@ -76,9 +62,15 @@
  * Generic Battery Model for the Dynamic Simulation of Hybrid Electric Vehicles," Ecole de
  * Technologie Superieure, Universite du Quebec, 2007 [3]
  * http://www.panasonic.com/industrial/includes/pdf/Panasonic_LiIon_CGR18650DA.pdf
- *
+
  */
-class LiIonEnergySource : public EnergySource
+// clang-format off
+class
+NS_DEPRECATED_3_40("The LiIonEnergySource was deprecated in ns-3.40 "
+                   "in favor of GenericBatteryModel, and will be removed "
+                   "in a future release.")
+LiIonEnergySource : public EnergySource
+// clang-format on
 {
   public:
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/rv-battery-model.cc ns-3.43/src/energy/model/rv-battery-model.cc
--- ns-3.42/src/energy/model/rv-battery-model.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/rv-battery-model.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
@@ -39,7 +28,8 @@
 RvBatteryModel::GetTypeId()
 {
     static TypeId tid =
-        TypeId("ns3::RvBatteryModel")
+        TypeId("ns3::energy::RvBatteryModel")
+            .AddDeprecatedName("ns3::RvBatteryModel")
             .SetParent<EnergySource>()
             .SetGroupName("Energy")
             .AddConstructor<RvBatteryModel>()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/rv-battery-model.h ns-3.43/src/energy/model/rv-battery-model.h
--- ns-3.42/src/energy/model/rv-battery-model.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/rv-battery-model.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/simple-device-energy-model.cc ns-3.43/src/energy/model/simple-device-energy-model.cc
--- ns-3.42/src/energy/model/simple-device-energy-model.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/simple-device-energy-model.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
@@ -36,7 +25,8 @@
 TypeId
 SimpleDeviceEnergyModel::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::SimpleDeviceEnergyModel")
+    static TypeId tid = TypeId("ns3::energy::SimpleDeviceEnergyModel")
+                            .AddDeprecatedName("ns3::SimpleDeviceEnergyModel")
                             .SetParent<DeviceEnergyModel>()
                             .SetGroupName("Energy")
                             .AddConstructor<SimpleDeviceEnergyModel>()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/model/simple-device-energy-model.h ns-3.43/src/energy/model/simple-device-energy-model.h
--- ns-3.42/src/energy/model/simple-device-energy-model.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/model/simple-device-energy-model.h	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/test/basic-energy-harvester-test.cc ns-3.43/src/energy/test/basic-energy-harvester-test.cc
--- ns-3.42/src/energy/test/basic-energy-harvester-test.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/test/basic-energy-harvester-test.cc	2024-10-09 16:41:09.872655900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2014 Wireless Communications and Networking Group (WCNG),
  * University of Rochester, Rochester, NY, USA.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Cristiano Tapparello <cristiano.tapparello@rochester.edu>
  */
@@ -68,8 +57,8 @@
 BasicEnergyHarvesterTestCase::DoRun()
 {
     // set types
-    m_energySource.SetTypeId("ns3::BasicEnergySource");
-    m_energyHarvester.SetTypeId("ns3::BasicEnergyHarvester");
+    m_energySource.SetTypeId("ns3::energy::BasicEnergySource");
+    m_energyHarvester.SetTypeId("ns3::energy::BasicEnergyHarvester");
     // create node
     Ptr<Node> node = CreateObject<Node>();
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/energy/test/li-ion-energy-source-test.cc ns-3.43/src/energy/test/li-ion-energy-source-test.cc
--- ns-3.42/src/energy/test/li-ion-energy-source-test.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/energy/test/li-ion-energy-source-test.cc	2024-10-09 16:41:09.872655900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
@@ -27,6 +16,18 @@
 using namespace ns3;
 using namespace ns3::energy;
 
+// NS_DEPRECATED_3_43() - tag for future removal
+// LiIonEnergySource was deprecated in commit
+// https://gitlab.com/nsnam/ns-3-dev/-/commit/086913b0
+//
+// The new battery model is illustrated in
+// `src/energy/examples/generic-battery-discharge-example.cc`
+//
+// A GenericBatteryModelTestCase is being developed in MR 2181
+// https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/2181
+// which will be in
+// `src/energy/test/generic-battery-model-test.cc`
+
 NS_LOG_COMPONENT_DEFINE("LiIonEnergySourceTestSuite");
 
 /**
@@ -61,7 +62,10 @@
     m_node = CreateObject<Node>();
 
     Ptr<SimpleDeviceEnergyModel> sem = CreateObject<SimpleDeviceEnergyModel>();
+
+    NS_WARNING_PUSH_DEPRECATED;
     Ptr<LiIonEnergySource> es = CreateObject<LiIonEnergySource>();
+    NS_WARNING_POP;
 
     es->SetNode(m_node);
     sem->SetEnergySource(es);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/dummy-network.cc ns-3.43/src/fd-net-device/examples/dummy-network.cc
--- ns-3.42/src/fd-net-device/examples/dummy-network.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/dummy-network.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington, 2012 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/fd2fd-onoff.cc ns-3.43/src/fd-net-device/examples/fd2fd-onoff.cc
--- ns-3.42/src/fd-net-device/examples/fd2fd-onoff.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/fd2fd-onoff.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington, 2012 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alina Quereilhac <alina.quereilhac@inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/fd-emu-onoff.cc ns-3.43/src/fd-net-device/examples/fd-emu-onoff.cc
--- ns-3.42/src/fd-net-device/examples/fd-emu-onoff.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/fd-emu-onoff.cc	2024-10-09 16:41:09.876655800 -0700
@@ -3,18 +3,7 @@
  *               2017 Università' degli Studi di Napoli Federico II
  *               2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alina Quereilhac <alina.quereilhac@inria.fr>
  * Extended by: Pasquale Imputato <p.imputato@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/fd-emu-ping.cc ns-3.43/src/fd-net-device/examples/fd-emu-ping.cc
--- ns-3.42/src/fd-net-device/examples/fd-emu-ping.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/fd-emu-ping.cc	2024-10-09 16:41:09.876655800 -0700
@@ -3,18 +3,7 @@
  *               2017 Università' degli Studi di Napoli Federico II
  *               2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Allow ns-3 to ping a real host somewhere, using emulation mode
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/fd-emu-send.cc ns-3.43/src/fd-net-device/examples/fd-emu-send.cc
--- ns-3.42/src/fd-net-device/examples/fd-emu-send.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/fd-emu-send.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pasquale Imputato <p.imputato@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/fd-emu-tc.cc ns-3.43/src/fd-net-device/examples/fd-emu-tc.cc
--- ns-3.42/src/fd-net-device/examples/fd-emu-tc.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/fd-emu-tc.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pasquale Imputato <p.imputato@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/fd-emu-udp-echo.cc ns-3.43/src/fd-net-device/examples/fd-emu-udp-echo.cc
--- ns-3.42/src/fd-net-device/examples/fd-emu-udp-echo.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/fd-emu-udp-echo.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington, 2012 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/fd-tap-ping6.cc ns-3.43/src/fd-net-device/examples/fd-tap-ping6.cc
--- ns-3.42/src/fd-net-device/examples/fd-tap-ping6.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/fd-tap-ping6.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington, 2012 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Allow ns-3 to ping a TAP device in the host machine.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/fd-tap-ping.cc ns-3.43/src/fd-net-device/examples/fd-tap-ping.cc
--- ns-3.42/src/fd-net-device/examples/fd-tap-ping.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/fd-tap-ping.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington, 2012 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Allow ns-3 to ping a real host somewhere, using emulation mode and ping
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/realtime-dummy-network.cc ns-3.43/src/fd-net-device/examples/realtime-dummy-network.cc
--- ns-3.42/src/fd-net-device/examples/realtime-dummy-network.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/realtime-dummy-network.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington, 2012 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/examples/realtime-fd2fd-onoff.cc ns-3.43/src/fd-net-device/examples/realtime-fd2fd-onoff.cc
--- ns-3.42/src/fd-net-device/examples/realtime-fd2fd-onoff.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/examples/realtime-fd2fd-onoff.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington, 2012 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alina Quereilhac <alina.quereilhac@inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/creator-utils.cc ns-3.43/src/fd-net-device/helper/creator-utils.cc
--- ns-3.42/src/fd-net-device/helper/creator-utils.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/creator-utils.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "creator-utils.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/creator-utils.h ns-3.43/src/fd-net-device/helper/creator-utils.h
--- ns-3.42/src/fd-net-device/helper/creator-utils.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/creator-utils.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef CREATOR_UTILS_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/dpdk-net-device-helper.cc ns-3.43/src/fd-net-device/helper/dpdk-net-device-helper.cc
--- ns-3.42/src/fd-net-device/helper/dpdk-net-device-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/dpdk-net-device-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Harsh Patel <thadodaharsh10@gmail.com>
  *          Hrishikesh Hiraskar <hrishihiraskar@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/dpdk-net-device-helper.h ns-3.43/src/fd-net-device/helper/dpdk-net-device-helper.h
--- ns-3.42/src/fd-net-device/helper/dpdk-net-device-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/dpdk-net-device-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Harsh Patel <thadodaharsh10@gmail.com>
  *          Hrishikesh Hiraskar <hrishihiraskar@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/emu-fd-net-device-helper.cc ns-3.43/src/fd-net-device/helper/emu-fd-net-device-helper.cc
--- ns-3.42/src/fd-net-device/helper/emu-fd-net-device-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/emu-fd-net-device-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 INRIA, 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "emu-fd-net-device-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/emu-fd-net-device-helper.h ns-3.43/src/fd-net-device/helper/emu-fd-net-device-helper.h
--- ns-3.42/src/fd-net-device/helper/emu-fd-net-device-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/emu-fd-net-device-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 INRIA, 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/encode-decode.cc ns-3.43/src/fd-net-device/helper/encode-decode.cc
--- ns-3.42/src/fd-net-device/helper/encode-decode.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/encode-decode.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include <iomanip>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/encode-decode.h ns-3.43/src/fd-net-device/helper/encode-decode.h
--- ns-3.42/src/fd-net-device/helper/encode-decode.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/encode-decode.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef ENCODE_DECODE_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/fd-net-device-helper.cc ns-3.43/src/fd-net-device/helper/fd-net-device-helper.cc
--- ns-3.42/src/fd-net-device/helper/fd-net-device-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/fd-net-device-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alina Quereilhac <alina.quereilhac@inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/fd-net-device-helper.h ns-3.43/src/fd-net-device/helper/fd-net-device-helper.h
--- ns-3.42/src/fd-net-device/helper/fd-net-device-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/fd-net-device-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alina Quereilhac <alina.quereilhac@inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/netmap-device-creator.cc ns-3.43/src/fd-net-device/helper/netmap-device-creator.cc
--- ns-3.42/src/fd-net-device/helper/netmap-device-creator.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/netmap-device-creator.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "creator-utils.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/netmap-net-device-helper.cc ns-3.43/src/fd-net-device/helper/netmap-net-device-helper.cc
--- ns-3.42/src/fd-net-device/helper/netmap-net-device-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/netmap-net-device-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pasquale Imputato <p.imputato@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/netmap-net-device-helper.h ns-3.43/src/fd-net-device/helper/netmap-net-device-helper.h
--- ns-3.42/src/fd-net-device/helper/netmap-net-device-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/netmap-net-device-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pasquale Imputato <p.imputato@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/raw-sock-creator.cc ns-3.43/src/fd-net-device/helper/raw-sock-creator.cc
--- ns-3.42/src/fd-net-device/helper/raw-sock-creator.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/raw-sock-creator.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "creator-utils.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/tap-device-creator.cc ns-3.43/src/fd-net-device/helper/tap-device-creator.cc
--- ns-3.42/src/fd-net-device/helper/tap-device-creator.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/tap-device-creator.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "creator-utils.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/tap-fd-net-device-helper.cc ns-3.43/src/fd-net-device/helper/tap-fd-net-device-helper.cc
--- ns-3.42/src/fd-net-device/helper/tap-fd-net-device-helper.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/tap-fd-net-device-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 INRIA, 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "tap-fd-net-device-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/helper/tap-fd-net-device-helper.h ns-3.43/src/fd-net-device/helper/tap-fd-net-device-helper.h
--- ns-3.42/src/fd-net-device/helper/tap-fd-net-device-helper.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/helper/tap-fd-net-device-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 INRIA, 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/model/dpdk-net-device.cc ns-3.43/src/fd-net-device/model/dpdk-net-device.cc
--- ns-3.42/src/fd-net-device/model/dpdk-net-device.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/model/dpdk-net-device.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Harsh Patel <thadodaharsh10@gmail.com>
  *         Hrishikesh Hiraskar <hrishihiraskar@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/model/dpdk-net-device.h ns-3.43/src/fd-net-device/model/dpdk-net-device.h
--- ns-3.42/src/fd-net-device/model/dpdk-net-device.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/model/dpdk-net-device.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Harsh Patel <thadodaharsh10@gmail.com>
  *         Hrishikesh Hiraskar <hrishihiraskar@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/model/fd-net-device.cc ns-3.43/src/fd-net-device/model/fd-net-device.cc
--- ns-3.42/src/fd-net-device/model/fd-net-device.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/model/fd-net-device.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 INRIA, 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alina Quereilhac <alina.quereilhac@inria.fr>
  *         Claudio Freire <klaussfreire@sourceforge.net>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/model/fd-net-device.h ns-3.43/src/fd-net-device/model/fd-net-device.h
--- ns-3.42/src/fd-net-device/model/fd-net-device.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/model/fd-net-device.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 INRIA, 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alina Quereilhac <alina.quereilhac@inria.fr>
  *         Claudio Freire <klaussfreire@sourceforge.net>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/model/netmap-net-device.cc ns-3.43/src/fd-net-device/model/netmap-net-device.cc
--- ns-3.42/src/fd-net-device/model/netmap-net-device.cc	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/model/netmap-net-device.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pasquale Imputato <p.imputato@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/fd-net-device/model/netmap-net-device.h ns-3.43/src/fd-net-device/model/netmap-net-device.h
--- ns-3.42/src/fd-net-device/model/netmap-net-device.h	2024-05-29 15:29:46.948073100 -0700
+++ ns-3.43/src/fd-net-device/model/netmap-net-device.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pasquale Imputato <p.imputato@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/examples/wifi-olsr-flowmon.py ns-3.43/src/flow-monitor/examples/wifi-olsr-flowmon.py
--- ns-3.42/src/flow-monitor/examples/wifi-olsr-flowmon.py	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/examples/wifi-olsr-flowmon.py	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 # -*-  Mode: Python; -*-
 #  Copyright (c) 2009 INESC Porto
 #
-#  This program is free software; you can redistribute it and/or modify
-#  it under the terms of the GNU General Public License version 2 as
-#  published by the Free Software Foundation;
-#
-#  This program is distributed in the hope that it will be useful,
-#  but WITHOUT ANY WARRANTY; without even the implied warranty of
-#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-#  GNU General Public License for more details.
-#
-#  You should have received a copy of the GNU General Public License
-#  along with this program; if not, write to the Free Software
-#  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#  SPDX-License-Identifier: GPL-2.0-only
 #
 #  Authors: Gustavo Carneiro <gjc@inescporto.pt>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/helper/flow-monitor-helper.cc ns-3.43/src/flow-monitor/helper/flow-monitor-helper.cc
--- ns-3.42/src/flow-monitor/helper/flow-monitor-helper.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/helper/flow-monitor-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/helper/flow-monitor-helper.h ns-3.43/src/flow-monitor/helper/flow-monitor-helper.h
--- ns-3.42/src/flow-monitor/helper/flow-monitor-helper.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/helper/flow-monitor-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/flow-classifier.cc ns-3.43/src/flow-monitor/model/flow-classifier.cc
--- ns-3.42/src/flow-monitor/model/flow-classifier.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/flow-classifier.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/flow-classifier.h ns-3.43/src/flow-monitor/model/flow-classifier.h
--- ns-3.42/src/flow-monitor/model/flow-classifier.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/flow-classifier.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/flow-monitor.cc ns-3.43/src/flow-monitor/model/flow-monitor.cc
--- ns-3.42/src/flow-monitor/model/flow-monitor.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/flow-monitor.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
@@ -24,6 +13,7 @@
 #include "ns3/simulator.h"
 
 #include <fstream>
+#include <limits>
 #include <sstream>
 
 #define PERIODIC_CHECK_INTERVAL (Seconds(1))
@@ -125,6 +115,8 @@
         ref.delaySum = Seconds(0);
         ref.jitterSum = Seconds(0);
         ref.lastDelay = Seconds(0);
+        ref.maxDelay = Seconds(0);
+        ref.minDelay = Seconds(std::numeric_limits<double>::max());
         ref.txBytes = 0;
         ref.rxBytes = 0;
         ref.txPackets = 0;
@@ -245,6 +237,14 @@
         }
     }
     stats.lastDelay = delay;
+    if (delay > stats.maxDelay)
+    {
+        stats.maxDelay = delay;
+    }
+    if (delay < stats.minDelay)
+    {
+        stats.minDelay = delay;
+    }
 
     stats.rxBytes += packetSize;
     stats.packetSizeHistogram.AddValue((double)packetSize);
@@ -443,15 +443,14 @@
     for (auto flowI = m_flowStats.begin(); flowI != m_flowStats.end(); flowI++)
     {
         os << std::string(indent, ' ');
-#define ATTRIB(name) << " " #name "=\"" << flowI->second.name << "\""
-#define ATTRIB_TIME(name) << " " #name "=\"" << flowI->second.name.As(Time::NS) << "\""
-        os << "<Flow flowId=\"" << flowI->first
-           << "\"" ATTRIB_TIME(timeFirstTxPacket) ATTRIB_TIME(timeFirstRxPacket)
-                  ATTRIB_TIME(timeLastTxPacket) ATTRIB_TIME(timeLastRxPacket) ATTRIB_TIME(delaySum)
-                      ATTRIB_TIME(jitterSum) ATTRIB_TIME(lastDelay) ATTRIB(txBytes) ATTRIB(rxBytes)
-                          ATTRIB(txPackets) ATTRIB(rxPackets) ATTRIB(lostPackets)
-                              ATTRIB(timesForwarded)
-           << ">\n";
+#define ATTRIB(name) " " #name "=\"" << flowI->second.name << "\""
+#define ATTRIB_TIME(name) " " #name "=\"" << flowI->second.name.As(Time::NS) << "\""
+        os << "<Flow flowId=\"" << flowI->first << "\"" << ATTRIB_TIME(timeFirstTxPacket)
+           << ATTRIB_TIME(timeFirstRxPacket) << ATTRIB_TIME(timeLastTxPacket)
+           << ATTRIB_TIME(timeLastRxPacket) << ATTRIB_TIME(delaySum) << ATTRIB_TIME(jitterSum)
+           << ATTRIB_TIME(lastDelay) << ATTRIB_TIME(maxDelay) << ATTRIB_TIME(minDelay)
+           << ATTRIB(txBytes) << ATTRIB(rxBytes) << ATTRIB(txPackets) << ATTRIB(rxPackets)
+           << ATTRIB(lostPackets) << ATTRIB(timesForwarded) << ">\n";
 #undef ATTRIB_TIME
 #undef ATTRIB
 
@@ -539,6 +538,8 @@
         flowStat.delaySum = Seconds(0);
         flowStat.jitterSum = Seconds(0);
         flowStat.lastDelay = Seconds(0);
+        flowStat.maxDelay = Seconds(0);
+        flowStat.minDelay = Seconds(std::numeric_limits<double>::max());
         flowStat.txBytes = 0;
         flowStat.rxBytes = 0;
         flowStat.txPackets = 0;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/flow-monitor.h ns-3.43/src/flow-monitor/model/flow-monitor.h
--- ns-3.42/src/flow-monitor/model/flow-monitor.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/flow-monitor.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
@@ -89,6 +78,10 @@
         /// Contains the last measured delay of a packet
         /// It is stored to measure the packet's Jitter
         Time lastDelay;
+        /// Contains the largest measured delay of a received packet
+        Time maxDelay;
+        /// Contains the smallest measured delay of a received packet
+        Time minDelay;
 
         /// Total number of transmitted bytes for the flow
         uint64_t txBytes;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/flow-probe.cc ns-3.43/src/flow-monitor/model/flow-probe.cc
--- ns-3.42/src/flow-monitor/model/flow-probe.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/flow-probe.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/flow-probe.h ns-3.43/src/flow-monitor/model/flow-probe.h
--- ns-3.42/src/flow-monitor/model/flow-probe.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/flow-probe.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/ipv4-flow-classifier.cc ns-3.43/src/flow-monitor/model/ipv4-flow-classifier.cc
--- ns-3.42/src/flow-monitor/model/ipv4-flow-classifier.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/ipv4-flow-classifier.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/ipv4-flow-classifier.h ns-3.43/src/flow-monitor/model/ipv4-flow-classifier.h
--- ns-3.42/src/flow-monitor/model/ipv4-flow-classifier.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/ipv4-flow-classifier.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/ipv4-flow-probe.cc ns-3.43/src/flow-monitor/model/ipv4-flow-probe.cc
--- ns-3.42/src/flow-monitor/model/ipv4-flow-probe.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/ipv4-flow-probe.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/ipv4-flow-probe.h ns-3.43/src/flow-monitor/model/ipv4-flow-probe.h
--- ns-3.42/src/flow-monitor/model/ipv4-flow-probe.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/ipv4-flow-probe.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/ipv6-flow-classifier.cc ns-3.43/src/flow-monitor/model/ipv6-flow-classifier.cc
--- ns-3.42/src/flow-monitor/model/ipv6-flow-classifier.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/ipv6-flow-classifier.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 // Modifications: Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/ipv6-flow-classifier.h ns-3.43/src/flow-monitor/model/ipv6-flow-classifier.h
--- ns-3.42/src/flow-monitor/model/ipv6-flow-classifier.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/ipv6-flow-classifier.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 // Modifications: Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/ipv6-flow-probe.cc ns-3.43/src/flow-monitor/model/ipv6-flow-probe.cc
--- ns-3.42/src/flow-monitor/model/ipv6-flow-probe.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/ipv6-flow-probe.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 // Modifications: Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/flow-monitor/model/ipv6-flow-probe.h ns-3.43/src/flow-monitor/model/ipv6-flow-probe.h
--- ns-3.42/src/flow-monitor/model/ipv6-flow-probe.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/flow-monitor/model/ipv6-flow-probe.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 // Modifications: Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/doc/tcp.rst ns-3.43/src/internet/doc/tcp.rst
--- ns-3.42/src/internet/doc/tcp.rst	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/doc/tcp.rst	2024-10-09 16:41:09.880655800 -0700
@@ -464,11 +464,11 @@
 
    if (m_cWndCnt >= w)
    {
-      uint32_t delta = m_cWndCnt / w;
+       uint32_t delta = m_cWndCnt / w;
 
-      m_cWndCnt -= delta * w;
-      tcb->m_cWnd += delta * tcb->m_segmentSize;
-      NS_LOG_DEBUG("Subtracting delta * w from m_cWndCnt " << delta * w);
+       m_cWndCnt -= delta * w;
+       tcb->m_cWnd += delta * tcb->m_segmentSize;
+       NS_LOG_DEBUG("Subtracting delta * w from m_cWndCnt " << delta * w);
    }
 
 
@@ -476,13 +476,13 @@
    :caption: New Reno `cwnd` update
 
    if (segmentsAcked > 0)
-    {
-      double adder = static_cast<double>(tcb->m_segmentSize * tcb->m_segmentSize) / tcb->m_cWnd.Get();
-      adder = std::max(1.0, adder);
-      tcb->m_cWnd += static_cast<uint32_t>(adder);
-      NS_LOG_INFO("In CongAvoid, updated to cwnd " << tcb->m_cWnd <<
+   {
+       double adder = static_cast<double>(tcb->m_segmentSize * tcb->m_segmentSize) / tcb->m_cWnd.Get();
+       adder = std::max(1.0, adder);
+       tcb->m_cWnd += static_cast<uint32_t>(adder);
+       NS_LOG_INFO("In CongAvoid, updated to cwnd " << tcb->m_cWnd <<
                    " ssthresh " << tcb->m_ssThresh);
-    }
+   }
 
 
 So, there are two main difference between the TCP Linux Reno and TCP NewReno
@@ -821,9 +821,9 @@
 The transport ``TcpHtcp`` can be selected in the program
 ``examples/tcp/tcp-variants-comparison.cc`` to perform an experiment with H-TCP,
 although it is useful to increase the bandwidth in this example (e.g.
-to 20 Mb/s) to create a higher BDP link, such as
+to 20 Mb/s) to create a higher BDP link, such as:
 
-::
+.. code-block:: bash
 
   ./ns3 run "tcp-variants-comparison --transport_prot=TcpHtcp --bandwidth=20Mbps --duration=10"
 
@@ -844,11 +844,11 @@
 
 On receipt of an ACK::
 
-       currentdelay = acknowledgement.delay
-       basedelay = min(basedelay, currentdelay)
-       queuingdelay = currentdelay - basedelay
-       offtarget =(TARGET - queuingdelay) / TARGET
-       cWnd += GAIN * offtarget * bytesnewlyacked * MSS / cWnd
+  currentdelay = acknowledgement.delay;
+  basedelay = min(basedelay, currentdelay);
+  queuingdelay = currentdelay - basedelay;
+  offtarget =(TARGET - queuingdelay) / TARGET;
+  cWnd += GAIN * offtarget * bytesnewlyacked * MSS / cWnd;
 
 ``TARGET`` is the maximum queueing delay that LEDBAT itself may introduce in the
 network, and ``GAIN`` determines the rate at which the cwnd responds to changes in
@@ -899,14 +899,14 @@
 
 .. math::
 
-  One way delay = Receiver timestamp - Receiver timestamp echo reply
-  Smoothed one way delay = 7/8 * Old Smoothed one way delay + 1/8 * one way delay
-  If smoothed one way delay > owdMin + 15 * (owdMax - owdMin) / 100
-    if LP_WITHIN_INF
-      cwnd = 1
-    else
-      cwnd = cwnd / 2
-    Inference timer is set
+  \text{One way delay} &= \text{Receiver timestamp} - \text{Receiver timestamp echo reply} \\
+  \text{Smoothed one way delay} &= \frac{7}{8} \times \text{Old Smoothed one way delay} + \frac{1}{8} \times \text{one way delay} \\
+  \text{If smoothed one way delay} &> \text{owdMin} + \frac{15 \times (\text{owdMax} - \text{owdMin})}{100} \\
+      &\text{if LP\_WITHIN\_INF} \\
+          &\quad \text{cwnd} = 1 \\
+      &\text{else} \\
+          &\quad \text{cwnd} = \frac{\text{cwnd}}{2} \\
+      &\text{Inference timer is set}
 
 where owdMin and owdMax are the minimum and maximum one way delays experienced
 throughout the connection, LP_WITHIN_INF indicates if TCP-LP is in inference
@@ -948,7 +948,7 @@
 
 .. math::
 
-               \alpha = (1 - g) * \alpha + g * F
+  \alpha = (1 - g) * \alpha + g * F
 
 In the above EWMA:
 
@@ -961,7 +961,7 @@
 
 .. math::
 
-               cwnd = cwnd * (1 - \alpha / 2)
+  cwnd = cwnd * (1 - \alpha / 2)
 
 Following the recommendation of RFC 8257, the default values of the parameters are:
 
@@ -1056,31 +1056,36 @@
 and paces out packets at a rate which is adjusted based on the latest estimate
 of delivery rate. BBR algorithm is agnostic to packet losses and ECN marks.
 
-pacing_gain controls the rate of sending data and cwnd_gain controls the amount
+``pacing_gain`` controls the rate of sending data and ``cwnd_gain`` controls the amount
 of data to send.
 
 The following is a high level overview of BBR congestion control algorithm:
 
 On receiving an ACK::
 
-    rtt = now - packet.sent_time
-    update_minimum_rtt(rtt)
-    delivery_rate = estimate_delivery_rate(packet)
-    update_maximum_bandwidth(delivery_rate)
+  rtt = now - packet.sent_time;
+  update_minimum_rtt(rtt);
+  delivery_rate = estimate_delivery_rate(packet);
+  update_maximum_bandwidth(delivery_rate);
 
 After transmitting a data packet::
 
-    bdp = max_bandwidth * min_rtt
-    if (cwnd * bdp < inflight)
-      return
-    if (now > nextSendTime)
-      {
-        transmit(packet)
-        nextSendTime = now + packet.size /(pacing_gain * max_bandwidth)
-      }
-    else
-      return
-    Schedule(nextSendTime, Send)
+  bdp = max_bandwidth * min_rtt;
+  if (cwnd * bdp < inflight)
+  {
+      return;
+  }
+  if (now > nextSendTime)
+  {
+      transmit(packet);
+      nextSendTime = now + packet.size / (pacing_gain * max_bandwidth);
+  }
+  else
+  {
+      return;
+  }
+  Schedule(nextSendTime, Send);
+
 
 To enable BBR on all TCP sockets, the following configuration can be used::
 
@@ -1099,10 +1104,10 @@
 implementation of BBR in ns-3:
 
 * BBR should enable (if not already done) TCP pacing feature.
-* Test to validate the values of pacing_gain and cwnd_gain in different phases
+* Test to validate the values of ``pacing_gain`` and ``cwnd_gain`` in different phases
   of BBR.
 
-An example program, examples/tcp/tcp-bbr-example.cc, is provided to experiment
+An example program, ``examples/tcp/tcp-bbr-example.cc``, is provided to experiment
 with BBR for one long running flow. This example uses a simple topology
 consisting of one sender, one receiver and two routers to examine congestion
 window, throughput and queue control. A program similar to this has been run
@@ -1134,25 +1139,25 @@
 
 ::
 
-  typedef enum
-    {
+  enum EcnStates_t
+  {
       ECN_DISABLED = 0, //!< ECN disabled traffic
       ECN_IDLE,         //!< ECN is enabled but currently there is no action pertaining to ECE or CWR to be taken
       ECN_CE_RCVD,      //!< Last packet received had CE bit set in IP header
       ECN_SENDING_ECE,  //!< Receiver sends an ACK with ECE bit set in TCP header
       ECN_ECE_RCVD,     //!< Last ACK received had ECE bit set in TCP header
       ECN_CWR_SENT      //!< Sender has reduced the congestion window, and sent a packet with CWR bit set in TCP header. This is used for tracing.
-    } EcnStates_t;
+  };
 
 Current implementation of ECN is based on RFC 3168 and is referred as Classic ECN.
 
 The following enum represents the mode of ECN::
 
-  typedef enum
-    {
+  enum EcnMode_t
+  {
       ClassicEcn,  //!< ECN functionality as described in RFC 3168.
       DctcpEcn,    //!< ECN functionality as described in RFC 8257. Note: this mode is specific to DCTCP.
-    } EcnMode_t;
+  };
 
 The following are some important ECN parameters::
 
@@ -1170,12 +1175,12 @@
 
 ::
 
-  typedef enum
-    {
+  enum UseEcn_t
+  {
       Off        = 0,   //!< Disable
       On         = 1,   //!< Enable
       AcceptOnly = 2,   //!< Enable only when the peer endpoint is ECN capable
-    } UseEcn_t;
+  };
 
 For example::
 
@@ -1190,43 +1195,43 @@
 
 ::
 
-    if (m_useEcn == UseEcn_t::On)
-      {
-        SendEmptyPacket(TcpHeader::SYN | TcpHeader::ECE | TcpHeader::CWR);
-      }
-    else
-      {
-        SendEmptyPacket(TcpHeader::SYN);
-      }
-    m_ecnState = ECN_DISABLED;
+  if (m_useEcn == UseEcn_t::On)
+  {
+      SendEmptyPacket(TcpHeader::SYN | TcpHeader::ECE | TcpHeader::CWR);
+  }
+  else
+  {
+      SendEmptyPacket(TcpHeader::SYN);
+  }
+  m_ecnState = ECN_DISABLED;
 
 2. Receiver sends SYN + ACK + ECE
 
 ::
 
-    if (m_useEcn != UseEcn_t::Off &&(tcpHeader.GetFlags() &(TcpHeader::CWR | TcpHeader::ECE)) == (TcpHeader::CWR | TcpHeader::ECE))
-      {
-        SendEmptyPacket(TcpHeader::SYN | TcpHeader::ACK |TcpHeader::ECE);
-        m_ecnState = ECN_IDLE;
-      }
-    else
-      {
-        SendEmptyPacket(TcpHeader::SYN | TcpHeader::ACK);
-        m_ecnState = ECN_DISABLED;
-      }
+  if (m_useEcn != UseEcn_t::Off &&(tcpHeader.GetFlags() &(TcpHeader::CWR | TcpHeader::ECE)) == (TcpHeader::CWR | TcpHeader::ECE))
+  {
+      SendEmptyPacket(TcpHeader::SYN | TcpHeader::ACK |TcpHeader::ECE);
+      m_ecnState = ECN_IDLE;
+  }
+  else
+  {
+      SendEmptyPacket(TcpHeader::SYN | TcpHeader::ACK);
+      m_ecnState = ECN_DISABLED;
+  }
 
 3. Sender sends ACK
 
 ::
 
-    if (m_useEcn != UseEcn_t::Off && (tcpHeader.GetFlags() &(TcpHeader::CWR | TcpHeader::ECE)) == (TcpHeader::ECE))
-      {
-        m_ecnState = ECN_IDLE;
-      }
-    else
-      {
-        m_ecnState = ECN_DISABLED;
-      }
+  if (m_useEcn != UseEcn_t::Off && (tcpHeader.GetFlags() &(TcpHeader::CWR | TcpHeader::ECE)) == (TcpHeader::ECE))
+  {
+      m_ecnState = ECN_IDLE;
+  }
+  else
+  {
+      m_ecnState = ECN_DISABLED;
+  }
 
 Once the ECN-negotiation is successful, the sender sends data packets with ECT
 bits set in the IP header.
@@ -1657,6 +1662,42 @@
 .. math::  sndcnt = MIN (ssThresh - pipe, limit)
 .. math::  cWnd = pipe + sndcnt
 
+Thanks to Neal Cardwell for providing the following documentation of |ns3| PRR model:
+The |ns3| implementation of PRR has something like this (note that m_isRetransDataAcked is true exactly when retransmitted data is cumulatively ACKed, and there is no RACK-TLP or similar mechanism to detect lost retransmits as of now):
+
+::
+
+    // PRR-CRB by default
+    int limit = std::max(m_prrDelivered - m_prrOut, deliveredBytes);
+    // safeACK should be true iff ACK advances SND.UNA with no further loss indicated.
+    // We approximate that here (given the current lack of RACK-TLP in ns-3):
+    bool safeACK = tcb->m_isRetransDataAcked;  // retransmit cumulatively ACKed?
+    if (safeACK) // PRR-SSRB when recovery makes good progress
+        limit += tcb->m_segmentSize;
+    // Attempt to catch up, as permitted
+    sendCount = std::min(limit, static_cast<int>(tcb->m_ssThresh - tcb->m_bytesInFlight));
+ }
+ // Force a fast retransmit upon entering fast recovery:
+ if (m_prrOut == 0 && sendCount == 0)
+     sendCount = tcb->m_segmentSize;
+
+which is close to the Linux implementation (which matches the RFC):
+
+::
+
+  int delta = tp->snd_ssthresh - tcp_packets_in_flight(tp);
+       ...
+      sndcnt = max_t(int, tp->prr_delivered - tp->prr_out,
+                     newly_acked_sacked);
+      if (flag & FLAG_SND_UNA_ADVANCED && !newly_lost)
+              sndcnt++;
+      sndcnt = min(delta, sndcnt);
+  }
+  /* Force a fast retransmit upon entering fast recovery */
+  sndcnt = max(sndcnt, (tp->prr_out ? 0 : 1));
+
+For reference, the Linux TCP PRR implementation is entirely contained in tcp_init_cwnd_reduction(), tcp_cwnd_reduction(), tcp_end_cwnd_reduction() and the updates elsewhere to prr_out.
+
 More information (paper): https://dl.acm.org/citation.cfm?id=2068832
 
 More information (RFC): https://tools.ietf.org/html/rfc6937
@@ -1779,10 +1820,10 @@
 
 ::
 
-   TcpZeroWindowTest::TcpZeroWindowTest(const std::string &desc)
-      : TcpGeneralTest(desc)
-   {
-   }
+  TcpZeroWindowTest::TcpZeroWindowTest(const std::string &desc)
+    : TcpGeneralTest(desc)
+  {
+  }
 
 Then, one should define the general parameters for the TCP connection, which
 will be one-sided (one node is acting as SENDER, while the other is acting as
@@ -1808,15 +1849,15 @@
 
 ::
 
-   void
-   TcpZeroWindowTest::ConfigureEnvironment()
-   {
-     TcpGeneralTest::ConfigureEnvironment();
-     SetAppPktCount(20);
-     SetMTU(500);
-     SetTransmitStart(Seconds(2.0));
-     SetPropagationDelay(MilliSeconds(50));
-   }
+  void
+  TcpZeroWindowTest::ConfigureEnvironment()
+  {
+      TcpGeneralTest::ConfigureEnvironment();
+      SetAppPktCount(20);
+      SetMTU(500);
+      SetTransmitStart(Seconds(2.0));
+      SetPropagationDelay(MilliSeconds(50));
+  }
 
 For other properties, set after the object creation, one can use
 ConfigureProperties ().
@@ -1828,12 +1869,12 @@
 
 ::
 
-   void
-   TcpZeroWindowTest::ConfigureProperties()
-   {
-     TcpGeneralTest::ConfigureProperties();
-     SetInitialCwnd(SENDER, 10);
-   }
+  void
+  TcpZeroWindowTest::ConfigureProperties()
+  {
+      TcpGeneralTest::ConfigureProperties();
+      SetInitialCwnd(SENDER, 10);
+  }
 
 To see the default value for the experiment, please see the implementation of
 both methods inside TcpGeneralTest class.
@@ -1857,13 +1898,13 @@
    Ptr<TcpSocketMsgBase>
    TcpZeroWindowTest::CreateReceiverSocket(Ptr<Node> node)
    {
-     Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateReceiverSocket(node);
+       Ptr<TcpSocketMsgBase> socket = TcpGeneralTest::CreateReceiverSocket(node);
 
-     socket->SetAttribute("RcvBufSize", UintegerValue(0));
-     Simulator::Schedule(Seconds(10.0),
+       socket->SetAttribute("RcvBufSize", UintegerValue(0));
+       Simulator::Schedule(Seconds(10.0),
                          &TcpZeroWindowTest::IncreaseBufSize, this);
 
-     return socket;
+       return socket;
    }
 
 Even so, to check the active window update, we should schedule an increase
@@ -1872,11 +1913,11 @@
 
 ::
 
-   void
-   TcpZeroWindowTest::IncreaseBufSize()
-   {
-     SetRcvBufSize(RECEIVER, 2500);
-   }
+  void
+  TcpZeroWindowTest::IncreaseBufSize()
+  {
+      SetRcvBufSize(RECEIVER, 2500);
+  }
 
 Which utilizes the SetRcvBufSize method to edit the RxBuffer object of the
 RECEIVER. As said before, check the Doxygen documentation for class TcpGeneralTest
@@ -1896,17 +1937,17 @@
       void
       TcpGeneralTest::SetRcvBufSize(SocketWho who, uint32_t size)
       {
-        if (who == SENDER)
+          if (who == SENDER)
           {
-            m_senderSocket->SetRcvBufSize(size);
+              m_senderSocket->SetRcvBufSize(size);
           }
-        else if (who == RECEIVER)
+          else if (who == RECEIVER)
           {
-            m_receiverSocket->SetRcvBufSize(size);
+              m_receiverSocket->SetRcvBufSize(size);
           }
-        else
+          else
           {
-            NS_FATAL_ERROR("Not defined");
+              NS_FATAL_ERROR("Not defined");
           }
       }
 
@@ -1929,22 +1970,23 @@
 
 ::
 
-   void
-   TcpZeroWindowTest::Tx(const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
-   {
-     ...
-     else if (who == RECEIVER)
-       {
-         NS_LOG_INFO("\tRECEIVER TX " << h << " size " << p->GetSize());
-
-         if (h.GetFlags() & TcpHeader::SYN)
-           {
-             NS_TEST_ASSERT_MSG_EQ(h.GetWindowSize(), 0,
-                                   "RECEIVER window size is not 0 in the SYN-ACK");
-           }
-       }
-       ....
-    }
+  void
+  TcpZeroWindowTest::Tx(const Ptr<const Packet> p, const TcpHeader &h, SocketWho who)
+  {
+      ...
+      else if (who == RECEIVER)
+      {
+          NS_LOG_INFO("\tRECEIVER TX " << h << " size " << p->GetSize());
+
+          if (h.GetFlags() & TcpHeader::SYN)
+          {
+              NS_TEST_ASSERT_MSG_EQ(h.GetWindowSize(),
+                                    0,
+                                    "RECEIVER window size is not 0 in the SYN-ACK");
+          }
+      }
+      ...
+  }
 
 Practically, we are checking that every SYN packet sent by the RECEIVER has the
 advertised window set to 0. The same thing is done also by checking, in the Rx
@@ -1977,20 +2019,22 @@
 
 ::
 
-   void
-   TcpZeroWindowTest::ProcessedAck(const Ptr<const TcpSocketState> tcb,
-                                   const TcpHeader& h, SocketWho who)
-   {
-     if (who == SENDER)
-       {
-         if (h.GetFlags() & TcpHeader::SYN)
-           {
-             EventId persistentEvent = GetPersistentEvent(SENDER);
-             NS_TEST_ASSERT_MSG_EQ(persistentEvent.IsPending(), true,
-                                   "Persistent event not started");
-           }
-       }
-    }
+  void
+  TcpZeroWindowTest::ProcessedAck(const Ptr<const TcpSocketState> tcb,
+                                  const TcpHeader& h,
+                                  SocketWho who)
+  {
+      if (who == SENDER)
+      {
+          if (h.GetFlags() & TcpHeader::SYN)
+          {
+              EventId persistentEvent = GetPersistentEvent(SENDER);
+              NS_TEST_ASSERT_MSG_EQ(persistentEvent.IsPending(),
+                                    true,
+                                    "Persistent event not started");
+          }
+      }
+  }
 
 Since we programmed the increase of the buffer size after 10 simulated seconds,
 we expect the persistent timer to fire before any rWnd changes. When it fires,
@@ -1998,28 +2042,31 @@
 again a zero window situation. At first, we investigates on what the sender sends:
 
 .. code-block:: c++
-      :linenos:
-      :emphasize-lines: 1,6,7,11
+  :linenos:
+  :emphasize-lines: 1,6,7,11
 
-      if (Simulator::Now().GetSeconds() <= 6.0)
-        {
-          NS_TEST_ASSERT_MSG_EQ(p->GetSize() - h.GetSerializedSize(), 0,
-                                "Data packet sent anyway");
-        }
-      else if (Simulator::Now().GetSeconds() > 6.0 &&
-               Simulator::Now().GetSeconds() <= 7.0)
-        {
-          NS_TEST_ASSERT_MSG_EQ(m_zeroWindowProbe, false, "Sent another probe");
-
-          if (! m_zeroWindowProbe)
-            {
-              NS_TEST_ASSERT_MSG_EQ(p->GetSize() - h.GetSerializedSize(), 1,
-                                    "Data packet sent instead of window probe");
-              NS_TEST_ASSERT_MSG_EQ(h.GetSequenceNumber(), SequenceNumber32(1),
-                                    "Data packet sent instead of window probe");
-              m_zeroWindowProbe = true;
-            }
-        }
+  if (Simulator::Now().GetSeconds() <= 6.0)
+  {
+      NS_TEST_ASSERT_MSG_EQ(p->GetSize() - h.GetSerializedSize(),
+                            0,
+                            "Data packet sent anyway");
+  }
+  else if (Simulator::Now().GetSeconds() > 6.0 &&
+           Simulator::Now().GetSeconds() <= 7.0)
+  {
+      NS_TEST_ASSERT_MSG_EQ(m_zeroWindowProbe, false, "Sent another probe");
+
+      if (!m_zeroWindowProbe)
+      {
+          NS_TEST_ASSERT_MSG_EQ(p->GetSize() - h.GetSerializedSize(),
+                                1,
+                                "Data packet sent instead of window probe");
+          NS_TEST_ASSERT_MSG_EQ(h.GetSequenceNumber(),
+                                SequenceNumber32(1),
+                                "Data packet sent instead of window probe");
+          m_zeroWindowProbe = true;
+      }
+  }
 
 We divide the events by simulated time. At line 1, we check everything that
 happens before the 6.0 seconds mark; for instance, that no data packets are sent,
@@ -2031,17 +2078,19 @@
 Only one probe is allowed, and this is the reason for the check at line 11.
 
 .. code-block:: c++
-   :linenos:
-   :emphasize-lines: 6,7
+  :linenos:
+  :emphasize-lines: 6,7
 
-   if (Simulator::Now().GetSeconds() > 6.0 &&
-       Simulator::Now().GetSeconds() <= 7.0)
-     {
-       NS_TEST_ASSERT_MSG_EQ(h.GetSequenceNumber(), SequenceNumber32(1),
-                             "Data packet sent instead of window probe");
-       NS_TEST_ASSERT_MSG_EQ(h.GetWindowSize(), 0,
-                             "No zero window advertised by RECEIVER");
-     }
+  if (Simulator::Now().GetSeconds() > 6.0 &&
+      Simulator::Now().GetSeconds() <= 7.0)
+  {
+      NS_TEST_ASSERT_MSG_EQ(h.GetSequenceNumber(),
+                            SequenceNumber32(1),
+                            "Data packet sent instead of window probe");
+      NS_TEST_ASSERT_MSG_EQ(h.GetWindowSize(),
+                            0,
+                            "No zero window advertised by RECEIVER");
+  }
 
 For the RECEIVER, the interval between 6 and 7 seconds is when the zero-window
 segment is sent.
@@ -2051,21 +2100,23 @@
 
 ::
 
-   else if (Simulator::Now().GetSeconds() > 7.0 &&
-            Simulator::Now().GetSeconds() < 10.0)
-     {
-       NS_FATAL_ERROR("No packets should be sent before the window update");
-     }
+  else if (Simulator::Now().GetSeconds() > 7.0 &&
+           Simulator::Now().GetSeconds() < 10.0)
+  {
+      NS_FATAL_ERROR("No packets should be sent before the window update");
+  }
 
 The state checks are performed at the end of the methods, since they are valid
 in every condition:
 
 ::
 
-   NS_TEST_ASSERT_MSG_EQ(GetCongStateFrom(GetTcb(SENDER)), TcpSocketState::CA_OPEN,
-                         "Sender State is not OPEN");
-   NS_TEST_ASSERT_MSG_EQ(GetCongStateFrom(GetTcb(RECEIVER)), TcpSocketState::CA_OPEN,
-                         "Receiver State is not OPEN");
+  NS_TEST_ASSERT_MSG_EQ(GetCongStateFrom(GetTcb(SENDER)),
+                        TcpSocketState::CA_OPEN,
+                        "Sender State is not OPEN");
+  NS_TEST_ASSERT_MSG_EQ(GetCongStateFrom(GetTcb(RECEIVER)),
+                        TcpSocketState::CA_OPEN,
+                        "Receiver State is not OPEN");
 
 Now, the interesting part in the Tx method is to check that after the 10.0
 seconds mark (when the RECEIVER sends the active window update) the value of
@@ -2073,11 +2124,12 @@
 
 ::
 
-   else if (Simulator::Now().GetSeconds() >= 10.0)
-     {
-       NS_TEST_ASSERT_MSG_EQ(h.GetWindowSize(), 2500,
-                             "Receiver window not updated");
-     }
+  else if (Simulator::Now().GetSeconds() >= 10.0)
+  {
+      NS_TEST_ASSERT_MSG_EQ(h.GetWindowSize(),
+                            2500,
+                            "Receiver window not updated");
+  }
 
 To be sure that the sender receives the window update, we can use the Rx
 method:
@@ -2087,11 +2139,12 @@
    :emphasize-lines: 5
 
    if (Simulator::Now().GetSeconds() >= 10.0)
-     {
-       NS_TEST_ASSERT_MSG_EQ(h.GetWindowSize(), 2500,
+   {
+       NS_TEST_ASSERT_MSG_EQ(h.GetWindowSize(),
+                             2500,
                              "Receiver window not updated");
        m_windowUpdated = true;
-     }
+   }
 
 We check every packet after the 10 seconds mark to see if it has the
 window updated. At line 5, we also set to true a boolean variable, to check
@@ -2102,18 +2155,18 @@
 
 ::
 
-   void
-   TcpZeroWindowTest::NormalClose(SocketWho who)
-   {
-     if (who == SENDER)
-       {
-         m_senderFinished = true;
-       }
-     else if (who == RECEIVER)
-       {
-         m_receiverFinished = true;
-       }
-   }
+  void
+  TcpZeroWindowTest::NormalClose(SocketWho who)
+  {
+      if (who == SENDER)
+      {
+          m_senderFinished = true;
+      }
+      else if (who == RECEIVER)
+      {
+          m_receiverFinished = true;
+      }
+  }
 
 The method is called only if all bytes are transmitted successfully. Then, in
 the method FinalChecks(), we check all variables, which should be true (which
@@ -2121,33 +2174,37 @@
 
 ::
 
-   void
-   TcpZeroWindowTest::FinalChecks()
-   {
-     NS_TEST_ASSERT_MSG_EQ(m_zeroWindowProbe, true,
-                           "Zero window probe not sent");
-     NS_TEST_ASSERT_MSG_EQ(m_windowUpdated, true,
-                           "Window has not updated during the connection");
-     NS_TEST_ASSERT_MSG_EQ(m_senderFinished, true,
-                           "Connection not closed successfully(SENDER)");
-     NS_TEST_ASSERT_MSG_EQ(m_receiverFinished, true,
-                           "Connection not closed successfully(RECEIVER)");
-   }
+  void
+  TcpZeroWindowTest::FinalChecks()
+  {
+      NS_TEST_ASSERT_MSG_EQ(m_zeroWindowProbe,
+                            true,
+                            "Zero window probe not sent");
+      NS_TEST_ASSERT_MSG_EQ(m_windowUpdated,
+                            true,
+                            "Window has not updated during the connection");
+      NS_TEST_ASSERT_MSG_EQ(m_senderFinished,
+                            true,
+                            "Connection not closed successfully(SENDER)");
+      NS_TEST_ASSERT_MSG_EQ(m_receiverFinished,
+                            true,
+                            "Connection not closed successfully(RECEIVER)");
+  }
 
 To run the test, the usual way is
 
 .. code-block:: bash
 
-   ./test.py -s tcp-zero-window-test
+  ./test.py -s tcp-zero-window-test
 
-   PASS: TestSuite tcp-zero-window-test
-   1 of 1 tests passed (1 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
+  PASS: TestSuite tcp-zero-window-test
+  1 of 1 tests passed (1 passed, 0 skipped, 0 failed, 0 crashed, 0 valgrind errors)
 
 To see INFO messages, use a combination of ./ns3 shell and gdb (really useful):
 
 .. code-block:: bash
 
-    ./ns3 shell && gdb --args ./build/utils/ns3-dev-test-runner-debug --test-name=tcp-zero-window-test --stop-on-failure --fullness=QUICK --assert-on-failure --verbose
+  ./ns3 shell && gdb --args ./build/utils/ns3-dev-test-runner-debug --test-name=tcp-zero-window-test --stop-on-failure --fullness=QUICK --assert-on-failure --verbose
 
 and then, hit "Run".
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/examples/main-simple.cc ns-3.43/src/internet/examples/main-simple.cc
--- ns-3.42/src/internet/examples/main-simple.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/examples/main-simple.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/examples/neighbor-cache-dynamic.cc ns-3.43/src/internet/examples/neighbor-cache-dynamic.cc
--- ns-3.42/src/internet/examples/neighbor-cache-dynamic.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/examples/neighbor-cache-dynamic.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 ZHIHENG DONG
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Zhiheng Dong <dzh2077@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/examples/neighbor-cache-example.cc ns-3.43/src/internet/examples/neighbor-cache-example.cc
--- ns-3.42/src/internet/examples/neighbor-cache-example.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/examples/neighbor-cache-example.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,23 +1,21 @@
 /*
  * Copyright (c) 2022 ZHIHENG DONG
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Zhiheng Dong <dzh2077@gmail.com>
  */
 
 /**
+ * \file
+ * Generating neighbor caches in various scopes
+ */
+
+/**
+ * \file
+ *
+ * This example shows how to generate neighbor caches in various scopes.
+ *
  * This example shows how to generate neighbor caches on the scope of
  * a channel, a NetDeviceContainer, an InterfaceContainer and globally.
  * The example also shows a scenario that auto-generated neighbor caches
@@ -35,248 +33,233 @@
  *
  * IPv4 Network Topology
  * \verbatim
-
-    LAN 10.1.1.0/24
- n0 --------------- n1     n2     n3
-                    |      |      |
-                    ===============
-                    LAN 10.1.2.0/24
-  \endverbatim
+   IPv4 Network Topology
+       LAN 10.1.1.0/24
+    n0 --------------- n1     n2     n3
+                       |      |      |
+                       ===============
+                       LAN 10.1.2.0/24
+   \endverbatim
  *
- *IPv6 Network Topology
  * \verbatim
-
-    LAN 2001:1::/64
- n0 --------------- n1     n2     n3
-                    |      |      |
-                    ===============
-                    LAN 2001:2::/64
-  \endverbatim
+   IPv6 Network Topology
+      LAN 2001:1::/64
+   n0 --------------- n1     n2     n3
+                      |      |      |
+                      ===============
+                      LAN 2001:2::/64
+   \endverbatim
  *
  * Expected Outputs:
  * IPv4 (default):
  * Generate ARP caches for all devices (default) :
  * \verbatim
-  ARP Cache of node 0 at time 0
-  10.1.1.2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
-  ARP Cache of node 1 at time 0
-  10.1.1.1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
-  10.1.2.2 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
-  10.1.2.3 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  ARP Cache of node 2 at time 0
-  10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  10.1.2.3 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  ARP Cache of node 3 at time 0
-  10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  10.1.2.2 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   ARP Cache of node 0 at time 0
+   10.1.1.2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
+   ARP Cache of node 1 at time 0
+   10.1.1.1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
+   10.1.2.2 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   10.1.2.3 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   ARP Cache of node 2 at time 0
+   10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   10.1.2.3 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   ARP Cache of node 3 at time 0
+   10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   10.1.2.2 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
    \endverbatim
  *
  * Generate ARP caches for the left channel (--useChannel):
  * \verbatim
-  ARP Cache of node 0 at time 0
-  10.1.1.2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
-  ARP Cache of node 1 at time 0
-  10.1.1.1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
-  ARP Cache of node 2 at time 0
-  ARP Cache of node 3 at time 0
+   ARP Cache of node 0 at time 0
+   10.1.1.2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
+   ARP Cache of node 1 at time 0
+   10.1.1.1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
+   ARP Cache of node 2 at time 0
+   ARP Cache of node 3 at time 0
    \endverbatim
  *
  * Generate ARP caches for devices on the right side (--useNetDeviceContainer):
  * \verbatim
-  ARP Cache of node 0 at time 0
-  ARP Cache of node 1 at time 0
-  10.1.2.2 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
-  10.1.2.3 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  ARP Cache of node 2 at time 0
-  10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  10.1.2.3 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  ARP Cache of node 3 at time 0
-  10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  10.1.2.2 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   ARP Cache of node 0 at time 0
+   ARP Cache of node 1 at time 0
+   10.1.2.2 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   10.1.2.3 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   ARP Cache of node 2 at time 0
+   10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   10.1.2.3 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   ARP Cache of node 3 at time 0
+   10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   10.1.2.2 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
    \endverbatim
  *
  * Generate ARP caches for specific interfaces (--useInterfaceContainer):
  * \verbatim
-  ARP Cache of node 0 at time 0
-  10.1.1.2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
-  ARP Cache of node 1 at time 0
-  ARP Cache of node 2 at time 0
-  ARP Cache of node 3 at time 0
-  10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  10.1.2.2 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   ARP Cache of node 0 at time 0
+   10.1.1.2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
+   ARP Cache of node 1 at time 0
+   ARP Cache of node 2 at time 0
+   ARP Cache of node 3 at time 0
+   10.1.2.1 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   10.1.2.2 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
    \endverbatim
  *
  * Do not generate neighbor cache (--noGenerate):
  * \verbatim
-  ARP Cache of node 0 at time 0
-  ARP Cache of node 1 at time 0
-  ARP Cache of node 2 at time 0
-  ARP Cache of node 3 at time 0
+   ARP Cache of node 0 at time 0
+   ARP Cache of node 1 at time 0
+   ARP Cache of node 2 at time 0
+   ARP Cache of node 3 at time 0
    \endverbatim
  *
+ */
+// clang-format off
+/**
  * sending packet with pre-generated neighbor caches(--sendTraffic)
  * \verbatim
-  Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=0
- time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND
- (seq=1 time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512)
- AND (seq=2 time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 ->
- (size=512) AND (seq=3 time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to
- 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=4 time=+1s) Rx pkt from
- 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=5 time=+1s) Rx pkt
- from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=6 time=+1s) Rx
- pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=7
- time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND
- (seq=8 time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512)
- AND (seq=9 time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 ->
- (size=512) AND (seq=10 time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to
- 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=11 time=+1s) Rx pkt from
- 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=12 time=+1.00001s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=0 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=1 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=2 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=3 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=4 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=5 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=6 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=7 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=8 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=9 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=10 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=11 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=12 time=+1.00001s)
    \endverbatim
  *
  * sending packet without pre-generated neighbor caches(--sendTraffic --noGenerate)
  * \verbatim
-  Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=0
- time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND
- (seq=1 time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512)
- AND (seq=2 time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 ->
- (size=512) AND (seq=8 time=+1s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to
- 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=9 time=+1s) Rx pkt from
- 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=10 time=+1s) Rx pkt
- from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=11 time=+1s)
-  Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=12
- time=+1.00001s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512)
- AND (seq=13 time=+1.00001s) Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 ->
- (size=512) AND (seq=14 time=+1.00001s) \endverbatim
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=0 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=1 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=2 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=8 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=9 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=10 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=11 time=+1s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=12 time=+1.00001s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=13 time=+1.00001s)
+   Rx pkt from 03-07-0a:01:01:01:01:c0:00 to 03-07-0a:01:01:02:09:00:00 -> (size=512) AND (seq=14 time=+1.00001s)
+   \endverbatim
  *
+ */
+// clang-format on
+/**
  * IPv6 (--useIPv6):
  * Generate NDISC caches for all devices (default) :
  * \verbatim
-  NDISC Cache of node 0 at time +0s
-  2001:1::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
-  NDISC Cache of node 1 at time +0s
-  2001:1::200:ff:fe00:1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
-  2001:2::200:ff:fe00:4 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
-  2001:2::200:ff:fe00:5 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:4 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:5 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  NDISC Cache of node 2 at time +0s
-  2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  2001:2::200:ff:fe00:5 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:5 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  NDISC Cache of node 3 at time +0s
-  2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  2001:2::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   NDISC Cache of node 0 at time +0s
+   2001:1::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
+   NDISC Cache of node 1 at time +0s
+   2001:1::200:ff:fe00:1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
+   2001:2::200:ff:fe00:4 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   2001:2::200:ff:fe00:5 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:4 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:5 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   NDISC Cache of node 2 at time +0s
+   2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   2001:2::200:ff:fe00:5 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:5 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   NDISC Cache of node 3 at time +0s
+   2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   2001:2::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
    \endverbatim
  *
  * Generate NDISC caches for the left channel (--useChannel):
  * \verbatim
-  NDISC Cache of node 0 at time +0s
-  2001:1::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
-  NDISC Cache of node 1 at time +0s
-  2001:1::200:ff:fe00:1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
-  NDISC Cache of node 2 at time +0s
-  NDISC Cache of node 3 at time +0s
+   NDISC Cache of node 0 at time +0s
+   2001:1::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
+   NDISC Cache of node 1 at time +0s
+   2001:1::200:ff:fe00:1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:1 dev 0 lladdr 02-06-00:00:00:00:00:01 STATIC_AUTOGENERATED
+   NDISC Cache of node 2 at time +0s
+   NDISC Cache of node 3 at time +0s
    \endverbatim
  *
  * Generate NDISC caches for devices on the right side (--useNetDeviceContainer):
  * \verbatim
-  NDISC Cache of node 0 at time +0s
-  NDISC Cache of node 1 at time +0s
-  2001:2::200:ff:fe00:4 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
-  2001:2::200:ff:fe00:5 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:4 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:5 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  NDISC Cache of node 2 at time +0s
-  2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  2001:2::200:ff:fe00:5 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:5 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
-  NDISC Cache of node 3 at time +0s
-  2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  2001:2::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   NDISC Cache of node 0 at time +0s
+   NDISC Cache of node 1 at time +0s
+   2001:2::200:ff:fe00:4 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   2001:2::200:ff:fe00:5 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:4 dev 1 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:5 dev 1 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   NDISC Cache of node 2 at time +0s
+   2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   2001:2::200:ff:fe00:5 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:5 dev 0 lladdr 02-06-00:00:00:00:00:05 STATIC_AUTOGENERATED
+   NDISC Cache of node 3 at time +0s
+   2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   2001:2::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
    \endverbatim
  *
  * Generate NDISC caches for specific interfaces (--useInterfaceContainer):
  * \verbatim
-  NDISC Cache of node 0 at time +0s
-  2001:1::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
-  NDISC Cache of node 1 at time +0s
-  NDISC Cache of node 2 at time +0s
-  NDISC Cache of node 3 at time +0s
-  2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  2001:2::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
-  fe80::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   NDISC Cache of node 0 at time +0s
+   2001:1::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:2 dev 0 lladdr 02-06-00:00:00:00:00:02 STATIC_AUTOGENERATED
+   NDISC Cache of node 1 at time +0s
+   NDISC Cache of node 2 at time +0s
+   NDISC Cache of node 3 at time +0s
+   2001:2::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   2001:2::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:3 dev 0 lladdr 02-06-00:00:00:00:00:03 STATIC_AUTOGENERATED
+   fe80::200:ff:fe00:4 dev 0 lladdr 02-06-00:00:00:00:00:04 STATIC_AUTOGENERATED
    \endverbatim
  *
  * Do not generate neighbor cache (--noGenerate):
  * \verbatim
-  NDISC Cache of node 0 at time +0s
-  NDISC Cache of node 1 at time +0s
-  NDISC Cache of node 2 at time +0s
-  NDISC Cache of node 3 at time +0s
+   NDISC Cache of node 0 at time +0s
+   NDISC Cache of node 1 at time +0s
+   NDISC Cache of node 2 at time +0s
+   NDISC Cache of node 3 at time +0s
    \endverbatim
  *
+ */
+// clang-format off
+/**
  * sending packet with pre-generated neighbor caches(--sendTraffic)
  * \verbatim
-  Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=0 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=1 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=2 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=3 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=4 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=5 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=6 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=7 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=8 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=9 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=10 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=11 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=0 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=1 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=2 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=3 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=4 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=5 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=6 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=7 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=8 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=9 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=10 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=11 time=+1s)
    \endverbatim
  *
  * sending packet without pre-generated neighbor caches(--sendTraffic --noGenerate)
  * \verbatim
-  Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=8 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=9 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=10 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=11 time=+1s) Rx
- pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=12
- time=+1.00001s) Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=13
- time=+1.00001s) Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=14
- time=+1.00001s) Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=15
- time=+1.00001s) Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to
- 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=16
- time=+1.00001s) \endverbatim
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=8 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=9 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=10 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=11 time=+1s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=12 time=+1.00001s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=13 time=+1.00001s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=14 time=+1.00001s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=15 time=+1.00001s)
+   Rx pkt from 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:01:01:c0 to 04-12-20:01:00:01:00:00:00:00:02:00:00:ff:fe:00:00:02:09:00 -> (size=512) AND (seq=16 time=+1.00001s)
+   \endverbatim
 */
+// clang-format on
 
 #include "ns3/applications-module.h"
 #include "ns3/core-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/internet-stack-helper.cc ns-3.43/src/internet/helper/internet-stack-helper.cc
--- ns-3.42/src/internet/helper/internet-stack-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/internet-stack-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Faker Moatamri <faker.moatamri@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/internet-stack-helper.h ns-3.43/src/internet/helper/internet-stack-helper.h
--- ns-3.42/src/internet/helper/internet-stack-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/internet-stack-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/internet-trace-helper.cc ns-3.43/src/internet/helper/internet-trace-helper.cc
--- ns-3.42/src/internet/helper/internet-trace-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/internet-trace-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "internet-trace-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/internet-trace-helper.h ns-3.43/src/internet/helper/internet-trace-helper.h
--- ns-3.42/src/internet/helper/internet-trace-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/internet-trace-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef INTERNET_TRACE_HELPER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-address-helper.cc ns-3.43/src/internet/helper/ipv4-address-helper.cc
--- ns-3.42/src/internet/helper/ipv4-address-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-address-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ipv4-address-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-address-helper.h ns-3.43/src/internet/helper/ipv4-address-helper.h
--- ns-3.42/src/internet/helper/ipv4-address-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-address-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef IPV4_ADDRESS_HELPER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-global-routing-helper.cc ns-3.43/src/internet/helper/ipv4-global-routing-helper.cc
--- ns-3.42/src/internet/helper/ipv4-global-routing-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-global-routing-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-global-routing-helper.h ns-3.43/src/internet/helper/ipv4-global-routing-helper.h
--- ns-3.42/src/internet/helper/ipv4-global-routing-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-global-routing-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-interface-container.cc ns-3.43/src/internet/helper/ipv4-interface-container.cc
--- ns-3.42/src/internet/helper/ipv4-interface-container.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-interface-container.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-interface-container.h ns-3.43/src/internet/helper/ipv4-interface-container.h
--- ns-3.42/src/internet/helper/ipv4-interface-container.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-interface-container.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-list-routing-helper.cc ns-3.43/src/internet/helper/ipv4-list-routing-helper.cc
--- ns-3.42/src/internet/helper/ipv4-list-routing-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-list-routing-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-list-routing-helper.h ns-3.43/src/internet/helper/ipv4-list-routing-helper.h
--- ns-3.42/src/internet/helper/ipv4-list-routing-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-list-routing-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-routing-helper.cc ns-3.43/src/internet/helper/ipv4-routing-helper.cc
--- ns-3.42/src/internet/helper/ipv4-routing-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-routing-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-routing-helper.h ns-3.43/src/internet/helper/ipv4-routing-helper.h
--- ns-3.42/src/internet/helper/ipv4-routing-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-routing-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-static-routing-helper.cc ns-3.43/src/internet/helper/ipv4-static-routing-helper.cc
--- ns-3.42/src/internet/helper/ipv4-static-routing-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-static-routing-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ipv4-static-routing-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv4-static-routing-helper.h ns-3.43/src/internet/helper/ipv4-static-routing-helper.h
--- ns-3.42/src/internet/helper/ipv4-static-routing-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv4-static-routing-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef IPV4_STATIC_ROUTING_HELPER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-address-helper.cc ns-3.43/src/internet/helper/ipv6-address-helper.cc
--- ns-3.42/src/internet/helper/ipv6-address-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-address-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-address-helper.h ns-3.43/src/internet/helper/ipv6-address-helper.h
--- ns-3.42/src/internet/helper/ipv6-address-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-address-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  * modified by Tom Henderson for ns-3.14 release
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-interface-container.cc ns-3.43/src/internet/helper/ipv6-interface-container.cc
--- ns-3.42/src/internet/helper/ipv6-interface-container.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-interface-container.cc	2024-10-09 16:41:09.880655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008-2009 Strasbourg University
  *               2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  *         Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-interface-container.h ns-3.43/src/internet/helper/ipv6-interface-container.h
--- ns-3.42/src/internet/helper/ipv6-interface-container.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-interface-container.h	2024-10-09 16:41:09.880655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008-2009 Strasbourg University
  *               2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  *         Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-list-routing-helper.cc ns-3.43/src/internet/helper/ipv6-list-routing-helper.cc
--- ns-3.42/src/internet/helper/ipv6-list-routing-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-list-routing-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-list-routing-helper.h ns-3.43/src/internet/helper/ipv6-list-routing-helper.h
--- ns-3.42/src/internet/helper/ipv6-list-routing-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-list-routing-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-routing-helper.cc ns-3.43/src/internet/helper/ipv6-routing-helper.cc
--- ns-3.42/src/internet/helper/ipv6-routing-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-routing-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-routing-helper.h ns-3.43/src/internet/helper/ipv6-routing-helper.h
--- ns-3.42/src/internet/helper/ipv6-routing-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-routing-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-static-routing-helper.cc ns-3.43/src/internet/helper/ipv6-static-routing-helper.cc
--- ns-3.42/src/internet/helper/ipv6-static-routing-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-static-routing-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ipv6-static-routing-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ipv6-static-routing-helper.h ns-3.43/src/internet/helper/ipv6-static-routing-helper.h
--- ns-3.42/src/internet/helper/ipv6-static-routing-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ipv6-static-routing-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef IPV6_STATIC_ROUTING_HELPER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/neighbor-cache-helper.cc ns-3.43/src/internet/helper/neighbor-cache-helper.cc
--- ns-3.42/src/internet/helper/neighbor-cache-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/neighbor-cache-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 ZHIHENG DONG
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Zhiheng Dong <dzh2077@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/neighbor-cache-helper.h ns-3.43/src/internet/helper/neighbor-cache-helper.h
--- ns-3.42/src/internet/helper/neighbor-cache-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/neighbor-cache-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 ZHIHENG DONG
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Zhiheng Dong <dzh2077@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/rip-helper.cc ns-3.43/src/internet/helper/rip-helper.cc
--- ns-3.42/src/internet/helper/rip-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/rip-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/rip-helper.h ns-3.43/src/internet/helper/rip-helper.h
--- ns-3.42/src/internet/helper/rip-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/rip-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ripng-helper.cc ns-3.43/src/internet/helper/ripng-helper.cc
--- ns-3.42/src/internet/helper/ripng-helper.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ripng-helper.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/helper/ripng-helper.h ns-3.43/src/internet/helper/ripng-helper.h
--- ns-3.42/src/internet/helper/ripng-helper.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/helper/ripng-helper.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/arp-cache.cc ns-3.43/src/internet/model/arp-cache.cc
--- ns-3.42/src/internet/model/arp-cache.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/arp-cache.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/arp-cache.h ns-3.43/src/internet/model/arp-cache.h
--- ns-3.42/src/internet/model/arp-cache.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/arp-cache.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/arp-header.cc ns-3.43/src/internet/model/arp-header.cc
--- ns-3.42/src/internet/model/arp-header.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/arp-header.cc	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/arp-header.h ns-3.43/src/internet/model/arp-header.h
--- ns-3.42/src/internet/model/arp-header.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/arp-header.h	2024-10-09 16:41:09.880655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/arp-l3-protocol.cc ns-3.43/src/internet/model/arp-l3-protocol.cc
--- ns-3.42/src/internet/model/arp-l3-protocol.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/arp-l3-protocol.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/arp-l3-protocol.h ns-3.43/src/internet/model/arp-l3-protocol.h
--- ns-3.42/src/internet/model/arp-l3-protocol.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/arp-l3-protocol.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/arp-queue-disc-item.cc ns-3.43/src/internet/model/arp-queue-disc-item.cc
--- ns-3.42/src/internet/model/arp-queue-disc-item.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/arp-queue-disc-item.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "arp-queue-disc-item.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/arp-queue-disc-item.h ns-3.43/src/internet/model/arp-queue-disc-item.h
--- ns-3.42/src/internet/model/arp-queue-disc-item.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/arp-queue-disc-item.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef ARP_QUEUE_DISC_ITEM_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/candidate-queue.cc ns-3.43/src/internet/model/candidate-queue.cc
--- ns-3.42/src/internet/model/candidate-queue.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/candidate-queue.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "candidate-queue.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/candidate-queue.h ns-3.43/src/internet/model/candidate-queue.h
--- ns-3.42/src/internet/model/candidate-queue.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/candidate-queue.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Craig Dowell (craigdo@ee.washington.edu)
  */
@@ -163,7 +152,7 @@
     /**
      * \brief return true if v1 < v2
      *
-     * SPFVertexes are added into the queue according to the ordering
+     * SPFVertex items are added into the queue according to the ordering
      * defined by this method. If v1 should be popped before v2, this
      * method return true; false otherwise
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/global-route-manager.cc ns-3.43/src/internet/model/global-route-manager.cc
--- ns-3.42/src/internet/model/global-route-manager.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/global-route-manager.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Henderson (tomhend@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/global-route-manager.h ns-3.43/src/internet/model/global-route-manager.h
--- ns-3.42/src/internet/model/global-route-manager.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/global-route-manager.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Craig Dowell (craigdo@ee.washington.edu)
  *           Tom Henderson (tomhend@u.washington.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/global-route-manager-impl.cc ns-3.43/src/internet/model/global-route-manager-impl.cc
--- ns-3.42/src/internet/model/global-route-manager-impl.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/global-route-manager-impl.cc	2024-10-09 16:41:09.884656000 -0700
@@ -2,18 +2,7 @@
  * Copyright 2007 University of Washington
  * Copyright (C) 1999, 2000 Kunihiro Ishiguro, Toshiaki Takada
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Tom Henderson (tomhend@u.washington.edu)
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/global-route-manager-impl.h ns-3.43/src/internet/model/global-route-manager-impl.h
--- ns-3.42/src/internet/model/global-route-manager-impl.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/global-route-manager-impl.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Craig Dowell (craigdo@ee.washington.edu)
  *           Tom Henderson (tomhend@u.washington.edu)
@@ -542,7 +531,7 @@
     Ipv4Address m_nextHop;                          //!< next hop
     typedef std::list<NodeExit_t> ListOfNodeExit_t; //!< container of Exit nodes
     ListOfNodeExit_t m_ecmpRootExits; //!< store the multiple root's exits for supporting ECMP
-    typedef std::list<SPFVertex*> ListOfSPFVertex_t; //!< container of SPFVertexes
+    typedef std::list<SPFVertex*> ListOfSPFVertex_t; //!< container of SPFVertex items
     ListOfSPFVertex_t m_parents;                     //!< parent list
     ListOfSPFVertex_t m_children;                    //!< Children list
     bool m_vertexProcessed; //!< Flag to note whether vertex has been processed in stage two of SPF
@@ -552,7 +541,7 @@
      * \brief Stream insertion operator.
      *
      * \param os the reference to the output stream
-     * \param vs a list of SPFVertexes
+     * \param vs a list of SPFVertex items
      * \returns the reference to the output stream
      */
     friend std::ostream& operator<<(std::ostream& os, const SPFVertex::ListOfSPFVertex_t& vs);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/global-router-interface.cc ns-3.43/src/internet/model/global-router-interface.cc
--- ns-3.42/src/internet/model/global-router-interface.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/global-router-interface.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Tom Henderson (tomhend@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/global-router-interface.h ns-3.43/src/internet/model/global-router-interface.h
--- ns-3.42/src/internet/model/global-router-interface.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/global-router-interface.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Craig Dowell (craigdo@ee.washington.edu)
  *           Tom Henderson (tomhend@u.washington.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/global-routing.h ns-3.43/src/internet/model/global-routing.h
--- ns-3.42/src/internet/model/global-routing.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/global-routing.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/icmpv4.cc ns-3.43/src/internet/model/icmpv4.cc
--- ns-3.42/src/internet/model/icmpv4.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/icmpv4.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/icmpv4.h ns-3.43/src/internet/model/icmpv4.h
--- ns-3.42/src/internet/model/icmpv4.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/icmpv4.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/icmpv4-l4-protocol.cc ns-3.43/src/internet/model/icmpv4-l4-protocol.cc
--- ns-3.42/src/internet/model/icmpv4-l4-protocol.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/icmpv4-l4-protocol.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/icmpv4-l4-protocol.h ns-3.43/src/internet/model/icmpv4-l4-protocol.h
--- ns-3.42/src/internet/model/icmpv4-l4-protocol.h	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/icmpv4-l4-protocol.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/icmpv6-header.cc ns-3.43/src/internet/model/icmpv6-header.cc
--- ns-3.42/src/internet/model/icmpv6-header.cc	2024-05-29 15:29:46.956073300 -0700
+++ ns-3.43/src/internet/model/icmpv6-header.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  *         Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/icmpv6-header.h ns-3.43/src/internet/model/icmpv6-header.h
--- ns-3.42/src/internet/model/icmpv6-header.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/icmpv6-header.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  *         Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/icmpv6-l4-protocol.cc ns-3.43/src/internet/model/icmpv6-l4-protocol.cc
--- ns-3.42/src/internet/model/icmpv6-l4-protocol.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/icmpv6-l4-protocol.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  *         David Gross <gdavid.devel@gmail.com>
@@ -142,7 +131,16 @@
                           "Multicast RS maximum retransmission duration (0 means unbound).",
                           TimeValue(Seconds(0)),
                           MakeTimeAccessor(&Icmpv6L4Protocol::m_rsMaxRetransmissionDuration),
-                          MakeTimeChecker());
+                          MakeTimeChecker())
+            .AddTraceSource("DadFailure",
+                            "Duplicate Address detected during DAD, the address is now INVALID",
+                            MakeTraceSourceAccessor(&Icmpv6L4Protocol::m_dadFailureAddressTrace),
+                            "ns3::Ipv6Address::TracedCallback")
+            .AddTraceSource(
+                "DadSuccess",
+                "Duplicate Address not detected during DAD, the address is now PREFERRED",
+                MakeTraceSourceAccessor(&Icmpv6L4Protocol::m_dadSuccessAddressTrace),
+                "ns3::Ipv6Address::TracedCallback");
     return tid;
 }
 
@@ -441,6 +439,15 @@
 
     p->RemoveHeader(raHeader);
 
+    // If 'M' flag is set, we need to start DHCPv6.
+    if (raHeader.GetFlagM())
+    {
+        if (!m_startDhcpv6.IsNull())
+        {
+            m_startDhcpv6(ipv6->GetInterfaceForDevice(interface->GetDevice()));
+        }
+    }
+
     if (raHeader.GetLifeTime())
     {
         defaultRouter = src;
@@ -873,6 +880,7 @@
             if (ifaddr.GetState() == Ipv6InterfaceAddress::TENTATIVE ||
                 ifaddr.GetState() == Ipv6InterfaceAddress::TENTATIVE_OPTIMISTIC)
             {
+                m_dadFailureAddressTrace(ifaddr.GetAddress());
                 interface->SetState(ifaddr.GetAddress(), Ipv6InterfaceAddress::INVALID);
             }
         }
@@ -1853,6 +1861,7 @@
      */
     if (found && ifaddr.GetState() != Ipv6InterfaceAddress::INVALID)
     {
+        m_dadSuccessAddressTrace(ifaddr.GetAddress());
         interface->SetState(ifaddr.GetAddress(), Ipv6InterfaceAddress::PREFERRED);
         NS_LOG_LOGIC("DAD OK, interface in state PREFERRED");
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/icmpv6-l4-protocol.h ns-3.43/src/internet/model/icmpv6-l4-protocol.h
--- ns-3.42/src/internet/model/icmpv6-l4-protocol.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/icmpv6-l4-protocol.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  *         David Gross <gdavid.devel@gmail.com>
@@ -28,6 +17,7 @@
 
 #include "ns3/ipv6-address.h"
 #include "ns3/random-variable-stream.h"
+#include "ns3/traced-callback.h"
 
 #include <list>
 
@@ -423,6 +413,16 @@
      */
     Time GetDadTimeout() const;
 
+    /**
+     * Set DHCPv6 callback.
+     * Invoked when an RA is received with the M flag set.
+     * \param cb the callback function
+     */
+    void SetDhcpv6Callback(Callback<void, uint32_t> cb)
+    {
+        m_startDhcpv6 = cb;
+    }
+
   protected:
     /**
      * \brief Dispose this object.
@@ -697,6 +697,25 @@
     EventId m_handleRsTimeoutEvent;
 
     IpL4Protocol::DownTargetCallback6 m_downTarget; //!< callback to Ipv6::Send
+
+    /**
+     * The trace fired when a DAD fails, changing the address state to INVALID.
+     * Includes the address whose state has been changed.
+     */
+    ns3::TracedCallback<const Ipv6Address&> m_dadFailureAddressTrace;
+
+    /**
+     * The trace fired when a DAD completes and no duplicate address has
+     * been detected. The address state changes to PREFERRED.
+     * Includes the address whose state has been changed.
+     */
+    ns3::TracedCallback<const Ipv6Address&> m_dadSuccessAddressTrace;
+
+    /**
+     * The DHCPv6 callback when the M flag is set in a Router Advertisement.
+     * Includes the interface on which the RA was received.
+     */
+    Callback<void, uint32_t> m_startDhcpv6;
 };
 
 } /* namespace ns3 */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ip-l4-protocol.cc ns-3.43/src/internet/model/ip-l4-protocol.cc
--- ns-3.42/src/internet/model/ip-l4-protocol.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ip-l4-protocol.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: George F. Riley<riley@ece.gatech.edu>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ip-l4-protocol.h ns-3.43/src/internet/model/ip-l4-protocol.h
--- ns-3.42/src/internet/model/ip-l4-protocol.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ip-l4-protocol.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: George F. Riley<riley@ece.gatech.edu>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-address-generator.cc ns-3.43/src/internet/model/ipv4-address-generator.cc
--- ns-3.42/src/internet/model/ipv4-address-generator.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-address-generator.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ipv4-address-generator.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-address-generator.h ns-3.43/src/internet/model/ipv4-address-generator.h
--- ns-3.42/src/internet/model/ipv4-address-generator.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-address-generator.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef IPV4_ADDRESS_GENERATOR_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4.cc ns-3.43/src/internet/model/ipv4.cc
--- ns-3.42/src/internet/model/ipv4.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-end-point.cc ns-3.43/src/internet/model/ipv4-end-point.cc
--- ns-3.42/src/internet/model/ipv4-end-point.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-end-point.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-end-point-demux.cc ns-3.43/src/internet/model/ipv4-end-point-demux.cc
--- ns-3.42/src/internet/model/ipv4-end-point-demux.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-end-point-demux.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-end-point-demux.h ns-3.43/src/internet/model/ipv4-end-point-demux.h
--- ns-3.42/src/internet/model/ipv4-end-point-demux.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-end-point-demux.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-end-point.h ns-3.43/src/internet/model/ipv4-end-point.h
--- ns-3.42/src/internet/model/ipv4-end-point.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-end-point.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-global-routing.cc ns-3.43/src/internet/model/ipv4-global-routing.cc
--- ns-3.42/src/internet/model/ipv4-global-routing.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-global-routing.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2008 University of Washington
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 
 #include "ipv4-global-routing.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-global-routing.h ns-3.43/src/internet/model/ipv4-global-routing.h
--- ns-3.42/src/internet/model/ipv4-global-routing.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-global-routing.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,19 +1,7 @@
 //
 // Copyright (c) 2008 University of Washington
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-//
+// SPDX-License-Identifier: GPL-2.0-only
 //
 
 #ifndef IPV4_GLOBAL_ROUTING_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4.h ns-3.43/src/internet/model/ipv4.h
--- ns-3.42/src/internet/model/ipv4.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -460,7 +449,6 @@
      *
      * RFC1122 term for whether host accepts datagram with a dest. address on another interface
      * \returns true for Weak Es Model activated
-     * \deprecated Deprecated since ns-3.41. Use SetStrongEndSystemModel instead.
      */
     NS_DEPRECATED_3_41("Use GetStrongEndSystemModel instead")
     virtual bool GetWeakEsModel() const = 0;
@@ -470,7 +458,6 @@
      *
      * RFC1122 term for whether host accepts datagram with a dest. address on another interface
      * \param model true for Weak Es Model
-     * \deprecated Deprecated since ns-3.41. Use SetStrongEndSystemModel instead.
      */
     NS_DEPRECATED_3_41("Use SetStrongEndSystemModel instead")
     virtual void SetWeakEsModel(bool model) = 0;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-header.cc ns-3.43/src/internet/model/ipv4-header.cc
--- ns-3.42/src/internet/model/ipv4-header.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-header.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-header.h ns-3.43/src/internet/model/ipv4-header.h
--- ns-3.42/src/internet/model/ipv4-header.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-header.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-interface-address.cc ns-3.43/src/internet/model/ipv4-interface-address.cc
--- ns-3.42/src/internet/model/ipv4-interface-address.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-interface-address.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-interface-address.h ns-3.43/src/internet/model/ipv4-interface-address.h
--- ns-3.42/src/internet/model/ipv4-interface-address.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-interface-address.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-interface.cc ns-3.43/src/internet/model/ipv4-interface.cc
--- ns-3.42/src/internet/model/ipv4-interface.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-interface.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-interface.h ns-3.43/src/internet/model/ipv4-interface.h
--- ns-3.42/src/internet/model/ipv4-interface.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-interface.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *  Mathieu Lacage <mathieu.lacage@sophia.inria.fr>,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-l3-protocol.cc ns-3.43/src/internet/model/ipv4-l3-protocol.cc
--- ns-3.42/src/internet/model/ipv4-l3-protocol.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-l3-protocol.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: George F. Riley<riley@ece.gatech.edu>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-l3-protocol.h ns-3.43/src/internet/model/ipv4-l3-protocol.h
--- ns-3.42/src/internet/model/ipv4-l3-protocol.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-l3-protocol.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: George F. Riley<riley@ece.gatech.edu>
 //
@@ -256,6 +245,7 @@
      * \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
      * and will be changed to \c Ptr<const Ipv4> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*TxRxTracedCallback)(Ptr<const Packet> packet,
                                        Ptr<Ipv4> ipv4,
                                        uint32_t interface);
@@ -271,6 +261,7 @@
      * \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
      * and will be changed to \c Ptr<const Ipv4> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*DropTracedCallback)(const Ipv4Header& header,
                                        Ptr<const Packet> packet,
                                        DropReason reason,
@@ -297,8 +288,10 @@
     void SetIpForward(bool forward) override;
     bool GetIpForward() const override;
 
+    /** \copydoc Ipv4::SetWeakEsModel */
     NS_DEPRECATED_3_41("Use SetStrongEndSystemModel instead")
     void SetWeakEsModel(bool model) override;
+    /** \copydoc Ipv4::GetWeakEsModel */
     NS_DEPRECATED_3_41("Use GetStrongEndSystemModel instead")
     bool GetWeakEsModel() const override;
 
@@ -490,15 +483,18 @@
     /// Trace of transmitted packets
     /// \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
     /// and will be changed to \c Ptr<const Ipv4> in a future release.
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> m_txTrace;
     /// Trace of received packets
     /// \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
     /// and will be changed to \c Ptr<const Ipv4> in a future release.
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<const Packet>, Ptr<Ipv4>, uint32_t> m_rxTrace;
     // <ip-header, payload, reason, ifindex> (ifindex not valid if reason is DROP_NO_ROUTE)
     /// Trace of dropped packets
     /// \deprecated The non-const \c Ptr<Ipv4> argument is deprecated
     /// and will be changed to \c Ptr<const Ipv4> in a future release.
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<const Ipv4Header&, Ptr<const Packet>, DropReason, Ptr<Ipv4>, uint32_t>
         m_dropTrace;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-list-routing.cc ns-3.43/src/internet/model/ipv4-list-routing.cc
--- ns-3.42/src/internet/model/ipv4-list-routing.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-list-routing.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-list-routing.h ns-3.43/src/internet/model/ipv4-list-routing.h
--- ns-3.42/src/internet/model/ipv4-list-routing.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-list-routing.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef IPV4_LIST_ROUTING_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-packet-filter.cc ns-3.43/src/internet/model/ipv4-packet-filter.cc
--- ns-3.42/src/internet/model/ipv4-packet-filter.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-packet-filter.cc	2024-10-09 16:41:09.884656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *               2016 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-packet-filter.h ns-3.43/src/internet/model/ipv4-packet-filter.h
--- ns-3.42/src/internet/model/ipv4-packet-filter.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-packet-filter.h	2024-10-09 16:41:09.884656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *               2016 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-packet-info-tag.cc ns-3.43/src/internet/model/ipv4-packet-info-tag.cc
--- ns-3.42/src/internet/model/ipv4-packet-info-tag.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-packet-info-tag.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hajime Tazaki <tazaki@sfc.wide.ad.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-packet-info-tag.h ns-3.43/src/internet/model/ipv4-packet-info-tag.h
--- ns-3.42/src/internet/model/ipv4-packet-info-tag.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-packet-info-tag.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hajime Tazaki <tazaki@sfc.wide.ad.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-packet-probe.cc ns-3.43/src/internet/model/ipv4-packet-probe.cc
--- ns-3.42/src/internet/model/ipv4-packet-probe.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-packet-probe.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-packet-probe.h ns-3.43/src/internet/model/ipv4-packet-probe.h
--- ns-3.42/src/internet/model/ipv4-packet-probe.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-packet-probe.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-queue-disc-item.cc ns-3.43/src/internet/model/ipv4-queue-disc-item.cc
--- ns-3.42/src/internet/model/ipv4-queue-disc-item.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-queue-disc-item.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ipv4-queue-disc-item.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-queue-disc-item.h ns-3.43/src/internet/model/ipv4-queue-disc-item.h
--- ns-3.42/src/internet/model/ipv4-queue-disc-item.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-queue-disc-item.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef IPV4_QUEUE_DISC_ITEM_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-raw-socket-factory.cc ns-3.43/src/internet/model/ipv4-raw-socket-factory.cc
--- ns-3.42/src/internet/model/ipv4-raw-socket-factory.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-raw-socket-factory.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-raw-socket-factory.h ns-3.43/src/internet/model/ipv4-raw-socket-factory.h
--- ns-3.42/src/internet/model/ipv4-raw-socket-factory.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-raw-socket-factory.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-raw-socket-factory-impl.cc ns-3.43/src/internet/model/ipv4-raw-socket-factory-impl.cc
--- ns-3.42/src/internet/model/ipv4-raw-socket-factory-impl.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-raw-socket-factory-impl.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-raw-socket-factory-impl.h ns-3.43/src/internet/model/ipv4-raw-socket-factory-impl.h
--- ns-3.42/src/internet/model/ipv4-raw-socket-factory-impl.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-raw-socket-factory-impl.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-route.cc ns-3.43/src/internet/model/ipv4-route.cc
--- ns-3.42/src/internet/model/ipv4-route.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-route.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-route.h ns-3.43/src/internet/model/ipv4-route.h
--- ns-3.42/src/internet/model/ipv4-route.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-route.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef IPV4_ROUTE_H
@@ -33,7 +22,7 @@
 /**
  * \ingroup ipv4Routing
  *
- *\brief IPv4 route cache entry (similar to Linux struct rtable)
+ * \brief IPv4 route cache entry (similar to Linux struct rtable)
  *
  * This is a reference counted object.  In the future, we will add other
  * entries from struct dst_entry, struct rtable, and struct dst_ops as needed.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-routing-protocol.cc ns-3.43/src/internet/model/ipv4-routing-protocol.cc
--- ns-3.42/src/internet/model/ipv4-routing-protocol.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-routing-protocol.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ipv4-routing-protocol.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-routing-protocol.h ns-3.43/src/internet/model/ipv4-routing-protocol.h
--- ns-3.42/src/internet/model/ipv4-routing-protocol.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-routing-protocol.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 #ifndef IPV4_ROUTING_PROTOCOL_H
 #define IPV4_ROUTING_PROTOCOL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-routing-table-entry.cc ns-3.43/src/internet/model/ipv4-routing-table-entry.cc
--- ns-3.42/src/internet/model/ipv4-routing-table-entry.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-routing-table-entry.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-routing-table-entry.h ns-3.43/src/internet/model/ipv4-routing-table-entry.h
--- ns-3.42/src/internet/model/ipv4-routing-table-entry.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-routing-table-entry.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-static-routing.cc ns-3.43/src/internet/model/ipv4-static-routing.cc
--- ns-3.42/src/internet/model/ipv4-static-routing.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-static-routing.cc	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: George F. Riley<riley@ece.gatech.edu>
 //         Gustavo Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv4-static-routing.h ns-3.43/src/internet/model/ipv4-static-routing.h
--- ns-3.42/src/internet/model/ipv4-static-routing.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv4-static-routing.h	2024-10-09 16:41:09.884656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  *         Gustavo Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-address-generator.cc ns-3.43/src/internet/model/ipv6-address-generator.cc
--- ns-3.42/src/internet/model/ipv6-address-generator.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv6-address-generator.cc	2024-10-09 16:41:09.888656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 University of Washington
  * Copyright (c) 2011 Atishay Jain
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ipv6-address-generator.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-address-generator.h ns-3.43/src/internet/model/ipv6-address-generator.h
--- ns-3.42/src/internet/model/ipv6-address-generator.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv6-address-generator.h	2024-10-09 16:41:09.888656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 University of Washington
  * Copyright (c) 2011 Atishay Jain
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef IPV6_ADDRESS_GENERATOR_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-autoconfigured-prefix.cc ns-3.43/src/internet/model/ipv6-autoconfigured-prefix.cc
--- ns-3.42/src/internet/model/ipv6-autoconfigured-prefix.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv6-autoconfigured-prefix.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008-2009 Telecom Bretagne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-autoconfigured-prefix.h ns-3.43/src/internet/model/ipv6-autoconfigured-prefix.h
--- ns-3.42/src/internet/model/ipv6-autoconfigured-prefix.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv6-autoconfigured-prefix.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008-2009 Telecom Bretagne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6.cc ns-3.43/src/internet/model/ipv6.cc
--- ns-3.42/src/internet/model/ipv6.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-end-point.cc ns-3.43/src/internet/model/ipv6-end-point.cc
--- ns-3.42/src/internet/model/ipv6-end-point.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv6-end-point.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-end-point-demux.cc ns-3.43/src/internet/model/ipv6-end-point-demux.cc
--- ns-3.42/src/internet/model/ipv6-end-point-demux.cc	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv6-end-point-demux.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-end-point-demux.h ns-3.43/src/internet/model/ipv6-end-point-demux.h
--- ns-3.42/src/internet/model/ipv6-end-point-demux.h	2024-05-29 15:29:46.960073200 -0700
+++ ns-3.43/src/internet/model/ipv6-end-point-demux.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-end-point.h ns-3.43/src/internet/model/ipv6-end-point.h
--- ns-3.42/src/internet/model/ipv6-end-point.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-end-point.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-extension.cc ns-3.43/src/internet/model/ipv6-extension.cc
--- ns-3.42/src/internet/model/ipv6-extension.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-extension.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-extension-demux.cc ns-3.43/src/internet/model/ipv6-extension-demux.cc
--- ns-3.42/src/internet/model/ipv6-extension-demux.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-extension-demux.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-extension-demux.h ns-3.43/src/internet/model/ipv6-extension-demux.h
--- ns-3.42/src/internet/model/ipv6-extension-demux.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-extension-demux.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-extension.h ns-3.43/src/internet/model/ipv6-extension.h
--- ns-3.42/src/internet/model/ipv6-extension.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-extension.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-extension-header.cc ns-3.43/src/internet/model/ipv6-extension-header.cc
--- ns-3.42/src/internet/model/ipv6-extension-header.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-extension-header.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-extension-header.h ns-3.43/src/internet/model/ipv6-extension-header.h
--- ns-3.42/src/internet/model/ipv6-extension-header.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-extension-header.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6.h ns-3.43/src/internet/model/ipv6.h
--- ns-3.42/src/internet/model/ipv6.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-header.cc ns-3.43/src/internet/model/ipv6-header.cc
--- ns-3.42/src/internet/model/ipv6-header.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-header.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2008 Louis Pasteur University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-header.h ns-3.43/src/internet/model/ipv6-header.h
--- ns-3.42/src/internet/model/ipv6-header.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-header.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2008 Louis Pasteur University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-interface-address.cc ns-3.43/src/internet/model/ipv6-interface-address.cc
--- ns-3.42/src/internet/model/ipv6-interface-address.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-interface-address.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-interface-address.h ns-3.43/src/internet/model/ipv6-interface-address.h
--- ns-3.42/src/internet/model/ipv6-interface-address.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-interface-address.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-interface.cc ns-3.43/src/internet/model/ipv6-interface.cc
--- ns-3.42/src/internet/model/ipv6-interface.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-interface.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-interface.h ns-3.43/src/internet/model/ipv6-interface.h
--- ns-3.42/src/internet/model/ipv6-interface.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-interface.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-l3-protocol.cc ns-3.43/src/internet/model/ipv6-l3-protocol.cc
--- ns-3.42/src/internet/model/ipv6-l3-protocol.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-l3-protocol.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-l3-protocol.h ns-3.43/src/internet/model/ipv6-l3-protocol.h
--- ns-3.42/src/internet/model/ipv6-l3-protocol.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-l3-protocol.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
@@ -405,6 +394,7 @@
      * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
      * and will be changed to \c Ptr<const Ipv6> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*TxRxTracedCallback)(Ptr<const Packet> packet,
                                        Ptr<Ipv6> ipv6,
                                        uint32_t interface);
@@ -420,6 +410,7 @@
      * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
      * and will be changed to \c Ptr<const Ipv6> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*DropTracedCallback)(const Ipv6Header& header,
                                        Ptr<const Packet> packet,
                                        DropReason reason,
@@ -568,6 +559,7 @@
      * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
      * and will be changed to \c Ptr<const Ipv6> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<const Packet>, Ptr<Ipv6>, uint32_t> m_txTrace;
 
     /**
@@ -575,6 +567,7 @@
      * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
      * and will be changed to \c Ptr<const Ipv6> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<const Packet>, Ptr<Ipv6>, uint32_t> m_rxTrace;
 
     /**
@@ -582,6 +575,7 @@
      * \deprecated The non-const \c Ptr<Ipv6> argument is deprecated
      * and will be changed to \c Ptr<const Ipv6> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<const Ipv6Header&, Ptr<const Packet>, DropReason, Ptr<Ipv6>, uint32_t>
         m_dropTrace;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-list-routing.cc ns-3.43/src/internet/model/ipv6-list-routing.cc
--- ns-3.42/src/internet/model/ipv6-list-routing.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-list-routing.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-list-routing.h ns-3.43/src/internet/model/ipv6-list-routing.h
--- ns-3.42/src/internet/model/ipv6-list-routing.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-list-routing.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef IPV6_LIST_ROUTING_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-option.cc ns-3.43/src/internet/model/ipv6-option.cc
--- ns-3.42/src/internet/model/ipv6-option.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-option.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-option-demux.cc ns-3.43/src/internet/model/ipv6-option-demux.cc
--- ns-3.42/src/internet/model/ipv6-option-demux.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-option-demux.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-option-demux.h ns-3.43/src/internet/model/ipv6-option-demux.h
--- ns-3.42/src/internet/model/ipv6-option-demux.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-option-demux.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-option.h ns-3.43/src/internet/model/ipv6-option.h
--- ns-3.42/src/internet/model/ipv6-option.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-option.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA02111-1307USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-option-header.cc ns-3.43/src/internet/model/ipv6-option-header.cc
--- ns-3.42/src/internet/model/ipv6-option-header.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-option-header.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-option-header.h ns-3.43/src/internet/model/ipv6-option-header.h
--- ns-3.42/src/internet/model/ipv6-option-header.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-option-header.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: David Gross <gdavid.devel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-packet-filter.cc ns-3.43/src/internet/model/ipv6-packet-filter.cc
--- ns-3.42/src/internet/model/ipv6-packet-filter.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-packet-filter.cc	2024-10-09 16:41:09.888656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *               2016 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-packet-filter.h ns-3.43/src/internet/model/ipv6-packet-filter.h
--- ns-3.42/src/internet/model/ipv6-packet-filter.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-packet-filter.h	2024-10-09 16:41:09.888656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *               2016 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-packet-info-tag.cc ns-3.43/src/internet/model/ipv6-packet-info-tag.cc
--- ns-3.42/src/internet/model/ipv6-packet-info-tag.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-packet-info-tag.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hajime Tazaki <tazaki@sfc.wide.ad.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-packet-info-tag.h ns-3.43/src/internet/model/ipv6-packet-info-tag.h
--- ns-3.42/src/internet/model/ipv6-packet-info-tag.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-packet-info-tag.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hajime Tazaki <tazaki@sfc.wide.ad.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-packet-probe.cc ns-3.43/src/internet/model/ipv6-packet-probe.cc
--- ns-3.42/src/internet/model/ipv6-packet-probe.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-packet-probe.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-packet-probe.h ns-3.43/src/internet/model/ipv6-packet-probe.h
--- ns-3.42/src/internet/model/ipv6-packet-probe.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-packet-probe.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-pmtu-cache.cc ns-3.43/src/internet/model/ipv6-pmtu-cache.cc
--- ns-3.42/src/internet/model/ipv6-pmtu-cache.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-pmtu-cache.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-pmtu-cache.h ns-3.43/src/internet/model/ipv6-pmtu-cache.h
--- ns-3.42/src/internet/model/ipv6-pmtu-cache.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-pmtu-cache.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-queue-disc-item.cc ns-3.43/src/internet/model/ipv6-queue-disc-item.cc
--- ns-3.42/src/internet/model/ipv6-queue-disc-item.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-queue-disc-item.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ipv6-queue-disc-item.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-queue-disc-item.h ns-3.43/src/internet/model/ipv6-queue-disc-item.h
--- ns-3.42/src/internet/model/ipv6-queue-disc-item.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-queue-disc-item.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef IPV6_QUEUE_DISC_ITEM_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-raw-socket-factory.cc ns-3.43/src/internet/model/ipv6-raw-socket-factory.cc
--- ns-3.42/src/internet/model/ipv6-raw-socket-factory.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-raw-socket-factory.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-raw-socket-factory.h ns-3.43/src/internet/model/ipv6-raw-socket-factory.h
--- ns-3.42/src/internet/model/ipv6-raw-socket-factory.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-raw-socket-factory.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-raw-socket-factory-impl.cc ns-3.43/src/internet/model/ipv6-raw-socket-factory-impl.cc
--- ns-3.42/src/internet/model/ipv6-raw-socket-factory-impl.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-raw-socket-factory-impl.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-raw-socket-factory-impl.h ns-3.43/src/internet/model/ipv6-raw-socket-factory-impl.h
--- ns-3.42/src/internet/model/ipv6-raw-socket-factory-impl.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-raw-socket-factory-impl.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-raw-socket-impl.cc ns-3.43/src/internet/model/ipv6-raw-socket-impl.cc
--- ns-3.42/src/internet/model/ipv6-raw-socket-impl.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-raw-socket-impl.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-raw-socket-impl.h ns-3.43/src/internet/model/ipv6-raw-socket-impl.h
--- ns-3.42/src/internet/model/ipv6-raw-socket-impl.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-raw-socket-impl.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-route.cc ns-3.43/src/internet/model/ipv6-route.cc
--- ns-3.42/src/internet/model/ipv6-route.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-route.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-route.h ns-3.43/src/internet/model/ipv6-route.h
--- ns-3.42/src/internet/model/ipv6-route.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-route.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-routing-protocol.cc ns-3.43/src/internet/model/ipv6-routing-protocol.cc
--- ns-3.42/src/internet/model/ipv6-routing-protocol.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-routing-protocol.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 /* taken from src/node/ipv4-routing-protocol.cc and adapted to IPv6 */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-routing-protocol.h ns-3.43/src/internet/model/ipv6-routing-protocol.h
--- ns-3.42/src/internet/model/ipv6-routing-protocol.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-routing-protocol.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 /* taken from src/node/ipv4-routing-protocol.h and adapted to IPv6 */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-routing-table-entry.cc ns-3.43/src/internet/model/ipv6-routing-table-entry.cc
--- ns-3.42/src/internet/model/ipv6-routing-table-entry.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-routing-table-entry.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-routing-table-entry.h ns-3.43/src/internet/model/ipv6-routing-table-entry.h
--- ns-3.42/src/internet/model/ipv6-routing-table-entry.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-routing-table-entry.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-static-routing.cc ns-3.43/src/internet/model/ipv6-static-routing.cc
--- ns-3.42/src/internet/model/ipv6-static-routing.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-static-routing.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ipv6-static-routing.h ns-3.43/src/internet/model/ipv6-static-routing.h
--- ns-3.42/src/internet/model/ipv6-static-routing.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ipv6-static-routing.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/loopback-net-device.cc ns-3.43/src/internet/model/loopback-net-device.cc
--- ns-3.42/src/internet/model/loopback-net-device.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/loopback-net-device.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/loopback-net-device.h ns-3.43/src/internet/model/loopback-net-device.h
--- ns-3.42/src/internet/model/loopback-net-device.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/loopback-net-device.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ndisc-cache.cc ns-3.43/src/internet/model/ndisc-cache.cc
--- ns-3.42/src/internet/model/ndisc-cache.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ndisc-cache.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ndisc-cache.h ns-3.43/src/internet/model/ndisc-cache.h
--- ns-3.42/src/internet/model/ndisc-cache.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ndisc-cache.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/rip.cc ns-3.43/src/internet/model/rip.cc
--- ns-3.42/src/internet/model/rip.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/rip.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/rip.h ns-3.43/src/internet/model/rip.h
--- ns-3.42/src/internet/model/rip.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/rip.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/rip-header.cc ns-3.43/src/internet/model/rip-header.cc
--- ns-3.42/src/internet/model/rip-header.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/rip-header.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/rip-header.h ns-3.43/src/internet/model/rip-header.h
--- ns-3.42/src/internet/model/rip-header.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/rip-header.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ripng.cc ns-3.43/src/internet/model/ripng.cc
--- ns-3.42/src/internet/model/ripng.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ripng.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ripng.h ns-3.43/src/internet/model/ripng.h
--- ns-3.42/src/internet/model/ripng.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ripng.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ripng-header.cc ns-3.43/src/internet/model/ripng-header.cc
--- ns-3.42/src/internet/model/ripng-header.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ripng-header.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/ripng-header.h ns-3.43/src/internet/model/ripng-header.h
--- ns-3.42/src/internet/model/ripng-header.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/ripng-header.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/rtt-estimator.cc ns-3.43/src/internet/model/rtt-estimator.cc
--- ns-3.42/src/internet/model/rtt-estimator.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/rtt-estimator.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Rajib Bhattacharjea<raj.b@gatech.edu>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/rtt-estimator.h ns-3.43/src/internet/model/rtt-estimator.h
--- ns-3.42/src/internet/model/rtt-estimator.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/rtt-estimator.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Rajib Bhattacharjea<raj.b@gatech.edu>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-bbr.cc ns-3.43/src/internet/model/tcp-bbr.cc
--- ns-3.42/src/internet/model/tcp-bbr.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-bbr.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Vivek Jain <jain.vivek.anand@gmail.com>
  *          Viyom Mittal <viyommittal@gmail.com>
@@ -75,7 +64,20 @@
                 "Max allowed val for m_ackEpochAcked, after which sampling epoch is reset",
                 UintegerValue(1 << 12),
                 MakeUintegerAccessor(&TcpBbr::m_ackEpochAckedResetThresh),
-                MakeUintegerChecker<uint32_t>());
+                MakeUintegerChecker<uint32_t>())
+            .AddTraceSource("MinRtt",
+                            "Estimated two-way round-trip propagation delay of the path, estimated "
+                            "from the windowed minimum recent round-trip delay sample",
+                            MakeTraceSourceAccessor(&TcpBbr::m_minRtt),
+                            "ns3::TracedValueCallback::Time")
+            .AddTraceSource("PacingGain",
+                            "The dynamic pacing gain factor",
+                            MakeTraceSourceAccessor(&TcpBbr::m_pacingGain),
+                            "ns3::TracedValueCallback::Double")
+            .AddTraceSource("CwndGain",
+                            "The dynamic congestion window gain factor",
+                            MakeTraceSourceAccessor(&TcpBbr::m_cWndGain),
+                            "ns3::TracedValueCallback::Double");
     return tid;
 }
 
@@ -230,6 +232,7 @@
     if (m_isPipeFilled || rate > tcb->m_pacingRate)
     {
         tcb->m_pacingRate = rate;
+        NS_LOG_DEBUG("Pacing rate updated. New value: " << tcb->m_pacingRate);
     }
 }
 
@@ -475,6 +478,7 @@
 uint32_t
 TcpBbr::AckAggregationCwnd()
 {
+    NS_LOG_FUNCTION(this);
     uint32_t maxAggrBytes; // MaxBW * 0.1 secs
     uint32_t aggrCwndBytes = 0;
 
@@ -490,6 +494,7 @@
 void
 TcpBbr::UpdateAckAggregation(Ptr<TcpSocketState> tcb, const TcpRateOps::TcpRateSample& rs)
 {
+    NS_LOG_FUNCTION(this << tcb << rs);
     uint32_t expectedAcked;
     uint32_t extraAck;
     uint32_t epochProp;
@@ -588,6 +593,7 @@
         tcb->m_cWnd = tcb->m_cWnd.Get() + rs.m_ackedSacked;
     }
     tcb->m_cWnd = std::max(tcb->m_cWnd.Get(), m_minPipeCwnd);
+    NS_LOG_DEBUG("Congestion window updated. New value:" << tcb->m_cWnd);
 
 done:
     ModulateCwndForProbeRTT(tcb);
@@ -711,7 +717,7 @@
     if (newState == TcpSocketState::CA_OPEN && !m_isInitialized)
     {
         NS_LOG_DEBUG("CongestionStateSet triggered to CA_OPEN :: " << newState);
-        m_minRtt = tcb->m_lastRtt.Get() != Time::Max() ? tcb->m_lastRtt.Get() : Time::Max();
+        m_minRtt = tcb->m_srtt.Get() != Time::Max() ? tcb->m_srtt.Get() : Time::Max();
         m_minRttStamp = Simulator::Now();
         m_priorCwnd = tcb->m_cWnd;
         tcb->m_ssThresh = tcb->m_initialSsThresh;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-bbr.h ns-3.43/src/internet/model/tcp-bbr.h
--- ns-3.42/src/internet/model/tcp-bbr.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-bbr.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Vivek Jain <jain.vivek.anand@gmail.com>
  *          Viyom Mittal <viyommittal@gmail.com>
@@ -352,8 +341,8 @@
     MaxBandwidthFilter_t m_maxBwFilter;        //!< Maximum bandwidth filter
     uint32_t m_bandwidthWindowLength{0}; //!< A constant specifying the length of the BBR.BtlBw max
                                          //!< filter window, default 10 packet-timed round trips.
-    double m_pacingGain{0};              //!< The dynamic pacing gain factor
-    double m_cWndGain{0};                //!< The dynamic congestion window gain factor
+    TracedValue<double> m_pacingGain{0}; //!< The dynamic pacing gain factor
+    TracedValue<double> m_cWndGain{0};   //!< The dynamic congestion window gain factor
     double m_highGain{0};       //!< A constant specifying highest gain factor, default is 2.89
     bool m_isPipeFilled{false}; //!< A boolean that records whether BBR has filled the pipe
     uint32_t m_minPipeCwnd{
@@ -373,7 +362,7 @@
     uint32_t m_targetCWnd{0}; //!< Target value for congestion window, adapted to the estimated BDP
     DataRate m_fullBandwidth{0};      //!< Value of full bandwidth recorded
     uint32_t m_fullBandwidthCount{0}; //!< Count of full bandwidth recorded consistently
-    Time m_minRtt{
+    TracedValue<Time> m_minRtt{
         Time::Max()}; //!< Estimated two-way round-trip propagation delay of the path, estimated
                       //!< from the windowed minimum recent round-trip delay sample.
     uint32_t m_sendQuantum{
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-bic.cc ns-3.43/src/internet/model/tcp-bic.cc
--- ns-3.42/src/internet/model/tcp-bic.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-bic.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-bic.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-bic.h ns-3.43/src/internet/model/tcp-bic.h
--- ns-3.42/src/internet/model/tcp-bic.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-bic.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -68,7 +57,7 @@
  * and the current cWnd size).
  *
  * The reference paper for BIC can be found in:
- * http://an.kaist.ac.kr/courses/2006/cs540/reading/bic-tcp.pdf
+ * https://web.archive.org/web/20220930220436/https://an.kaist.ac.kr/courses/2006/cs540/reading/bic-tcp.pdf
  *
  * This model has a number of configurable parameters that are exposed as
  * attributes of the TcpBic TypeId.  This model also exports trace sources,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-congestion-ops.cc ns-3.43/src/internet/model/tcp-congestion-ops.cc
--- ns-3.42/src/internet/model/tcp-congestion-ops.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-congestion-ops.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-congestion-ops.h"
@@ -130,26 +119,26 @@
  * > SMSS bytes upon receipt of an ACK covering new data, we RECOMMEND
  * > that TCP implementations increase cwnd, per:
  * >
- * >    cwnd += min (N, SMSS)                      (2)
+ * >     cwnd += min (N, SMSS)                      (2)
  * >
  * > where N is the number of previously unacknowledged bytes acknowledged
  * > in the incoming ACK.
  *
  * The ns-3 implementation respect the RFC definition. Linux does something
  * different:
- * \verbatim
-u32 tcp_slow_start(struct tcp_sock *tp, u32 acked)
-  {
-    u32 cwnd = tp->snd_cwnd + acked;
-
-    if (cwnd > tp->snd_ssthresh)
-      cwnd = tp->snd_ssthresh + 1;
-    acked -= cwnd - tp->snd_cwnd;
-    tp->snd_cwnd = min(cwnd, tp->snd_cwnd_clamp);
-
-    return acked;
-  }
-  \endverbatim
+ * \code{.cpp}
+   u32 tcp_slow_start(struct tcp_sock *tp, u32 acked)
+   {
+     u32 cwnd = tp->snd_cwnd + acked;
+
+     if (cwnd > tp->snd_ssthresh)
+       cwnd = tp->snd_ssthresh + 1;
+     acked -= cwnd - tp->snd_cwnd;
+     tp->snd_cwnd = min(cwnd, tp->snd_cwnd_clamp);
+
+     return acked;
+   }
+   \endcode
  *
  * As stated, we want to avoid the case when a cumulative ACK increases cWnd more
  * than a segment size, but we keep count of how many segments we have ignored,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-congestion-ops.h ns-3.43/src/internet/model/tcp-congestion-ops.h
--- ns-3.42/src/internet/model/tcp-congestion-ops.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-congestion-ops.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef TCPCONGESTIONOPS_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-cubic.cc ns-3.43/src/internet/model/tcp-cubic.cc
--- ns-3.42/src/internet/model/tcp-cubic.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-cubic.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -37,7 +26,7 @@
 {
     static TypeId tid =
         TypeId("ns3::TcpCubic")
-            .SetParent<TcpSocketBase>()
+            .SetParent<TcpCongestionOps>()
             .AddConstructor<TcpCubic>()
             .SetGroupName("Internet")
             .AddAttribute("FastConvergence",
@@ -174,6 +163,12 @@
 }
 
 void
+TcpCubic::Init(Ptr<TcpSocketState> tcb)
+{
+    HystartReset(tcb);
+}
+
+void
 TcpCubic::HystartReset(Ptr<const TcpSocketState> tcb)
 {
     NS_LOG_FUNCTION(this);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-cubic.h ns-3.43/src/internet/model/tcp-cubic.h
--- ns-3.42/src/internet/model/tcp-cubic.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-cubic.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -101,6 +90,7 @@
                             const TcpSocketState::TcpCongState_t newState) override;
 
     Ptr<TcpCongestionOps> Fork() override;
+    void Init(Ptr<TcpSocketState> tcb) override;
 
   private:
     bool m_fastConvergence; //!< Enable or disable fast convergence algorithm
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-dctcp.cc ns-3.43/src/internet/model/tcp-dctcp.cc
--- ns-3.42/src/internet/model/tcp-dctcp.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-dctcp.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Shravya K.S. <shravya.ks0@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-dctcp.h ns-3.43/src/internet/model/tcp-dctcp.h
--- ns-3.42/src/internet/model/tcp-dctcp.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-dctcp.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Shravya K.S. <shravya.ks0@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-header.cc ns-3.43/src/internet/model/tcp-header.cc
--- ns-3.42/src/internet/model/tcp-header.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-header.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Raj Bhattacharjea <raj.b@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-header.h ns-3.43/src/internet/model/tcp-header.h
--- ns-3.42/src/internet/model/tcp-header.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-header.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Raj Bhattacharjea <raj.b@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-highspeed.cc ns-3.43/src/internet/model/tcp-highspeed.cc
--- ns-3.42/src/internet/model/tcp-highspeed.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-highspeed.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello, <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-highspeed.h ns-3.43/src/internet/model/tcp-highspeed.h
--- ns-3.42/src/internet/model/tcp-highspeed.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-highspeed.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello, <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-htcp.cc ns-3.43/src/internet/model/tcp-htcp.cc
--- ns-3.42/src/internet/model/tcp-htcp.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-htcp.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * by: Amir Modarresi <amodarresi@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-htcp.h ns-3.43/src/internet/model/tcp-htcp.h
--- ns-3.42/src/internet/model/tcp-htcp.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-htcp.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * by: Amir Modarresi <amodarresi@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-hybla.cc ns-3.43/src/internet/model/tcp-hybla.cc
--- ns-3.42/src/internet/model/tcp-hybla.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-hybla.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-hybla.h ns-3.43/src/internet/model/tcp-hybla.h
--- ns-3.42/src/internet/model/tcp-hybla.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-hybla.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef TCPHYBLA_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-illinois.cc ns-3.43/src/internet/model/tcp-illinois.cc
--- ns-3.42/src/internet/model/tcp-illinois.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-illinois.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Keerthi Ganta <keerthiganta@ku.edu>
  *         Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-illinois.h ns-3.43/src/internet/model/tcp-illinois.h
--- ns-3.42/src/internet/model/tcp-illinois.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-illinois.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Keerthi Ganta <keerthiganta@ku.edu>
  *         Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-l4-protocol.cc ns-3.43/src/internet/model/tcp-l4-protocol.cc
--- ns-3.42/src/internet/model/tcp-l4-protocol.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-l4-protocol.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Raj Bhattacharjea <raj.b@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-l4-protocol.h ns-3.43/src/internet/model/tcp-l4-protocol.h
--- ns-3.42/src/internet/model/tcp-l4-protocol.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-l4-protocol.h	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Raj Bhattacharjea <raj.b@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-ledbat.cc ns-3.43/src/internet/model/tcp-ledbat.cc
--- ns-3.42/src/internet/model/tcp-ledbat.cc	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-ledbat.cc	2024-10-09 16:41:09.888656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Ankit Deepak <adadeepak8@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-ledbat.h ns-3.43/src/internet/model/tcp-ledbat.h
--- ns-3.42/src/internet/model/tcp-ledbat.h	2024-05-29 15:29:46.964073200 -0700
+++ ns-3.43/src/internet/model/tcp-ledbat.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Ankit Deepak <adadeepak8@gmail.com>
  *
@@ -126,7 +115,7 @@
 
   private:
     /**
-     *\brief Buffer structure to store delays
+     * \brief Buffer structure to store delays
      */
     struct OwdCircBuf
     {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-linux-reno.cc ns-3.43/src/internet/model/tcp-linux-reno.cc
--- ns-3.42/src/internet/model/tcp-linux-reno.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-linux-reno.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Apoorva Bhargava <apoorvabhargava13@gmail.com>
  *         Mohit P. Tahiliani <tahiliani@nitk.edu.in>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-linux-reno.h ns-3.43/src/internet/model/tcp-linux-reno.h
--- ns-3.42/src/internet/model/tcp-linux-reno.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-linux-reno.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Apoorva Bharagava <apoorvabhargava13@gmail.com>
  *         Mohit P. Tahiliani <tahiliani@nitk.edu.in>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-lp.cc ns-3.43/src/internet/model/tcp-lp.cc
--- ns-3.42/src/internet/model/tcp-lp.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-lp.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Charitha Sangaraju <charitha29193@gmail.com>
  *          Nandita G <gm.nandita@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-lp.h ns-3.43/src/internet/model/tcp-lp.h
--- ns-3.42/src/internet/model/tcp-lp.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-lp.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Charitha Sangaraju <charitha29193@gmail.com>
  *          Nandita G <gm.nandita@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option.cc ns-3.43/src/internet/model/tcp-option.cc
--- ns-3.42/src/internet/model/tcp-option.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option.h ns-3.43/src/internet/model/tcp-option.h
--- ns-3.42/src/internet/model/tcp-option.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-rfc793.cc ns-3.43/src/internet/model/tcp-option-rfc793.cc
--- ns-3.42/src/internet/model/tcp-option-rfc793.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-rfc793.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-rfc793.h ns-3.43/src/internet/model/tcp-option-rfc793.h
--- ns-3.42/src/internet/model/tcp-option-rfc793.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-rfc793.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-sack.cc ns-3.43/src/internet/model/tcp-option-sack.cc
--- ns-3.42/src/internet/model/tcp-option-sack.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-sack.cc	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 Adrian Sai-wah Tam
  * Copyright (c) 2015 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  * Documentation, test cases: Truc Anh N. Nguyen   <annguyen@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-sack.h ns-3.43/src/internet/model/tcp-option-sack.h
--- ns-3.42/src/internet/model/tcp-option-sack.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-sack.h	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 Adrian Sai-wah Tam
  * Copyright (c) 2015 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  * Documentation, test cases: Truc Anh N. Nguyen   <annguyen@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-sack-permitted.cc ns-3.43/src/internet/model/tcp-option-sack-permitted.cc
--- ns-3.42/src/internet/model/tcp-option-sack-permitted.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-sack-permitted.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  * Documentation, test cases: Truc Anh N. Nguyen   <annguyen@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-sack-permitted.h ns-3.43/src/internet/model/tcp-option-sack-permitted.h
--- ns-3.42/src/internet/model/tcp-option-sack-permitted.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-sack-permitted.h	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 Adrian Sai-wah Tam
  * Copyright (c) 2015 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  * Documentation, test cases: Truc Anh N. Nguyen   <annguyen@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-ts.cc ns-3.43/src/internet/model/tcp-option-ts.cc
--- ns-3.42/src/internet/model/tcp-option-ts.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-ts.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-ts.h ns-3.43/src/internet/model/tcp-option-ts.h
--- ns-3.42/src/internet/model/tcp-option-ts.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-ts.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-winscale.cc ns-3.43/src/internet/model/tcp-option-winscale.cc
--- ns-3.42/src/internet/model/tcp-option-winscale.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-winscale.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  * Documentation, test cases: Natale Patriciello <natale.patriciello@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-option-winscale.h ns-3.43/src/internet/model/tcp-option-winscale.h
--- ns-3.42/src/internet/model/tcp-option-winscale.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-option-winscale.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  * Documentation, test cases: Natale Patriciello <natale.patriciello@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-prr-recovery.cc ns-3.43/src/internet/model/tcp-prr-recovery.cc
--- ns-3.42/src/internet/model/tcp-prr-recovery.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-prr-recovery.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Viyom Mittal <viyommittal@gmail.com>
  *         Vivek Jain <jain.vivek.anand@gmail.com>
@@ -35,16 +24,10 @@
 TypeId
 TcpPrrRecovery::GetTypeId()
 {
-    static TypeId tid =
-        TypeId("ns3::TcpPrrRecovery")
-            .SetParent<TcpClassicRecovery>()
-            .AddConstructor<TcpPrrRecovery>()
-            .SetGroupName("Internet")
-            .AddAttribute("ReductionBound",
-                          "Type of Reduction Bound",
-                          EnumValue(SSRB),
-                          MakeEnumAccessor<ReductionBound_t>(&TcpPrrRecovery::m_reductionBoundMode),
-                          MakeEnumChecker(CRB, "CRB", SSRB, "SSRB"));
+    static TypeId tid = TypeId("ns3::TcpPrrRecovery")
+                            .SetParent<TcpClassicRecovery>()
+                            .AddConstructor<TcpPrrRecovery>()
+                            .SetGroupName("Internet");
     return tid;
 }
 
@@ -58,8 +41,7 @@
     : TcpClassicRecovery(recovery),
       m_prrDelivered(recovery.m_prrDelivered),
       m_prrOut(recovery.m_prrOut),
-      m_recoveryFlightSize(recovery.m_recoveryFlightSize),
-      m_reductionBoundMode(recovery.m_reductionBoundMode)
+      m_recoveryFlightSize(recovery.m_recoveryFlightSize)
 {
     NS_LOG_FUNCTION(this);
 }
@@ -79,41 +61,50 @@
 
     m_prrOut = 0;
     m_prrDelivered = 0;
-    m_recoveryFlightSize = unAckDataCount;
+    m_recoveryFlightSize = tcb->m_bytesInFlight; // RFC 6675 pipe before recovery
 
-    DoRecovery(tcb, deliveredBytes);
+    DoRecovery(tcb, deliveredBytes, true);
 }
 
 void
-TcpPrrRecovery::DoRecovery(Ptr<TcpSocketState> tcb, uint32_t deliveredBytes)
+TcpPrrRecovery::DoRecovery(Ptr<TcpSocketState> tcb, uint32_t deliveredBytes, bool isDupAck)
 {
     NS_LOG_FUNCTION(this << tcb << deliveredBytes);
+
+    if (isDupAck && m_prrDelivered < m_recoveryFlightSize)
+    {
+        deliveredBytes += tcb->m_segmentSize;
+    }
+    if (deliveredBytes == 0)
+    {
+        return;
+    }
+
     m_prrDelivered += deliveredBytes;
 
     int sendCount;
     if (tcb->m_bytesInFlight > tcb->m_ssThresh)
     {
+        // Proportional Rate Reductions
         sendCount =
             std::ceil(m_prrDelivered * tcb->m_ssThresh * 1.0 / m_recoveryFlightSize) - m_prrOut;
     }
     else
     {
-        int limit = static_cast<int>(tcb->m_ssThresh - tcb->m_bytesInFlight);
-        if (m_reductionBoundMode == CRB)
-        {
-            limit = m_prrDelivered - m_prrOut;
-        }
-        else if (m_reductionBoundMode == SSRB)
+        // PRR-CRB by default
+        int limit = std::max(m_prrDelivered - m_prrOut, deliveredBytes);
+
+        // safeACK should be true iff ACK advances SND.UNA with no further loss indicated.
+        // We approximate that here (given the current lack of RACK-TLP in ns-3)
+        bool safeACK = tcb->m_isRetransDataAcked; // retransmit cumulatively ACKed?
+
+        if (safeACK)
         {
-            if (tcb->m_isRetransDataAcked)
-            {
-                limit = std::max(m_prrDelivered - m_prrOut, deliveredBytes) + tcb->m_segmentSize;
-            }
-            else
-            {
-                limit = deliveredBytes;
-            }
+            // PRR-SSRB when recovery makes good progress
+            limit += tcb->m_segmentSize;
         }
+
+        // Attempt to catch up, as permitted
         sendCount = std::min(limit, static_cast<int>(tcb->m_ssThresh - tcb->m_bytesInFlight));
     }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-prr-recovery.h ns-3.43/src/internet/model/tcp-prr-recovery.h
--- ns-3.42/src/internet/model/tcp-prr-recovery.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-prr-recovery.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Viyom Mittal <viyommittal@gmail.com>
  *         Vivek Jain <jain.vivek.anand@gmail.com>
@@ -61,15 +50,6 @@
 
     ~TcpPrrRecovery() override;
 
-    /**
-     * \brief Reduction Bound variant (CRB or SSRB)
-     */
-    enum ReductionBound_t
-    {
-        CRB, /**< Conservative Reduction Bound */
-        SSRB /**< Slow Start Reduction Bound */
-    };
-
     std::string GetName() const override;
 
     void EnterRecovery(Ptr<TcpSocketState> tcb,
@@ -77,7 +57,7 @@
                        uint32_t unAckDataCount,
                        uint32_t deliveredBytes) override;
 
-    void DoRecovery(Ptr<TcpSocketState> tcb, uint32_t deliveredBytes) override;
+    void DoRecovery(Ptr<TcpSocketState> tcb, uint32_t deliveredBytes, bool isDupAck) override;
 
     void ExitRecovery(Ptr<TcpSocketState> tcb) override;
 
@@ -89,7 +69,6 @@
     uint32_t m_prrDelivered{0};       //!< total bytes delivered during recovery phase
     uint32_t m_prrOut{0};             //!< total bytes sent during recovery phase
     uint32_t m_recoveryFlightSize{0}; //!< value of bytesInFlight at the start of recovery phase
-    ReductionBound_t m_reductionBoundMode{SSRB}; //!< mode of Reduction Bound to be used
 };
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-rate-ops.cc ns-3.43/src/internet/model/tcp-rate-ops.cc
--- ns-3.42/src/internet/model/tcp-rate-ops.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-rate-ops.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-rate-ops.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-rate-ops.h ns-3.43/src/internet/model/tcp-rate-ops.h
--- ns-3.42/src/internet/model/tcp-rate-ops.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-rate-ops.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef TCP_RATE_OPS_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-recovery-ops.cc ns-3.43/src/internet/model/tcp-recovery-ops.cc
--- ns-3.42/src/internet/model/tcp-recovery-ops.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-recovery-ops.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Viyom Mittal <viyommittal@gmail.com>
  *         Vivek Jain <jain.vivek.anand@gmail.com>
@@ -105,9 +94,11 @@
 }
 
 void
-TcpClassicRecovery::DoRecovery(Ptr<TcpSocketState> tcb, uint32_t deliveredBytes [[maybe_unused]])
+TcpClassicRecovery::DoRecovery(Ptr<TcpSocketState> tcb,
+                               uint32_t deliveredBytes [[maybe_unused]],
+                               bool isDupAck)
 {
-    NS_LOG_FUNCTION(this << tcb << deliveredBytes);
+    NS_LOG_FUNCTION(this << tcb << deliveredBytes << isDupAck);
     tcb->m_cWndInfl += tcb->m_segmentSize;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-recovery-ops.h ns-3.43/src/internet/model/tcp-recovery-ops.h
--- ns-3.42/src/internet/model/tcp-recovery-ops.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-recovery-ops.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Viyom Mittal <viyommittal@gmail.com>
  *         Vivek Jain <jain.vivek.anand@gmail.com>
@@ -110,11 +99,13 @@
      * The function is called on arrival of every ack when TcpSocketState
      * is set to CA_RECOVERY. It performs the necessary cwnd changes
      * as per the recovery algorithm.
+     * The param `isDupAck` has been added to align PRR implementation with RFC 6937 bis-08.
      *
      * \param tcb internal congestion state
      * \param deliveredBytes bytes (S)ACKed in the last (S)ACK
+     * \param isDupAck Indicates if the last acknowledgement was duplicate.
      */
-    virtual void DoRecovery(Ptr<TcpSocketState> tcb, uint32_t deliveredBytes) = 0;
+    virtual void DoRecovery(Ptr<TcpSocketState> tcb, uint32_t deliveredBytes, bool isDupAck) = 0;
 
     /**
      * \brief Performs cwnd adjustments at the end of recovery
@@ -189,7 +180,7 @@
                        uint32_t unAckDataCount,
                        uint32_t deliveredBytes) override;
 
-    void DoRecovery(Ptr<TcpSocketState> tcb, uint32_t deliveredBytes) override;
+    void DoRecovery(Ptr<TcpSocketState> tcb, uint32_t deliveredBytes, bool isDupAck) override;
 
     void ExitRecovery(Ptr<TcpSocketState> tcb) override;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-rx-buffer.cc ns-3.43/src/internet/model/tcp-rx-buffer.cc
--- ns-3.42/src/internet/model/tcp-rx-buffer.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-rx-buffer.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-rx-buffer.h ns-3.43/src/internet/model/tcp-rx-buffer.h
--- ns-3.42/src/internet/model/tcp-rx-buffer.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-rx-buffer.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-scalable.cc ns-3.43/src/internet/model/tcp-scalable.cc
--- ns-3.42/src/internet/model/tcp-scalable.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-scalable.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *          Keerthi Ganta <keerthig@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-scalable.h ns-3.43/src/internet/model/tcp-scalable.h
--- ns-3.42/src/internet/model/tcp-scalable.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-scalable.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *          Keerthi Ganta <keerthig@ittc.ku.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket-base.cc ns-3.43/src/internet/model/tcp-socket-base.cc
--- ns-3.42/src/internet/model/tcp-socket-base.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket-base.cc	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 Georgia Tech Research Corporation
  * Copyright (c) 2010 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
@@ -65,6 +54,35 @@
 #include <algorithm>
 #include <math.h>
 
+namespace
+{
+
+/**
+ * \brief map TcpPacketType and EcnMode to boolean value to check whether ECN-marking is allowed or
+ * not
+ */
+const std::map<std::pair<ns3::TcpSocketBase::TcpPacketType_t, ns3::TcpSocketState::EcnMode_t>, bool>
+    ECN_RESTRICTION_MAP{
+        {{ns3::TcpSocketBase::SYN, ns3::TcpSocketState::ClassicEcn}, false},
+        {{ns3::TcpSocketBase::SYN_ACK, ns3::TcpSocketState::ClassicEcn}, false},
+        {{ns3::TcpSocketBase::PURE_ACK, ns3::TcpSocketState::ClassicEcn}, false},
+        {{ns3::TcpSocketBase::WINDOW_PROBE, ns3::TcpSocketState::ClassicEcn}, false},
+        {{ns3::TcpSocketBase::FIN, ns3::TcpSocketState::ClassicEcn}, false},
+        {{ns3::TcpSocketBase::RST, ns3::TcpSocketState::ClassicEcn}, false},
+        {{ns3::TcpSocketBase::RE_XMT, ns3::TcpSocketState::ClassicEcn}, false},
+        {{ns3::TcpSocketBase::DATA, ns3::TcpSocketState::ClassicEcn}, true},
+
+        {{ns3::TcpSocketBase::SYN, ns3::TcpSocketState::DctcpEcn}, true},
+        {{ns3::TcpSocketBase::SYN_ACK, ns3::TcpSocketState::DctcpEcn}, true},
+        {{ns3::TcpSocketBase::PURE_ACK, ns3::TcpSocketState::DctcpEcn}, true},
+        {{ns3::TcpSocketBase::WINDOW_PROBE, ns3::TcpSocketState::DctcpEcn}, true},
+        {{ns3::TcpSocketBase::FIN, ns3::TcpSocketState::DctcpEcn}, true},
+        {{ns3::TcpSocketBase::RST, ns3::TcpSocketState::DctcpEcn}, true},
+        {{ns3::TcpSocketBase::RE_XMT, ns3::TcpSocketState::DctcpEcn}, true},
+        {{ns3::TcpSocketBase::DATA, ns3::TcpSocketState::DctcpEcn}, true},
+    };
+} // namespace
+
 namespace ns3
 {
 
@@ -150,6 +168,11 @@
                           PointerValue(),
                           MakePointerAccessor(&TcpSocketBase::m_congestionControl),
                           MakePointerChecker<TcpCongestionOps>())
+            .AddAttribute("RecoveryOps",
+                          "Pointer to TcpRecoveryOps object",
+                          PointerValue(),
+                          MakePointerAccessor(&TcpSocketBase::m_recoveryOps),
+                          MakePointerChecker<TcpRecoveryOps>())
             .AddAttribute(
                 "ReTxThreshold",
                 "Threshold for fast retransmit",
@@ -176,7 +199,11 @@
                             MakeTraceSourceAccessor(&TcpSocketBase::m_rto),
                             "ns3::TracedValueCallback::Time")
             .AddTraceSource("RTT",
-                            "Last RTT sample",
+                            "Smoothed RTT",
+                            MakeTraceSourceAccessor(&TcpSocketBase::m_srttTrace),
+                            "ns3::TracedValueCallback::Time")
+            .AddTraceSource("LastRTT",
+                            "RTT of the last (S)ACKed packet",
                             MakeTraceSourceAccessor(&TcpSocketBase::m_lastRttTrace),
                             "ns3::TracedValueCallback::Time")
             .AddTraceSource("NextTxSequence",
@@ -239,6 +266,10 @@
                             "Send tcp packet to IP protocol",
                             MakeTraceSourceAccessor(&TcpSocketBase::m_txTrace),
                             "ns3::TcpSocketBase::TcpTxRxTracedCallback")
+            .AddTraceSource("Retransmission",
+                            "Notification of a TCP retransmission",
+                            MakeTraceSourceAccessor(&TcpSocketBase::m_retransmissionTrace),
+                            "ns3::TcpSocketBase::RetransmissionCallback")
             .AddTraceSource("Rx",
                             "Receive tcp packet from IP protocol",
                             MakeTraceSourceAccessor(&TcpSocketBase::m_rxTrace),
@@ -322,6 +353,10 @@
 
     ok = m_tcb->TraceConnectWithoutContext("RTT", MakeCallback(&TcpSocketBase::UpdateRtt, this));
     NS_ASSERT(ok == true);
+
+    ok = m_tcb->TraceConnectWithoutContext("LastRTT",
+                                           MakeCallback(&TcpSocketBase::UpdateLastRtt, this));
+    NS_ASSERT(ok == true);
 }
 
 TcpSocketBase::TcpSocketBase(const TcpSocketBase& sock)
@@ -458,6 +493,10 @@
 
     ok = m_tcb->TraceConnectWithoutContext("RTT", MakeCallback(&TcpSocketBase::UpdateRtt, this));
     NS_ASSERT(ok == true);
+
+    ok = m_tcb->TraceConnectWithoutContext("LastRTT",
+                                           MakeCallback(&TcpSocketBase::UpdateLastRtt, this));
+    NS_ASSERT(ok == true);
 }
 
 TcpSocketBase::~TcpSocketBase()
@@ -1740,7 +1779,7 @@
         }
         if (!m_congestionControl->HasCongControl())
         {
-            m_recoveryOps->DoRecovery(m_tcb, currentDelivered);
+            m_recoveryOps->DoRecovery(m_tcb, currentDelivered, true);
             NS_LOG_INFO(m_dupAckCount << " Dupack received in fast recovery mode."
                                          "Increase cwnd to "
                                       << m_tcb->m_cWnd);
@@ -1893,9 +1932,11 @@
     NS_LOG_INFO("Update bytes in flight before processing the ACK.");
     BytesInFlight();
 
+    bool receivedData = packet->GetSize() > 0;
+
     // RFC 6675 Section 5: 2nd, 3rd paragraph and point (A), (B) implementation
     // are inside the function ProcessAck
-    ProcessAck(ackNumber, (bytesSacked > 0), currentDelivered, oldHeadSequence);
+    ProcessAck(ackNumber, (bytesSacked > 0), currentDelivered, oldHeadSequence, receivedData);
     m_tcb->m_isRetransDataAcked = false;
 
     if (m_congestionControl->HasCongControl())
@@ -1913,7 +1954,7 @@
     }
 
     // If there is any data piggybacked, store it into m_rxBuffer
-    if (packet->GetSize() > 0)
+    if (receivedData)
     {
         ReceivedData(packet, tcpHeader);
     }
@@ -1927,9 +1968,10 @@
 TcpSocketBase::ProcessAck(const SequenceNumber32& ackNumber,
                           bool scoreboardUpdated,
                           uint32_t currentDelivered,
-                          const SequenceNumber32& oldHeadSequence)
+                          const SequenceNumber32& oldHeadSequence,
+                          bool receivedData)
 {
-    NS_LOG_FUNCTION(this << ackNumber << scoreboardUpdated);
+    NS_LOG_FUNCTION(this << ackNumber << scoreboardUpdated << currentDelivered << oldHeadSequence);
     // RFC 6675, Section 5, 2nd paragraph:
     // If the incoming ACK is a cumulative acknowledgment, the TCP MUST
     // reset DupAcks to zero.
@@ -1953,10 +1995,14 @@
      * (a) the ACK is carrying a SACK block that identifies previously
      *     unacknowledged and un-SACKed octets between HighACK (TCP.UNA) and
      *     HighData (m_highTxMark)
+     *
+     * The check below implements conditions a), b), and d), and c) is prevented by virtue of not
+     * reaching this code if SYN or FIN is set, and e) is not supported.
      */
 
     bool isDupack = m_sackEnabled ? scoreboardUpdated
-                                  : ackNumber == oldHeadSequence && ackNumber < m_tcb->m_highTxMark;
+                                  : (ackNumber == oldHeadSequence &&
+                                     ackNumber < m_tcb->m_highTxMark && !receivedData);
 
     NS_LOG_DEBUG("ACK of " << ackNumber << " SND.UNA=" << oldHeadSequence
                            << " SND.NXT=" << m_tcb->m_nextTxSequence
@@ -1989,13 +2035,13 @@
     else if (ackNumber == oldHeadSequence)
     {
         // DupAck. Artificially call PktsAcked: after all, one segment has been ACKed.
-        m_congestionControl->PktsAcked(m_tcb, 1, m_tcb->m_lastRtt);
+        m_congestionControl->PktsAcked(m_tcb, 1, m_tcb->m_srtt);
     }
     else if (ackNumber > oldHeadSequence)
     {
         // Please remember that, with SACK, we can enter here even if we
         // received a dupack.
-        bytesAcked = ackNumber - oldHeadSequence;
+        bytesAcked = currentDelivered;
         uint32_t segsAcked = bytesAcked / m_tcb->m_segmentSize;
         m_bytesAckedNotProcessed += bytesAcked % m_tcb->m_segmentSize;
         bytesAcked -= bytesAcked % m_tcb->m_segmentSize;
@@ -2006,6 +2052,8 @@
             bytesAcked += m_tcb->m_segmentSize;
             m_bytesAckedNotProcessed -= m_tcb->m_segmentSize;
         }
+        NS_LOG_DEBUG("Set segsAcked: " << segsAcked
+                                       << " based on currentDelivered: " << currentDelivered);
 
         // Dupack count is reset to eventually fast-retransmit after 3 dupacks.
         // Any SACK-ed segment will be cleaned up by DiscardUpTo.
@@ -2044,7 +2092,7 @@
             // there is available window
             if (!m_congestionControl->HasCongControl() && segsAcked >= 1)
             {
-                m_recoveryOps->DoRecovery(m_tcb, currentDelivered);
+                m_recoveryOps->DoRecovery(m_tcb, currentDelivered, false);
             }
 
             // If the packet is already retransmitted do not retransmit it
@@ -2057,7 +2105,7 @@
             // This partial ACK acknowledge the fact that one segment has been
             // previously lost and now successfully received. All others have
             // been processed when they come under the form of dupACKs
-            m_congestionControl->PktsAcked(m_tcb, 1, m_tcb->m_lastRtt);
+            m_congestionControl->PktsAcked(m_tcb, 1, m_tcb->m_srtt);
             NewAck(ackNumber, m_isFirstPartialAck);
 
             if (m_isFirstPartialAck)
@@ -2085,7 +2133,7 @@
         // of RecoveryPoint.
         else if (ackNumber < m_recover && m_tcb->m_congState == TcpSocketState::CA_LOSS)
         {
-            m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_lastRtt);
+            m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_srtt);
             m_congestionControl->IncreaseWindow(m_tcb, segsAcked);
 
             NS_LOG_DEBUG(" Cong Control Called, cWnd=" << m_tcb->m_cWnd
@@ -2100,12 +2148,12 @@
         }
         else if (m_tcb->m_congState == TcpSocketState::CA_CWR)
         {
-            m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_lastRtt);
+            m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_srtt);
             // TODO: need to check behavior if marking is compounded by loss
             // and/or packet reordering
             if (!m_congestionControl->HasCongControl() && segsAcked >= 1)
             {
-                m_recoveryOps->DoRecovery(m_tcb, currentDelivered);
+                m_recoveryOps->DoRecovery(m_tcb, currentDelivered, false);
             }
             NewAck(ackNumber, true);
         }
@@ -2113,7 +2161,7 @@
         {
             if (m_tcb->m_congState == TcpSocketState::CA_OPEN)
             {
-                m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_lastRtt);
+                m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_srtt);
             }
             else if (m_tcb->m_congState == TcpSocketState::CA_DISORDER)
             {
@@ -2121,7 +2169,7 @@
                 {
                     m_congestionControl->PktsAcked(m_tcb,
                                                    segsAcked - oldDupAckCount,
-                                                   m_tcb->m_lastRtt);
+                                                   m_tcb->m_srtt);
                 }
 
                 if (!isDupack)
@@ -2158,7 +2206,7 @@
                 // TODO:  check consistency for dynamic segment size
                 segsAcked =
                     static_cast<uint32_t>(ackNumber - oldHeadSequence) / m_tcb->m_segmentSize;
-                m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_lastRtt);
+                m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_srtt);
                 m_congestionControl->CwndEvent(m_tcb, TcpSocketState::CA_EVENT_COMPLETE_CWR);
                 m_congestionControl->CongestionStateSet(m_tcb, TcpSocketState::CA_OPEN);
                 m_tcb->m_congState = TcpSocketState::CA_OPEN;
@@ -2177,7 +2225,7 @@
                 // can increase cWnd)
                 segsAcked = (ackNumber - m_recover) / m_tcb->m_segmentSize;
 
-                m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_lastRtt);
+                m_congestionControl->PktsAcked(m_tcb, segsAcked, m_tcb->m_srtt);
 
                 m_congestionControl->CongestionStateSet(m_tcb, TcpSocketState::CA_OPEN);
                 m_tcb->m_congState = TcpSocketState::CA_OPEN;
@@ -2741,9 +2789,11 @@
     Ptr<Packet> p = Create<Packet>();
     TcpHeader header;
     SequenceNumber32 s = m_tcb->m_nextTxSequence;
+    TcpPacketType_t packetType = INVALID;
 
     if (flags & TcpHeader::FIN)
     {
+        packetType = TcpPacketType_t::FIN;
         flags |= TcpHeader::ACK;
     }
     else if (m_state == FIN_WAIT_1 || m_state == LAST_ACK || m_state == CLOSING)
@@ -2751,7 +2801,26 @@
         ++s;
     }
 
-    AddSocketTags(p);
+    if (flags & TcpHeader::SYN)
+    {
+        packetType = TcpPacketType_t::SYN;
+        if (flags & TcpHeader::ACK)
+        {
+            packetType = TcpPacketType_t::SYN_ACK;
+        }
+    }
+    else if (flags & TcpHeader::ACK)
+    {
+        packetType = TcpPacketType_t::PURE_ACK;
+    }
+
+    if (flags & TcpHeader::RST)
+    {
+        packetType = TcpPacketType_t::RST;
+    }
+
+    NS_ASSERT_MSG(packetType != TcpPacketType_t::INVALID, "Invalid TCP packet type");
+    AddSocketTags(p, IsEct(packetType));
 
     header.SetFlags(flags);
     header.SetSequenceNumber(s);
@@ -3030,7 +3099,7 @@
 }
 
 void
-TcpSocketBase::AddSocketTags(const Ptr<Packet>& p) const
+TcpSocketBase::AddSocketTags(const Ptr<Packet>& p, bool isEct) const
 {
     /*
      * Add tags for each socket option.
@@ -3041,7 +3110,7 @@
     if (GetIpTos())
     {
         SocketIpTosTag ipTosTag;
-        if (m_tcb->m_ecnState != TcpSocketState::ECN_DISABLED && !CheckNoEcn(GetIpTos()))
+        if (m_tcb->m_ecnState != TcpSocketState::ECN_DISABLED && !CheckNoEcn(GetIpTos()) && isEct)
         {
             ipTosTag.SetTos(MarkEcnCodePoint(GetIpTos(), m_tcb->m_ectCodePoint));
         }
@@ -3054,7 +3123,7 @@
     }
     else
     {
-        if ((m_tcb->m_ecnState != TcpSocketState::ECN_DISABLED && p->GetSize() > 0) ||
+        if ((m_tcb->m_ecnState != TcpSocketState::ECN_DISABLED && p->GetSize() > 0 && isEct) ||
             m_tcb->m_ecnMode == TcpSocketState::DctcpEcn)
         {
             SocketIpTosTag ipTosTag;
@@ -3066,7 +3135,8 @@
     if (IsManualIpv6Tclass())
     {
         SocketIpv6TclassTag ipTclassTag;
-        if (m_tcb->m_ecnState != TcpSocketState::ECN_DISABLED && !CheckNoEcn(GetIpv6Tclass()))
+        if (m_tcb->m_ecnState != TcpSocketState::ECN_DISABLED && !CheckNoEcn(GetIpv6Tclass()) &&
+            isEct)
         {
             ipTclassTag.SetTclass(MarkEcnCodePoint(GetIpv6Tclass(), m_tcb->m_ectCodePoint));
         }
@@ -3079,7 +3149,7 @@
     }
     else
     {
-        if ((m_tcb->m_ecnState != TcpSocketState::ECN_DISABLED && p->GetSize() > 0) ||
+        if ((m_tcb->m_ecnState != TcpSocketState::ECN_DISABLED && p->GetSize() > 0 && isEct) ||
             m_tcb->m_ecnMode == TcpSocketState::DctcpEcn)
         {
             SocketIpv6TclassTag ipTclassTag;
@@ -3170,7 +3240,8 @@
         NS_LOG_INFO("CWR flags set");
     }
 
-    AddSocketTags(p);
+    bool isEct = IsEct(isRetransmission ? TcpPacketType_t::RE_XMT : TcpPacketType_t::DATA);
+    AddSocketTags(p, isEct);
 
     if (m_closeOnEmpty && (remainingData == 0))
     {
@@ -3214,6 +3285,25 @@
     }
 
     m_txTrace(p, header, this);
+    if (isRetransmission)
+    {
+        if (m_endPoint)
+        {
+            m_retransmissionTrace(p,
+                                  header,
+                                  m_endPoint->GetLocalAddress(),
+                                  m_endPoint->GetPeerAddress(),
+                                  this);
+        }
+        else
+        {
+            m_retransmissionTrace(p,
+                                  header,
+                                  m_endPoint6->GetLocalAddress(),
+                                  m_endPoint6->GetPeerAddress(),
+                                  this);
+        }
+    }
 
     if (m_endPoint)
     {
@@ -3242,7 +3332,8 @@
     // This is a simple version of Linux tcp_cwnd_validate() but following
     // the principle implemented in Linux that limits the updating of cwnd
     // (in the congestion controls) when flight size is >= cwnd
-    m_tcb->m_isCwndLimited = (BytesInFlight() >= m_tcb->m_cWnd);
+    // send will also be cwnd limited if less then one segment of cwnd is available
+    m_tcb->m_isCwndLimited = (m_tcb->m_cWnd < BytesInFlight() + m_tcb->m_segmentSize);
 
     UpdateRttHistory(seq, sz, isRetransmission);
 
@@ -3622,59 +3713,96 @@
     }
 }
 
+Time
+TcpSocketBase::CalculateRttSample(const TcpHeader& tcpHeader, const RttHistory& rttHistory)
+{
+    NS_LOG_FUNCTION(this);
+    SequenceNumber32 ackSeq = tcpHeader.GetAckNumber();
+    Time rtt;
+
+    if (ackSeq >= (rttHistory.seq + SequenceNumber32(rttHistory.count)))
+    {
+        // As per RFC 6298 (Section 3)
+        // RTT samples MUST NOT be made using segments that were
+        // retransmitted (and thus for which it is ambiguous whether the reply
+        // was for the first instance of the packet or a later instance).  The
+        // only case when TCP can safely take RTT samples from retransmitted
+        // segments is when the TCP timestamp option is employed, since
+        // the timestamp option removes the ambiguity regarding which instance
+        // of the data segment triggered the acknowledgment.
+        if (m_timestampEnabled && tcpHeader.HasOption(TcpOption::TS))
+        {
+            Ptr<const TcpOptionTS> ts;
+            ts = DynamicCast<const TcpOptionTS>(tcpHeader.GetOption(TcpOption::TS));
+            rtt = TcpOptionTS::ElapsedTimeFromTsValue(ts->GetEcho());
+            if (rtt.IsZero())
+            {
+                NS_LOG_LOGIC("TcpSocketBase::EstimateRtt - RTT calculated from TcpOption::TS "
+                             "is zero, approximating to 1us.");
+                NS_LOG_DEBUG("RTT calculated from TcpOption::TS is zero, updating rtt to 1us.");
+                rtt = MicroSeconds(1);
+            }
+        }
+        else if (!rttHistory.retx)
+        {
+            // Elapsed time since the packet was transmitted
+            rtt = Simulator::Now() - rttHistory.time;
+        }
+    }
+    return rtt;
+}
+
 void
 TcpSocketBase::EstimateRtt(const TcpHeader& tcpHeader)
 {
+    NS_LOG_FUNCTION(this);
     SequenceNumber32 ackSeq = tcpHeader.GetAckNumber();
-    Time m = Time(0.0);
+    Time rtt;
 
     // An ack has been received, calculate rtt and log this measurement
     // Note we use a linear search (O(n)) for this since for the common
     // case the ack'ed packet will be at the head of the list
     if (!m_history.empty())
     {
-        RttHistory& h = m_history.front();
-        if (!h.retx && ackSeq >= (h.seq + SequenceNumber32(h.count)))
-        { // Ok to use this sample
-            if (m_timestampEnabled && tcpHeader.HasOption(TcpOption::TS))
-            {
-                Ptr<const TcpOptionTS> ts;
-                ts = DynamicCast<const TcpOptionTS>(tcpHeader.GetOption(TcpOption::TS));
-                m = TcpOptionTS::ElapsedTimeFromTsValue(ts->GetEcho());
-                if (m.IsZero())
-                {
-                    NS_LOG_LOGIC("TcpSocketBase::EstimateRtt - RTT calculated from TcpOption::TS "
-                                 "is zero, approximating to 1us.");
-                    m = MicroSeconds(1);
-                }
-            }
-            else
+        RttHistory& earliestTransmittedPktHistory = m_history.front();
+        rtt = CalculateRttSample(tcpHeader, earliestTransmittedPktHistory);
+
+        // Store ACKed packet that has the latest transmission time to update `lastRtt`
+        RttHistory latestTransmittedPktHistory = earliestTransmittedPktHistory;
+
+        // Delete all ACK history with seq <= ack
+        while (!m_history.empty())
+        {
+            RttHistory& rttHistory = m_history.front();
+            if ((rttHistory.seq + SequenceNumber32(rttHistory.count)) > ackSeq)
             {
-                m = Simulator::Now() - h.time; // Elapsed time
+                break; // Done removing
             }
+
+            latestTransmittedPktHistory = rttHistory;
+            m_history.pop_front(); // Remove
         }
-    }
 
-    // Now delete all ack history with seq <= ack
-    while (!m_history.empty())
-    {
-        RttHistory& h = m_history.front();
-        if ((h.seq + SequenceNumber32(h.count)) > ackSeq)
+        // In case of multiple packets being ACKed in a single acknowledgement, `m_lastRtt` is
+        // RTT of the last (S)ACKed packet calculated using the data packet with the latest
+        // transmission time
+        Time lastRtt = CalculateRttSample(tcpHeader, latestTransmittedPktHistory);
+        if (!lastRtt.IsZero())
         {
-            break; // Done removing
+            NS_LOG_DEBUG("Last RTT sample updated to: " << lastRtt);
+            m_tcb->m_lastRtt = lastRtt;
         }
-        m_history.pop_front(); // Remove
     }
 
-    if (!m.IsZero())
+    if (!rtt.IsZero())
     {
-        m_rtt->Measurement(m); // Log the measurement
+        m_rtt->Measurement(rtt); // Log the measurement
         // RFC 6298, clause 2.4
         m_rto = Max(m_rtt->GetEstimate() + Max(m_clockGranularity, m_rtt->GetVariation() * 4),
                     m_minRto);
-        m_tcb->m_lastRtt = m_rtt->GetEstimate();
-        m_tcb->m_minRtt = std::min(m_tcb->m_lastRtt.Get(), m_tcb->m_minRtt);
-        NS_LOG_INFO(this << m_tcb->m_lastRtt << m_tcb->m_minRtt);
+        m_tcb->m_srtt = m_rtt->GetEstimate();
+        m_tcb->m_minRtt = std::min(m_tcb->m_srtt.Get(), m_tcb->m_minRtt);
+        NS_LOG_INFO(this << m_tcb->m_srtt << m_tcb->m_minRtt);
     }
 }
 
@@ -3927,13 +4055,7 @@
     // Send a packet tag for setting ECT bits in IP header
     if (m_tcb->m_ecnState != TcpSocketState::ECN_DISABLED)
     {
-        SocketIpTosTag ipTosTag;
-        ipTosTag.SetTos(MarkEcnCodePoint(0, m_tcb->m_ectCodePoint));
-        p->AddPacketTag(ipTosTag);
-
-        SocketIpv6TclassTag ipTclassTag;
-        ipTclassTag.SetTclass(MarkEcnCodePoint(0, m_tcb->m_ectCodePoint));
-        p->AddPacketTag(ipTclassTag);
+        AddSocketTags(p, IsEct(TcpPacketType_t::WINDOW_PROBE));
     }
     m_txTrace(p, tcpHeader, this);
 
@@ -4526,6 +4648,12 @@
 void
 TcpSocketBase::UpdateRtt(Time oldValue, Time newValue) const
 {
+    m_srttTrace(oldValue, newValue);
+}
+
+void
+TcpSocketBase::UpdateLastRtt(Time oldValue, Time newValue) const
+{
     m_lastRttTrace(oldValue, newValue);
 }
 
@@ -4626,12 +4754,12 @@
                                                                          << m_tcb->m_ssThresh);
         factor = static_cast<double>(m_tcb->m_pacingCaRatio) / 100;
     }
-    Time lastRtt = m_tcb->m_lastRtt.Get(); // Get underlying Time value
-    NS_LOG_DEBUG("Last RTT is " << lastRtt.GetSeconds());
+    Time srtt = m_tcb->m_srtt.Get(); // Get underlying Time value
+    NS_LOG_DEBUG("Smoothed RTT is " << srtt.GetSeconds());
 
     // Multiply by 8 to convert from bytes per second to bits per second
     DataRate pacingRate((std::max(m_tcb->m_cWnd, m_tcb->m_bytesInFlight) * 8 * factor) /
-                        lastRtt.GetSeconds());
+                        srtt.GetSeconds());
     if (pacingRate < m_tcb->m_maxPacingRate)
     {
         NS_LOG_DEBUG("Pacing rate updated to: " << pacingRate);
@@ -4658,6 +4786,22 @@
     m_tcb->m_paceInitialWindow = paceWindow;
 }
 
+bool
+TcpSocketBase::IsEct(TcpPacketType_t packetType) const
+{
+    NS_LOG_FUNCTION(this << packetType);
+    NS_ASSERT_MSG(packetType != TcpPacketType_t::INVALID, "Invalid TCP packet type");
+    if (m_tcb->m_ecnState == TcpSocketState::ECN_DISABLED)
+    {
+        return false;
+    }
+
+    NS_ABORT_MSG_IF(!ECN_RESTRICTION_MAP.contains(std::make_pair(packetType, m_tcb->m_ecnMode)),
+                    "Invalid packetType and ecnMode");
+
+    return ECN_RESTRICTION_MAP.at(std::make_pair(packetType, m_tcb->m_ecnMode));
+}
+
 void
 TcpSocketBase::SetUseEcn(TcpSocketState::UseEcn_t useEcn)
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket-base.h ns-3.43/src/internet/model/tcp-socket-base.h
--- ns-3.42/src/internet/model/tcp-socket-base.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket-base.h	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 Georgia Tech Research Corporation
  * Copyright (c) 2010 Adrian Sai-wah Tam
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
@@ -251,6 +240,25 @@
     TcpSocketBase(const TcpSocketBase& sock);
     ~TcpSocketBase() override;
 
+    /**
+     * \brief Tcp Packet Types
+     *
+     * Taxonomy referred from Table 1 of
+     * https://www.ietf.org/archive/id/draft-ietf-tcpm-generalized-ecn-15.txt
+     */
+    enum TcpPacketType_t
+    {
+        SYN,
+        SYN_ACK,
+        PURE_ACK,
+        WINDOW_PROBE,
+        FIN,
+        RST,
+        RE_XMT,
+        DATA,
+        INVALID
+    };
+
     // Set associated Node, TcpL4Protocol, RttEstimator to this socket
 
     /**
@@ -370,6 +378,11 @@
     /**
      * \brief Callback pointer for RTT trace chaining
      */
+    TracedCallback<Time, Time> m_srttTrace;
+
+    /**
+     * \brief Callback pointer for Last RTT trace chaining
+     */
     TracedCallback<Time, Time> m_lastRttTrace;
 
     /**
@@ -445,6 +458,13 @@
     void UpdateRtt(Time oldValue, Time newValue) const;
 
     /**
+     * \brief Callback function to hook to TcpSocketState lastRtt
+     * \param oldValue old lastRtt value
+     * \param newValue new lastRtt value
+     */
+    void UpdateLastRtt(Time oldValue, Time newValue) const;
+
+    /**
      * \brief Install a congestion control algorithm on this socket
      *
      * \param algo Algorithm to be installed
@@ -578,6 +598,20 @@
      */
     void SetPaceInitialWindow(bool paceWindow);
 
+    /**
+     * \brief Checks if a TCP packet should be ECN-capable (ECT) according to the TcpPacketType and
+     * ECN mode.
+     *
+     * Currently, only Classic ECN and DCTCP ECN modes are supported, with
+     * potential extensions for future modes (Ecnpp).
+     *
+     * \param packetType The type of the TCP packet, represented by an enum TcpPacketType.
+     * \return true if the packet is ECN-capable (ECT), false otherwise.
+     *
+     * Reference: https://www.ietf.org/archive/id/draft-ietf-tcpm-generalized-ecn-15.txt (Table 1)
+     */
+    bool IsEct(TcpPacketType_t packetType) const;
+
     // Necessary implementations of null functions from ns3::Socket
     SocketErrno GetErrno() const override;     // returns m_errno
     SocketType GetSocketType() const override; // returns socket type
@@ -608,7 +642,7 @@
     void BindToNetDevice(Ptr<NetDevice> netdevice) override; // NetDevice with my m_endPoint
 
     /**
-     * TracedCallback signature for tcp packet transmission or reception events.
+     * TracedCallback signature for TCP packet transmission or reception events.
      *
      * \param [in] packet The packet.
      * \param [in] header The TcpHeader
@@ -618,6 +652,21 @@
                                           const TcpHeader& header,
                                           const Ptr<const TcpSocketBase> socket);
 
+    /**
+     * TracedCallback signature for TCP packet retransmission events.
+     *
+     * \param [in] packet The packet.
+     * \param [in] header The TcpHeader
+     * \param [in] localAddr The local address
+     * \param [in] peerAddr The peer/remote address
+     * \param [in] socket This socket
+     */
+    typedef void (*RetransmissionCallback)(const Ptr<const Packet> packet,
+                                           const TcpHeader& header,
+                                           const Address& localAddr,
+                                           const Address& peerAddr,
+                                           const Ptr<const TcpSocketBase> socket);
+
   protected:
     // Implementing ns3::TcpSocket -- Attribute get/set
     // inherited, no need to doc
@@ -1036,11 +1085,13 @@
      * \param oldHeadSequence value of HeadSequence before ack
      * updated with SACK information
      * \param currentDelivered The number of bytes (S)ACKed
+     * \param receivedData if true indicates that data is piggybacked with ACK
      */
     virtual void ProcessAck(const SequenceNumber32& ackNumber,
                             bool scoreboardUpdated,
                             uint32_t currentDelivered,
-                            const SequenceNumber32& oldHeadSequence);
+                            const SequenceNumber32& oldHeadSequence,
+                            bool receivedData);
 
     /**
      * \brief Recv of a data, put into buffer, call L7 to get it if necessary
@@ -1050,6 +1101,20 @@
     virtual void ReceivedData(Ptr<Packet> packet, const TcpHeader& tcpHeader);
 
     /**
+     * \brief Calculate RTT sample for the ACKed packet
+     *
+     * Per RFC 6298 (Section 3),
+     * If `m_timestampsEnabled` is true, calculate RTT using timestamps option.
+     * Otherwise, return RTT as the elapsed time since the packet was transmitted.
+     * If ACKed packed was a retrasmitted packet, return zero time.
+     *
+     * \param tcpHeader the packet's TCP header
+     * \param rttHistory the ACKed packet's RTT History
+     * \returns the RTT sample
+     */
+    virtual Time CalculateRttSample(const TcpHeader& tcpHeader, const RttHistory& rttHistory);
+
+    /**
      * \brief Take into account the packet for RTT estimation
      * \param tcpHeader the packet's TCP header
      */
@@ -1119,7 +1184,8 @@
      */
     void DoRetransmit();
 
-    /** \brief Add options to TcpHeader
+    /**
+     * \brief Add options to TcpHeader
      *
      * Test each option, and if it is enabled on our side, add it
      * to the header
@@ -1206,7 +1272,8 @@
      */
     void AddOptionSack(TcpHeader& header);
 
-    /** \brief Process the timestamp option from other side
+    /**
+     * \brief Process the timestamp option from other side
      *
      * Get the timestamp and the echo, then save timestamp (which will
      * be the echo value in our out-packets) and save the echoed timestamp,
@@ -1257,8 +1324,9 @@
     /**
      * \brief Add Tags for the Socket
      * \param p Packet
+     * \param isEct Whether the packet is allowed to be ECT capable
      */
-    void AddSocketTags(const Ptr<Packet>& p) const;
+    void AddSocketTags(const Ptr<Packet>& p, bool isEct) const;
 
     /**
      * Get the current value of the receiver's offered window (RCV.WND)
@@ -1371,7 +1439,7 @@
     // Guesses over the other connection end
     bool m_isFirstPartialAck{true}; //!< First partial ACK during RECOVERY
 
-    // The following two traces pass a packet with a TCP header
+    // The following three traces pass a packet with a TCP header
     TracedCallback<Ptr<const Packet>,
                    const TcpHeader&,
                    Ptr<const TcpSocketBase>>
@@ -1379,6 +1447,13 @@
 
     TracedCallback<Ptr<const Packet>,
                    const TcpHeader&,
+                   const Address&,
+                   const Address&,
+                   Ptr<const TcpSocketBase>>
+        m_retransmissionTrace; //!< Trace of retransmitted packets
+
+    TracedCallback<Ptr<const Packet>,
+                   const TcpHeader&,
                    Ptr<const TcpSocketBase>>
         m_rxTrace; //!< Trace of received packets
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket.cc ns-3.43/src/internet/model/tcp-socket.cc
--- ns-3.42/src/internet/model/tcp-socket.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket-factory.cc ns-3.43/src/internet/model/tcp-socket-factory.cc
--- ns-3.42/src/internet/model/tcp-socket-factory.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket-factory.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Raj Bhattacharjea <raj.b@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket-factory.h ns-3.43/src/internet/model/tcp-socket-factory.h
--- ns-3.42/src/internet/model/tcp-socket-factory.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket-factory.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Raj Bhattacharjea <raj.b@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket-factory-impl.cc ns-3.43/src/internet/model/tcp-socket-factory-impl.cc
--- ns-3.42/src/internet/model/tcp-socket-factory-impl.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket-factory-impl.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Raj Bhattacharjea <raj.b@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket-factory-impl.h ns-3.43/src/internet/model/tcp-socket-factory-impl.h
--- ns-3.42/src/internet/model/tcp-socket-factory-impl.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket-factory-impl.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Raj Bhattacharjea <raj.b@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket.h ns-3.43/src/internet/model/tcp-socket.h
--- ns-3.42/src/internet/model/tcp-socket.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket.h	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 Georgia Tech Research Corporation
  *               2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: George F. Riley<riley@ece.gatech.edu>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket-state.cc ns-3.43/src/internet/model/tcp-socket-state.cc
--- ns-3.42/src/internet/model/tcp-socket-state.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket-state.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 #include "tcp-socket-state.h"
 
@@ -91,7 +80,11 @@
                             MakeTraceSourceAccessor(&TcpSocketState::m_bytesInFlight),
                             "ns3::TracedValueCallback::Uint32")
             .AddTraceSource("RTT",
-                            "Last RTT sample",
+                            "Smoothed RTT",
+                            MakeTraceSourceAccessor(&TcpSocketState::m_srtt),
+                            "ns3::TracedValueCallback::Time")
+            .AddTraceSource("LastRTT",
+                            "RTT of the last (S)ACKed packet",
                             MakeTraceSourceAccessor(&TcpSocketState::m_lastRtt),
                             "ns3::TracedValueCallback::Time");
     return tid;
@@ -120,6 +113,7 @@
       m_minRtt(other.m_minRtt),
       m_bytesInFlight(other.m_bytesInFlight),
       m_isCwndLimited(other.m_isCwndLimited),
+      m_srtt(other.m_srtt),
       m_lastRtt(other.m_lastRtt),
       m_ecnMode(other.m_ecnMode),
       m_useEcn(other.m_useEcn),
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-socket-state.h ns-3.43/src/internet/model/tcp-socket-state.h
--- ns-3.42/src/internet/model/tcp-socket-state.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-socket-state.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 #ifndef TCP_SOCKET_STATE_H
 #define TCP_SOCKET_STATE_H
@@ -206,9 +195,10 @@
 
     Time m_minRtt{Time::Max()}; //!< Minimum RTT observed throughout the connection
 
-    TracedValue<uint32_t> m_bytesInFlight{0};  //!< Bytes in flight
-    bool m_isCwndLimited{false};               //!< Whether throughput is limited by cwnd
-    TracedValue<Time> m_lastRtt{Seconds(0.0)}; //!< Last RTT sample collected
+    TracedValue<uint32_t> m_bytesInFlight{0}; //!< Bytes in flight
+    bool m_isCwndLimited{false};              //!< Whether throughput is limited by cwnd
+    TracedValue<Time> m_srtt;                 //!< Smoothed RTT
+    TracedValue<Time> m_lastRtt;              //!< RTT of the last (S)ACKed packet
 
     Ptr<TcpRxBuffer> m_rxBuffer; //!< Rx buffer (reordering buffer)
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-tx-buffer.cc ns-3.43/src/internet/model/tcp-tx-buffer.cc
--- ns-3.42/src/internet/model/tcp-tx-buffer.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-tx-buffer.cc	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2010-2015 Adrian Sai-wah Tam
  * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
@@ -174,6 +163,7 @@
 
     // if you change the head with data already sent, something bad will happen
     NS_ASSERT(m_sentList.empty());
+    m_sackSeen = false;
     m_highestSack = std::make_pair(m_sentList.end(), SequenceNumber32(0));
 }
 
@@ -767,6 +757,7 @@
 
     if (m_highestSack.second <= m_firstByteSeq)
     {
+        m_sackSeen = false;
         m_highestSack = std::make_pair(m_sentList.end(), SequenceNumber32(0));
     }
 
@@ -831,6 +822,7 @@
                     if (m_highestSack.first == m_sentList.end() ||
                         m_highestSack.second <= beginOfCurrentPacket + pktSize)
                     {
+                        m_sackSeen = true;
                         m_highestSack = std::make_pair(item_it, beginOfCurrentPacket);
                     }
 
@@ -983,7 +975,8 @@
         item = *it;
 
         // Condition 1.a , 1.b , and 1.c
-        if (!item->m_retrans && !item->m_sacked)
+        if (!item->m_retrans && !item->m_sacked &&
+            ((m_sackSeen && item->m_startSeq < m_highestSack.second) || !m_sackSeen))
         {
             if (item->m_lost)
             {
@@ -1213,6 +1206,7 @@
     }
 
     m_highestSack = std::make_pair(m_sentList.end(), SequenceNumber32(0));
+    m_sackSeen = false;
 }
 
 void
@@ -1241,6 +1235,7 @@
     m_lostOut = 0;
     m_retrans = 0;
     m_sackedOut = 0;
+    m_sackSeen = false;
     m_highestSack = std::make_pair(m_sentList.end(), SequenceNumber32(0));
 }
 
@@ -1273,6 +1268,7 @@
     {
         m_sackedOut = 0;
         m_lostOut = m_sentSize;
+        m_sackSeen = false;
         m_highestSack = std::make_pair(m_sentList.end(), SequenceNumber32(0));
     }
     else
@@ -1400,6 +1396,7 @@
     {
         (*it)->m_sacked = true;
         m_sackedOut += (*it)->m_packet->GetSize();
+        m_sackSeen = true;
         m_highestSack = std::make_pair(it, (*it)->m_startSeq);
         NS_LOG_INFO("Added a Reno SACK, status: " << *this);
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-tx-buffer.h ns-3.43/src/internet/model/tcp-tx-buffer.h
--- ns-3.42/src/internet/model/tcp-tx-buffer.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-tx-buffer.h	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2010-2015 Adrian Sai-wah Tam
  * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original author: Adrian Sai-wah Tam <adrian.sw.tam@gmail.com>
  */
@@ -499,7 +488,7 @@
      * The cases we need to manage are two, and they are depicted in the following
      * image:
      *
-     *\verbatim
+     * \verbatim
                          |------|     |----|     |----|
                   list = |      | --> |    | --> |    |
                          |------|     |----|     |----|
@@ -525,7 +514,7 @@
      * and we reduce case (2) to case (1) through sequentially applying fragment
      * or merge. For instance:
      *
-     *\verbatim
+     * \verbatim
         |------|
         |      |
         |------|
@@ -621,6 +610,7 @@
     uint32_t m_segmentSize{0};  //!< Segment size from TcpSocketBase
     bool m_renoSack{false};     //!< Indicates if AddRenoSack was called
     bool m_sackEnabled{true};   //!< Indicates if SACK is enabled on this connection
+    bool m_sackSeen{false};     //!< Indicates if a SACK was received
 
     static Callback<void, TcpTxItem*> m_nullCb; //!< Null callback for an item
 };
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-tx-item.cc ns-3.43/src/internet/model/tcp-tx-item.cc
--- ns-3.42/src/internet/model/tcp-tx-item.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-tx-item.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-tx-item.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-tx-item.h ns-3.43/src/internet/model/tcp-tx-item.h
--- ns-3.42/src/internet/model/tcp-tx-item.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-tx-item.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef TCP_TX_ITEM_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-vegas.cc ns-3.43/src/internet/model/tcp-vegas.cc
--- ns-3.42/src/internet/model/tcp-vegas.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-vegas.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-vegas.h ns-3.43/src/internet/model/tcp-vegas.h
--- ns-3.42/src/internet/model/tcp-vegas.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-vegas.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-veno.cc ns-3.43/src/internet/model/tcp-veno.cc
--- ns-3.42/src/internet/model/tcp-veno.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-veno.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-veno.h ns-3.43/src/internet/model/tcp-veno.h
--- ns-3.42/src/internet/model/tcp-veno.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-veno.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-westwood-plus.cc ns-3.43/src/internet/model/tcp-westwood-plus.cc
--- ns-3.42/src/internet/model/tcp-westwood-plus.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-westwood-plus.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Siddharth Gangadhar <siddharth@ittc.ku.edu>,
  *          Truc Anh N. Nguyen <annguyen@ittc.ku.edu>,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-westwood-plus.h ns-3.43/src/internet/model/tcp-westwood-plus.h
--- ns-3.42/src/internet/model/tcp-westwood-plus.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-westwood-plus.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Siddharth Gangadhar <siddharth@ittc.ku.edu>, Truc Anh N. Nguyen <annguyen@ittc.ku.edu>,
  * and Greeshma Umapathi
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-yeah.cc ns-3.43/src/internet/model/tcp-yeah.cc
--- ns-3.42/src/internet/model/tcp-yeah.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-yeah.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/tcp-yeah.h ns-3.43/src/internet/model/tcp-yeah.h
--- ns-3.42/src/internet/model/tcp-yeah.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/tcp-yeah.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-header.cc ns-3.43/src/internet/model/udp-header.cc
--- ns-3.42/src/internet/model/udp-header.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-header.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-header.h ns-3.43/src/internet/model/udp-header.h
--- ns-3.42/src/internet/model/udp-header.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-header.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-l4-protocol.cc ns-3.43/src/internet/model/udp-l4-protocol.cc
--- ns-3.42/src/internet/model/udp-l4-protocol.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-l4-protocol.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-l4-protocol.h ns-3.43/src/internet/model/udp-l4-protocol.h
--- ns-3.42/src/internet/model/udp-l4-protocol.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-l4-protocol.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-socket.cc ns-3.43/src/internet/model/udp-socket.cc
--- ns-3.42/src/internet/model/udp-socket.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-socket.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-socket-factory.cc ns-3.43/src/internet/model/udp-socket-factory.cc
--- ns-3.42/src/internet/model/udp-socket-factory.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-socket-factory.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-socket-factory.h ns-3.43/src/internet/model/udp-socket-factory.h
--- ns-3.42/src/internet/model/udp-socket-factory.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-socket-factory.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-socket-factory-impl.cc ns-3.43/src/internet/model/udp-socket-factory-impl.cc
--- ns-3.42/src/internet/model/udp-socket-factory-impl.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-socket-factory-impl.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-socket-factory-impl.h ns-3.43/src/internet/model/udp-socket-factory-impl.h
--- ns-3.42/src/internet/model/udp-socket-factory-impl.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-socket-factory-impl.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-socket.h ns-3.43/src/internet/model/udp-socket.h
--- ns-3.42/src/internet/model/udp-socket.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-socket.h	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 Georgia Tech Research Corporation
  *               2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: George F. Riley<riley@ece.gatech.edu>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-socket-impl.cc ns-3.43/src/internet/model/udp-socket-impl.cc
--- ns-3.42/src/internet/model/udp-socket-impl.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-socket-impl.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/udp-socket-impl.h ns-3.43/src/internet/model/udp-socket-impl.h
--- ns-3.42/src/internet/model/udp-socket-impl.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/udp-socket-impl.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/model/windowed-filter.h ns-3.43/src/internet/model/windowed-filter.h
--- ns-3.42/src/internet/model/windowed-filter.h	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/model/windowed-filter.h	2024-10-09 16:41:09.892655800 -0700
@@ -1,31 +1,7 @@
 /*
- *  Copyright (c) 2016 The Chromium Authors. All rights reserved.
+ * Copyright (c) 2016 The Chromium Authors. All rights reserved.
  *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *    * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *    * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- *    * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ * SPDX-License-Identifier: BSD-3-Clause
  */
 
 /*
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/global-route-manager-impl-test-suite.cc ns-3.43/src/internet/test/global-route-manager-impl-test-suite.cc
--- ns-3.42/src/internet/test/global-route-manager-impl-test-suite.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/global-route-manager-impl-test-suite.cc	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright 2007 University of Washington
  * Copyright (C) 1999, 2000 Kunihiro Ishiguro, Toshiaki Takada
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Tom Henderson (tomhend@u.washington.edu)
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/icmp-test.cc ns-3.43/src/internet/test/icmp-test.cc
--- ns-3.42/src/internet/test/icmp-test.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/icmp-test.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/internet-stack-helper-test-suite.cc ns-3.43/src/internet/test/internet-stack-helper-test-suite.cc
--- ns-3.42/src/internet/test/internet-stack-helper-test-suite.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/internet-stack-helper-test-suite.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-address-generator-test-suite.cc ns-3.43/src/internet/test/ipv4-address-generator-test-suite.cc
--- ns-3.42/src/internet/test/ipv4-address-generator-test-suite.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-address-generator-test-suite.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/ipv4-address-generator.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-address-helper-test-suite.cc ns-3.43/src/internet/test/ipv4-address-helper-test-suite.cc
--- ns-3.42/src/internet/test/ipv4-address-helper-test-suite.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-address-helper-test-suite.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/ipv4-address-generator.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-deduplication-test.cc ns-3.43/src/internet/test/ipv4-deduplication-test.cc
--- ns-3.42/src/internet/test/ipv4-deduplication-test.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-deduplication-test.cc	2024-10-09 16:41:09.892655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2013 Universita' di Firenze
  * Copyright (c) 2019 Caliola Engineering, LLC : RFC 6621 multicast packet de-duplication
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  * Modified (2019): Jared Dulmage <jared.dulmage@caliola.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-forwarding-test.cc ns-3.43/src/internet/test/ipv4-forwarding-test.cc
--- ns-3.42/src/internet/test/ipv4-forwarding-test.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-forwarding-test.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-fragmentation-test.cc ns-3.43/src/internet/test/ipv4-fragmentation-test.cc
--- ns-3.42/src/internet/test/ipv4-fragmentation-test.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-fragmentation-test.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-global-routing-test-suite.cc ns-3.43/src/internet/test/ipv4-global-routing-test-suite.cc
--- ns-3.42/src/internet/test/ipv4-global-routing-test-suite.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-global-routing-test-suite.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/boolean.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-header-test.cc ns-3.43/src/internet/test/ipv4-header-test.cc
--- ns-3.42/src/internet/test/ipv4-header-test.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-header-test.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: John Abraham <john.abraham@gatech.edu>
  * Adapted from: ipv4-raw-test.cc
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-list-routing-test-suite.cc ns-3.43/src/internet/test/ipv4-list-routing-test-suite.cc
--- ns-3.42/src/internet/test/ipv4-list-routing-test-suite.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-list-routing-test-suite.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-packet-info-tag-test-suite.cc ns-3.43/src/internet/test/ipv4-packet-info-tag-test-suite.cc
--- ns-3.42/src/internet/test/ipv4-packet-info-tag-test-suite.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-packet-info-tag-test-suite.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hajime Tazaki <tazaki@sfc.wide.ad.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-raw-test.cc ns-3.43/src/internet/test/ipv4-raw-test.cc
--- ns-3.42/src/internet/test/ipv4-raw-test.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-raw-test.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hajime Tazaki <tazaki@sfc.wide.ad.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-rip-test.cc ns-3.43/src/internet/test/ipv4-rip-test.cc
--- ns-3.42/src/internet/test/ipv4-rip-test.cc	2024-05-29 15:29:46.968073100 -0700
+++ ns-3.43/src/internet/test/ipv4-rip-test.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-static-routing-test-suite.cc ns-3.43/src/internet/test/ipv4-static-routing-test-suite.cc
--- ns-3.42/src/internet/test/ipv4-static-routing-test-suite.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv4-static-routing-test-suite.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // End-to-end tests for Ipv4 static routing
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv4-test.cc ns-3.43/src/internet/test/ipv4-test.cc
--- ns-3.42/src/internet/test/ipv4-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv4-test.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  * Author: Faker Moatamri <faker.moatamri@sophia.inria.fr>
  *
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-address-duplication-test.cc ns-3.43/src/internet/test/ipv6-address-duplication-test.cc
--- ns-3.42/src/internet/test/ipv6-address-duplication-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-address-duplication-test.cc	2024-10-09 16:41:09.892655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-address-generator-test-suite.cc ns-3.43/src/internet/test/ipv6-address-generator-test-suite.cc
--- ns-3.42/src/internet/test/ipv6-address-generator-test-suite.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-address-generator-test-suite.cc	2024-10-09 16:41:09.896656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 University of Washington
  * Copyright (c) 2011 Atishay Jain
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/ipv6-address-generator.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-address-helper-test-suite.cc ns-3.43/src/internet/test/ipv6-address-helper-test-suite.cc
--- ns-3.42/src/internet/test/ipv6-address-helper-test-suite.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-address-helper-test-suite.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/internet-stack-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-dual-stack-test-suite.cc ns-3.43/src/internet/test/ipv6-dual-stack-test-suite.cc
--- ns-3.42/src/internet/test/ipv6-dual-stack-test-suite.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-dual-stack-test-suite.cc	2024-10-09 16:41:09.896656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 Georgia Tech Research Corporation
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Ken Renard <kenneth.d.renard.ctr@mail.mil>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-extension-header-test-suite.cc ns-3.43/src/internet/test/ipv6-extension-header-test-suite.cc
--- ns-3.42/src/internet/test/ipv6-extension-header-test-suite.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-extension-header-test-suite.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Fabian Mauchle <fabian.mauchle@hsr.ch>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-forwarding-test.cc ns-3.43/src/internet/test/ipv6-forwarding-test.cc
--- ns-3.42/src/internet/test/ipv6-forwarding-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-forwarding-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-fragmentation-test.cc ns-3.43/src/internet/test/ipv6-fragmentation-test.cc
--- ns-3.42/src/internet/test/ipv6-fragmentation-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-fragmentation-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-list-routing-test-suite.cc ns-3.43/src/internet/test/ipv6-list-routing-test-suite.cc
--- ns-3.42/src/internet/test/ipv6-list-routing-test-suite.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-list-routing-test-suite.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-packet-info-tag-test-suite.cc ns-3.43/src/internet/test/ipv6-packet-info-tag-test-suite.cc
--- ns-3.42/src/internet/test/ipv6-packet-info-tag-test-suite.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-packet-info-tag-test-suite.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Hajime Tazaki <tazaki@sfc.wide.ad.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-raw-test.cc ns-3.43/src/internet/test/ipv6-raw-test.cc
--- ns-3.42/src/internet/test/ipv6-raw-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-raw-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hajime Tazaki <tazaki@sfc.wide.ad.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-ripng-test.cc ns-3.43/src/internet/test/ipv6-ripng-test.cc
--- ns-3.42/src/internet/test/ipv6-ripng-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-ripng-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/ipv6-test.cc ns-3.43/src/internet/test/ipv6-test.cc
--- ns-3.42/src/internet/test/ipv6-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/ipv6-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  *         Faker Moatamri <faker.moatamri@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/neighbor-cache-test.cc ns-3.43/src/internet/test/neighbor-cache-test.cc
--- ns-3.42/src/internet/test/neighbor-cache-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/neighbor-cache-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 ZHIHENG DONG
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Zhiheng Dong <dzh2077@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/rtt-test.cc ns-3.43/src/internet/test/rtt-test.cc
--- ns-3.42/src/internet/test/rtt-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/rtt-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-advertised-window-test.cc ns-3.43/src/internet/test/tcp-advertised-window-test.cc
--- ns-3.42/src/internet/test/tcp-advertised-window-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-advertised-window-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Christoph Doepmann <doepmanc@informatik.hu-berlin.de>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-error-model.h"
@@ -303,7 +292,8 @@
     Ptr<ErrorModel> CreateReceiverErrorModel() override;
 
   private:
-    /** \brief Callback called for the update of the awnd
+    /**
+     * \brief Callback called for the update of the awnd
      * \param oldAwnd Old advertised window
      * \param newAwnd new value
      */
@@ -389,7 +379,8 @@
     Ptr<ErrorModel> CreateReceiverErrorModel() override;
 
   private:
-    /** \brief Callback called for the update of the awnd
+    /**
+     * \brief Callback called for the update of the awnd
      * \param oldAwnd Old advertised window
      * \param newAwnd new value
      */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-bbr-test.cc ns-3.43/src/internet/test/tcp-bbr-test.cc
--- ns-3.42/src/internet/test/tcp-bbr-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-bbr-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Vivek Jain <jain.vivek.anand@gmail.com>
  *          Viyom Mittal <viyommittal@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-bic-test.cc ns-3.43/src/internet/test/tcp-bic-test.cc
--- ns-3.42/src/internet/test/tcp-bic-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-bic-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello, <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-bytes-in-flight-test.cc ns-3.43/src/internet/test/tcp-bytes-in-flight-test.cc
--- ns-3.42/src/internet/test/tcp-bytes-in-flight-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-bytes-in-flight-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-classic-recovery-test.cc ns-3.43/src/internet/test/tcp-classic-recovery-test.cc
--- ns-3.42/src/internet/test/tcp-classic-recovery-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-classic-recovery-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Viyom Mittal <viyommittal@gmail.com>
  *         Vivek Jain <jain.vivek.anand@gmail.com>
@@ -101,7 +90,7 @@
 
     uint32_t cWndInflPrevious = m_state->m_cWndInfl;
     uint32_t cWndPrevious = m_state->m_cWnd;
-    recovery->DoRecovery(m_state, 500);
+    recovery->DoRecovery(m_state, 500, false);
     NS_TEST_ASSERT_MSG_EQ(
         m_state->m_cWndInfl,
         (cWndInflPrevious + m_state->m_segmentSize),
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-close-test.cc ns-3.43/src/internet/test/tcp-close-test.cc
--- ns-3.42/src/internet/test/tcp-close-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-close-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-cong-avoid-test.cc ns-3.43/src/internet/test/tcp-cong-avoid-test.cc
--- ns-3.42/src/internet/test/tcp-cong-avoid-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-cong-avoid-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-general-test.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-datasentcb-test.cc ns-3.43/src/internet/test/tcp-datasentcb-test.cc
--- ns-3.42/src/internet/test/tcp-datasentcb-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-datasentcb-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-dctcp-test.cc ns-3.43/src/internet/test/tcp-dctcp-test.cc
--- ns-3.42/src/internet/test/tcp-dctcp-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-dctcp-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Shravya K.S. <shravya.ks0@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-ecn-test.cc ns-3.43/src/internet/test/tcp-ecn-test.cc
--- ns-3.42/src/internet/test/tcp-ecn-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-ecn-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Shravya Ks <shravya.ks0@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-endpoint-bug2211.cc ns-3.43/src/internet/test/tcp-endpoint-bug2211.cc
--- ns-3.42/src/internet/test/tcp-endpoint-bug2211.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-endpoint-bug2211.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Alexander Krotov <ilabdsf@yandex.ru>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-error-model.cc ns-3.43/src/internet/test/tcp-error-model.cc
--- ns-3.42/src/internet/test/tcp-error-model.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-error-model.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-error-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-error-model.h ns-3.43/src/internet/test/tcp-error-model.h
--- ns-3.42/src/internet/test/tcp-error-model.h	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-error-model.h	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef TCPERRORCHANNEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-fast-retr-test.cc ns-3.43/src/internet/test/tcp-fast-retr-test.cc
--- ns-3.42/src/internet/test/tcp-fast-retr-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-fast-retr-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-error-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-general-test.cc ns-3.43/src/internet/test/tcp-general-test.cc
--- ns-3.42/src/internet/test/tcp-general-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-general-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #define __STDC_LIMIT_MACROS
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-general-test.h ns-3.43/src/internet/test/tcp-general-test.h
--- ns-3.42/src/internet/test/tcp-general-test.h	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-general-test.h	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef TCPGENERALTEST_H
@@ -759,7 +748,7 @@
     }
 
     /**
-     *  \brief Slow start threshold changes
+     * \brief Slow start threshold changes
      *
      * This applies only for sender socket.
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-header-test.cc ns-3.43/src/internet/test/tcp-header-test.cc
--- ns-3.42/src/internet/test/tcp-header-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-header-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-highspeed-test.cc ns-3.43/src/internet/test/tcp-highspeed-test.cc
--- ns-3.42/src/internet/test/tcp-highspeed-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-highspeed-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello, <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-htcp-test.cc ns-3.43/src/internet/test/tcp-htcp-test.cc
--- ns-3.42/src/internet/test/tcp-htcp-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-htcp-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Amir Modarresi <amodarresi@ittc.ku.edu>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-hybla-test.cc ns-3.43/src/internet/test/tcp-hybla-test.cc
--- ns-3.42/src/internet/test/tcp-hybla-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-hybla-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello, <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-illinois-test.cc ns-3.43/src/internet/test/tcp-illinois-test.cc
--- ns-3.42/src/internet/test/tcp-illinois-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-illinois-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-ledbat-test.cc ns-3.43/src/internet/test/tcp-ledbat-test.cc
--- ns-3.42/src/internet/test/tcp-ledbat-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-ledbat-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Ankit Deepak <adadeepak8@gmail.com>
  *
@@ -60,7 +49,8 @@
 
   private:
     void DoRun() override;
-    /** \brief Execute the test
+    /**
+     * \brief Execute the test
      */
     void ExecuteTest();
 
@@ -160,7 +150,8 @@
 
   private:
     void DoRun() override;
-    /** \brief Execute the test
+    /**
+     * \brief Execute the test
      */
     void ExecuteTest();
 
@@ -261,7 +252,8 @@
 
   private:
     void DoRun() override;
-    /** \brief Execute the test
+    /**
+     * \brief Execute the test
      */
     void ExecuteTest();
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-linux-reno-test.cc ns-3.43/src/internet/test/tcp-linux-reno-test.cc
--- ns-3.42/src/internet/test/tcp-linux-reno-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-linux-reno-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Apoorva Bhargava <apoorvabhargava13@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-general-test.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-loss-test.cc ns-3.43/src/internet/test/tcp-loss-test.cc
--- ns-3.42/src/internet/test/tcp-loss-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-loss-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Tom Henderson
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "tcp-general-test.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-lp-test.cc ns-3.43/src/internet/test/tcp-lp-test.cc
--- ns-3.42/src/internet/test/tcp-lp-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-lp-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Charitha Sangaraju <charitha29193@gmail.com>
  *          Nandita G <gm.nandita@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-option-test.cc ns-3.43/src/internet/test/tcp-option-test.cc
--- ns-3.42/src/internet/test/tcp-option-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-option-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-pacing-test.cc ns-3.43/src/internet/test/tcp-pacing-test.cc
--- ns-3.42/src/internet/test/tcp-pacing-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-pacing-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Deepak Kumaraswamy <deepakkavoor99@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-pkts-acked-test.cc ns-3.43/src/internet/test/tcp-pkts-acked-test.cc
--- ns-3.42/src/internet/test/tcp-pkts-acked-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-pkts-acked-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-prr-recovery-test.cc ns-3.43/src/internet/test/tcp-prr-recovery-test.cc
--- ns-3.42/src/internet/test/tcp-prr-recovery-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-prr-recovery-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Viyom Mittal <viyommittal@gmail.com>
  *         Vivek Jain <jain.vivek.anand@gmail.com>
@@ -47,7 +36,6 @@
      * \param bytesInFlight Current bytes in flight.
      * \param m_deliveredBytes Bytes SACKed on last acknowledgment.
      * \param bytesSent Bytes sent while in recovery phase.
-     * \param reductionBound Type of reduction bound to be used.
      * \param name Test description.
      */
     PrrRecoveryTest(uint32_t cWnd,
@@ -57,20 +45,18 @@
                     uint32_t bytesInFlight,
                     uint32_t m_deliveredBytes,
                     uint32_t bytesSent,
-                    const std::string& reductionBound,
                     const std::string& name);
 
   private:
     void DoRun() override;
 
-    uint32_t m_cWnd;                    //!< Congestion window.
-    uint32_t m_segmentSize;             //!< Segment size.
-    uint32_t m_ssThresh;                //!< Slow Start Threshold.
-    uint32_t m_unAckDataCount;          //!< Unacknowledged data at the start of recovery.
-    uint32_t m_bytesInFlight;           //!< Current bytes in flight.
-    uint32_t m_deliveredBytes;          //!< Bytes SACKed on last acknowledgment.
-    uint32_t m_bytesSent;               //!< Bytes sent while in recovery phase.
-    const std::string m_reductionBound; //!< Type of reduction bound to be used.
+    uint32_t m_cWnd;           //!< Congestion window.
+    uint32_t m_segmentSize;    //!< Segment size.
+    uint32_t m_ssThresh;       //!< Slow Start Threshold.
+    uint32_t m_unAckDataCount; //!< Unacknowledged data at the start of recovery.
+    uint32_t m_bytesInFlight;  //!< Current bytes in flight.
+    uint32_t m_deliveredBytes; //!< Bytes SACKed on last acknowledgment.
+    uint32_t m_bytesSent;      //!< Bytes sent while in recovery phase.
 
     Ptr<TcpSocketState> m_state; //!< TCP socket state.
 };
@@ -82,7 +68,6 @@
                                  uint32_t bytesInFlight,
                                  uint32_t deliveredBytes,
                                  uint32_t bytesSent,
-                                 const std::string& reductionBound,
                                  const std::string& name)
     : TestCase(name),
       m_cWnd(cWnd),
@@ -91,8 +76,7 @@
       m_unAckDataCount(unAckDataCount),
       m_bytesInFlight(bytesInFlight),
       m_deliveredBytes(deliveredBytes),
-      m_bytesSent(bytesSent),
-      m_reductionBound(reductionBound)
+      m_bytesSent(bytesSent)
 {
 }
 
@@ -108,7 +92,6 @@
     m_state->m_bytesInFlight = m_bytesInFlight;
 
     Ptr<TcpPrrRecovery> recovery = CreateObject<TcpPrrRecovery>();
-    recovery->SetAttribute("ReductionBound", StringValue(m_reductionBound));
 
     recovery->EnterRecovery(m_state, 3, m_unAckDataCount, 0);
 
@@ -125,7 +108,7 @@
     m_bytesInFlight += m_state->m_cWnd.Get() - m_cWnd;
     m_state->m_bytesInFlight = m_bytesInFlight;
     m_cWnd = m_state->m_cWnd.Get();
-    recovery->DoRecovery(m_state, m_deliveredBytes);
+    recovery->DoRecovery(m_state, m_deliveredBytes, false);
 
     if (m_bytesInFlight > m_state->m_ssThresh)
     {
@@ -162,7 +145,6 @@
                         3000,
                         500,
                         1000,
-                        "SSRB",
                         "Prr test on cWnd when bytesInFlight is greater than ssThresh with SSRB"),
                     TestCase::Duration::QUICK);
         AddTestCase(new PrrRecoveryTest(
@@ -173,7 +155,6 @@
                         1000,
                         500,
                         1000,
-                        "SSRB",
                         "Prr test on cWnd when bytesInFlight is lower than ssThresh with SSRB"),
                     TestCase::Duration::QUICK);
         AddTestCase(new PrrRecoveryTest(
@@ -184,7 +165,6 @@
                         3000,
                         500,
                         1000,
-                        "CRB",
                         "Prr test on cWnd when bytesInFlight is greater than ssThresh with CRB"),
                     TestCase::Duration::QUICK);
         AddTestCase(new PrrRecoveryTest(
@@ -195,7 +175,6 @@
                         1000,
                         500,
                         1000,
-                        "CRB",
                         "Prr test on cWnd when bytesInFlight is lower than ssThresh with CRB"),
                     TestCase::Duration::QUICK);
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-rate-ops-test.cc ns-3.43/src/internet/test/tcp-rate-ops-test.cc
--- ns-3.42/src/internet/test/tcp-rate-ops-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-rate-ops-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Vivek Jain <jain.vivek.anand@gmail.com>
  *          Viyom Mittal <viyommittal@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-rto-test.cc ns-3.43/src/internet/test/tcp-rto-test.cc
--- ns-3.42/src/internet/test/tcp-rto-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-rto-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-rtt-estimation.cc ns-3.43/src/internet/test/tcp-rtt-estimation.cc
--- ns-3.42/src/internet/test/tcp-rtt-estimation.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-rtt-estimation.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-rx-buffer-test.cc ns-3.43/src/internet/test/tcp-rx-buffer-test.cc
--- ns-3.42/src/internet/test/tcp-rx-buffer-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-rx-buffer-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-sack-permitted-test.cc ns-3.43/src/internet/test/tcp-sack-permitted-test.cc
--- ns-3.42/src/internet/test/tcp-sack-permitted-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-sack-permitted-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -198,7 +187,7 @@
 
 /**
  * \ingroup internet-test
- *  \ingroup tests
+ * \ingroup tests
  *
  * The test case for testing the TCP SACK PERMITTED option.
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-scalable-test.cc ns-3.43/src/internet/test/tcp-scalable-test.cc
--- ns-3.42/src/internet/test/tcp-scalable-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-scalable-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-slow-start-test.cc ns-3.43/src/internet/test/tcp-slow-start-test.cc
--- ns-3.42/src/internet/test/tcp-slow-start-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-slow-start-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "tcp-general-test.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-syn-connection-failed-test.cc ns-3.43/src/internet/test/tcp-syn-connection-failed-test.cc
--- ns-3.42/src/internet/test/tcp-syn-connection-failed-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-syn-connection-failed-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Alexander Krotov <krotov@iitp.ru>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-test.cc ns-3.43/src/internet/test/tcp-test.cc
--- ns-3.42/src/internet/test/tcp-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 Georgia Tech Research Corporation
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Raj Bhattacharjea <raj.b@gatech.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-timestamp-test.cc ns-3.43/src/internet/test/tcp-timestamp-test.cc
--- ns-3.42/src/internet/test/tcp-timestamp-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-timestamp-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-tx-buffer-test.cc ns-3.43/src/internet/test/tcp-tx-buffer-test.cc
--- ns-3.42/src/internet/test/tcp-tx-buffer-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-tx-buffer-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-vegas-test.cc ns-3.43/src/internet/test/tcp-vegas-test.cc
--- ns-3.42/src/internet/test/tcp-vegas-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-vegas-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-veno-test.cc ns-3.43/src/internet/test/tcp-veno-test.cc
--- ns-3.42/src/internet/test/tcp-veno-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-veno-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-wscaling-test.cc ns-3.43/src/internet/test/tcp-wscaling-test.cc
--- ns-3.42/src/internet/test/tcp-wscaling-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-wscaling-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-yeah-test.cc ns-3.43/src/internet/test/tcp-yeah-test.cc
--- ns-3.42/src/internet/test/tcp-yeah-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-yeah-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N. Nguyen <annguyen@ittc.ku.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/tcp-zero-window-test.cc ns-3.43/src/internet/test/tcp-zero-window-test.cc
--- ns-3.42/src/internet/test/tcp-zero-window-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/tcp-zero-window-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet/test/udp-test.cc ns-3.43/src/internet/test/udp-test.cc
--- ns-3.42/src/internet/test/udp-test.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/internet/test/udp-test.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Raj Bhattacharjea <raj.b@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/doc/internet-apps.h ns-3.43/src/internet-apps/doc/internet-apps.h
--- ns-3.42/src/internet-apps/doc/internet-apps.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/doc/internet-apps.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,33 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- */
-
-/*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef INTERNET_APPS_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/examples/dhcp-example.cc ns-3.43/src/internet-apps/examples/dhcp-example.cc
--- ns-3.42/src/internet-apps/examples/dhcp-example.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/examples/dhcp-example.cc	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 UPB
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Radu Lupu <rlupu@elcom.pub.ro>
  *         Ankit Deepak <adadeepak8@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/examples/ping-example.cc ns-3.43/src/internet-apps/examples/ping-example.cc
--- ns-3.42/src/internet-apps/examples/ping-example.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/examples/ping-example.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Chandrakant Jena
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Chandrakant Jena <chandrakant.barcelona@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/examples/traceroute-example.cc ns-3.43/src/internet-apps/examples/traceroute-example.cc
--- ns-3.42/src/internet-apps/examples/traceroute-example.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/examples/traceroute-example.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/helper/dhcp-helper.cc ns-3.43/src/internet-apps/helper/dhcp-helper.cc
--- ns-3.42/src/internet-apps/helper/dhcp-helper.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/helper/dhcp-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 UPB
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Radu Lupu <rlupu@elcom.pub.ro>
  *         Ankit Deepak <adadeepak8@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/helper/dhcp-helper.h ns-3.43/src/internet-apps/helper/dhcp-helper.h
--- ns-3.42/src/internet-apps/helper/dhcp-helper.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/helper/dhcp-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 UPB
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Radu Lupu <rlupu@elcom.pub.ro>
  *         Ankit Deepak <adadeepak8@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/helper/ping-helper.cc ns-3.43/src/internet-apps/helper/ping-helper.cc
--- ns-3.42/src/internet-apps/helper/ping-helper.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/helper/ping-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2008-2009 Strasbourg University (original Ping6 helper)
  * Copyright (c) 2008 INRIA (original v4Ping helper)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/helper/ping-helper.h ns-3.43/src/internet-apps/helper/ping-helper.h
--- ns-3.42/src/internet-apps/helper/ping-helper.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/helper/ping-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2008-2009 Strasbourg University (original Ping6 helper)
  * Copyright (c) 2008 INRIA (original v4Ping helper)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/helper/radvd-helper.cc ns-3.43/src/internet-apps/helper/radvd-helper.cc
--- ns-3.42/src/internet-apps/helper/radvd-helper.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/helper/radvd-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/helper/radvd-helper.h ns-3.43/src/internet-apps/helper/radvd-helper.h
--- ns-3.42/src/internet-apps/helper/radvd-helper.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/helper/radvd-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/helper/v4traceroute-helper.cc ns-3.43/src/internet-apps/helper/v4traceroute-helper.cc
--- ns-3.42/src/internet-apps/helper/v4traceroute-helper.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/helper/v4traceroute-helper.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *
  * Author: Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/helper/v4traceroute-helper.h ns-3.43/src/internet-apps/helper/v4traceroute-helper.h
--- ns-3.42/src/internet-apps/helper/v4traceroute-helper.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/helper/v4traceroute-helper.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *
  *  Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/dhcp-client.cc ns-3.43/src/internet-apps/model/dhcp-client.cc
--- ns-3.42/src/internet-apps/model/dhcp-client.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/dhcp-client.cc	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 UPB
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Radu Lupu <rlupu@elcom.pub.ro>
  *         Ankit Deepak <adadeepak8@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/dhcp-client.h ns-3.43/src/internet-apps/model/dhcp-client.h
--- ns-3.42/src/internet-apps/model/dhcp-client.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/dhcp-client.h	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 UPB
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Radu Lupu <rlupu@elcom.pub.ro>
  *         Ankit Deepak <adadeepak8@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/dhcp-header.cc ns-3.43/src/internet-apps/model/dhcp-header.cc
--- ns-3.42/src/internet-apps/model/dhcp-header.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/dhcp-header.cc	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 UPB
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Radu Lupu <rlupu@elcom.pub.ro>
  *         Ankit Deepak <adadeepak8@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/dhcp-header.h ns-3.43/src/internet-apps/model/dhcp-header.h
--- ns-3.42/src/internet-apps/model/dhcp-header.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/dhcp-header.h	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 UPB
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Radu Lupu <rlupu@elcom.pub.ro>
  *         Ankit Deepak <adadeepak8@gmail.com>
@@ -41,13 +30,13 @@
  * \ingroup dhcp
  *
  * \class DhcpHeader
- * \brief BOOTP header with DHCP messages supports the following options:
+ * \brief BOOTP header with DHCP messages.  This supports the following options:
  *        Subnet Mask (1), Address Request (50), Refresh Lease Time (51),
  *        DHCP Message Type (53), DHCP Server ID (54), Renew Time (58),
  *        Rebind Time (59) and End (255) of BOOTP
-
-  \verbatim
-    0                   1                   2                   3
+ *
+ * \verbatim
+   0                   1                   2                   3
    0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |     op (1)    |   htype (1)   |   hlen (1)    |   hops (1)    |
@@ -78,8 +67,7 @@
    |                                                               |
    |                          options (variable)                   |
    +---------------------------------------------------------------+
-  \endverbatim
-
+   \endverbatim
  */
 class DhcpHeader : public Header
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/dhcp-server.cc ns-3.43/src/internet-apps/model/dhcp-server.cc
--- ns-3.42/src/internet-apps/model/dhcp-server.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/dhcp-server.cc	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 UPB
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Radu Lupu <rlupu@elcom.pub.ro>
  *         Ankit Deepak <adadeepak8@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/dhcp-server.h ns-3.43/src/internet-apps/model/dhcp-server.h
--- ns-3.42/src/internet-apps/model/dhcp-server.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/dhcp-server.h	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 UPB
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Radu Lupu <rlupu@elcom.pub.ro>
  *         Ankit Deepak <adadeepak8@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/ping.cc ns-3.43/src/internet-apps/model/ping.cc
--- ns-3.42/src/internet-apps/model/ping.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/ping.cc	2024-10-09 16:41:09.876655800 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2007-2009 Strasbourg University (original Ping6 code)
  * Copyright (c) 2008 INRIA (original Ping code)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Chandrakant Jena <chandrakant.barcelona@gmail.com>
  *         Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/ping.h ns-3.43/src/internet-apps/model/ping.h
--- ns-3.42/src/internet-apps/model/ping.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/ping.h	2024-10-09 16:41:09.876655800 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2007-2009 Strasbourg University (original Ping6 code)
  * Copyright (c) 2008 INRIA (original v4Ping code)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Chandrakant Jena <chandrakant.barcelona@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/radvd.cc ns-3.43/src/internet-apps/model/radvd.cc
--- ns-3.42/src/internet-apps/model/radvd.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/radvd.cc	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 Telecom Bretagne
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  *         Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/radvd.h ns-3.43/src/internet-apps/model/radvd.h
--- ns-3.42/src/internet-apps/model/radvd.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/radvd.h	2024-10-09 16:41:09.876655800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 Telecom Bretagne
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  *         Mehdi Benamor <benamor.mehdi@ensi.rnu.tn>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/radvd-interface.cc ns-3.43/src/internet-apps/model/radvd-interface.cc
--- ns-3.42/src/internet-apps/model/radvd-interface.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/radvd-interface.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/radvd-interface.h ns-3.43/src/internet-apps/model/radvd-interface.h
--- ns-3.42/src/internet-apps/model/radvd-interface.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/radvd-interface.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/radvd-prefix.cc ns-3.43/src/internet-apps/model/radvd-prefix.cc
--- ns-3.42/src/internet-apps/model/radvd-prefix.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/radvd-prefix.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/radvd-prefix.h ns-3.43/src/internet-apps/model/radvd-prefix.h
--- ns-3.42/src/internet-apps/model/radvd-prefix.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/radvd-prefix.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Strasbourg University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/v4traceroute.cc ns-3.43/src/internet-apps/model/v4traceroute.cc
--- ns-3.42/src/internet-apps/model/v4traceroute.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/v4traceroute.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/model/v4traceroute.h ns-3.43/src/internet-apps/model/v4traceroute.h
--- ns-3.42/src/internet-apps/model/v4traceroute.h	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/model/v4traceroute.h	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/test/dhcp-test.cc ns-3.43/src/internet-apps/test/dhcp-test.cc
--- ns-3.42/src/internet-apps/test/dhcp-test.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/test/dhcp-test.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Ankit Deepak <adadeepak8@gmail.com>
  *          Deepti Rajagopal <deeptir96@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/test/ipv6-radvd-test.cc ns-3.43/src/internet-apps/test/ipv6-radvd-test.cc
--- ns-3.42/src/internet-apps/test/ipv6-radvd-test.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/test/ipv6-radvd-test.cc	2024-10-09 16:41:09.876655800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/internet-apps/test/ping-test.cc ns-3.43/src/internet-apps/test/ping-test.cc
--- ns-3.42/src/internet-apps/test/ping-test.cc	2024-05-29 15:29:46.952073000 -0700
+++ ns-3.43/src/internet-apps/test/ping-test.cc	2024-10-09 16:41:09.880655800 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2022 Universita' di Firenze, Italy
  * Copyright (c) 2022 Tom Henderson
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Chandrakant Jena <chandrakant.barcelona@gmail.com>
  *          Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/doc/lr-wpan.rst ns-3.43/src/lr-wpan/doc/lr-wpan.rst
--- ns-3.42/src/lr-wpan/doc/lr-wpan.rst	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/doc/lr-wpan.rst	2024-10-09 16:41:09.896656000 -0700
@@ -5,18 +5,14 @@
 PageBreak
 
 Low-Rate Wireless Personal Area Network (LR-WPAN)
--------------------------------------------------
+=================================================
 
 This chapter describes the implementation of |ns3| models for the
 low-rate, wireless personal area network (LR-WPAN) as specified by
-IEEE standard 802.15.4 (2003,2006,2011).
+IEEE standard 802.15.4 (2003,2006,2011). Both beacon and non-beacon modes are
+supported. Bootstrap (scan and association) is also supported.
 
-Model Description
-*****************
-
-
-Design
-======
+The model is implemented into the ``src/lrwpan/`` folder.
 
 The model design closely follows the standard from an architectural standpoint.
 
@@ -34,9 +30,6 @@
 The implementation also borrows some ideas from the ns-2 models developed by
 Zheng and Lee.
 
-APIs
-####
-
 The APIs closely follow the standard, adapted for |ns3| naming conventions
 and idioms.  The APIs are organized around the concept of service primitives
 as shown in the following figure adapted from Figure 14 of
@@ -48,7 +41,7 @@
 
     Service primitives
 
-The APIs are organized around four conceptual services and service access
+The APIs primitives are organized around four conceptual services and service access
 points (SAP):
 
 * MAC data service (MCPS)
@@ -74,7 +67,7 @@
                     KeyIndex
                    )
 
-This maps to |ns3| classes and methods such as:::
+In |ns3| this maps to classes, structs and methods such as:::
 
   struct McpsDataRequestParameters
   {
@@ -89,103 +82,40 @@
   ...
   }
 
-The primitives currently supported by the |ns3| model are:
-
-MAC Primitives
-++++++++++++++
-
-* MCPS-DATA.Request
-* MCPS-DATA.Confirm
-* MCPS-DATA.Indication
-* MLME-START.Request
-* MLME-START.Confirm
-* MLME-SCAN.Request
-* MLME-SCAN.Confirm
-* MLME-BEACON-NOFIFY.Indication
-* MLME-ASSOCIATE.Request
-* MLME-ASSOCIATE.Confirm
-* MLME-ASSOCIATE.Response
-* MLME-ASSOCIATE.Indication
-* MLME-POLL.Confirm
-* MLME-COMM-STATUS.Indication
-* MLME-SYNC.Request
-* MLME-SYNC-LOSS.Indication
+The MAC primitives currently supported by the |ns3| model are:
 
-
-
-PHY Primitives
-++++++++++++++
-
-* PLME-CCA.Request
-* PLME-CCA.Confirm
-* PD-DATA.Request
-* PD-DATA.Confirm
-* PD-DATA.Indication
-* PLME-SET-TRX-STATE.Request
-* PLME-SET-TRX-STATE.Confirm
+* MCPS-DATA (Request, Confirm, Indication)
+* MLME-START (Request, Confirm)
+* MLME-SCAN (Request, Confirm)
+* MLME-BEACON-NOFIFY (Indication)
+* MLME-ASSOCIATE.Request (Request, Confirm, Response, Indication)
+* MLME-POLL (Confirm)
+* MLME-COMM-STATUS (Indication)
+* MLME-SYNC (Request)
+* MLME-SYNC-LOSS (Indication)
+* MLME-SET (Request, Confirm)
+* MLME-GET (Request, Confirm)
+
+
+The PHY primitives currently supported by the |ns3| model are:
+
+* PLME-CCA (Request, Confirm)
+* PD-DATA (Request, Confirm, Indication)
+* PLME-SET-TRX-STATE (Request, Confirm)
+* PLME-SET (Request, Confirm)
+* PLME-GET (Request, Confirm)
 
 For more information on primitives, See IEEE 802.15.4-2011, Table 8.
 
-MAC
-###
-
-The MAC at present implements both, the unslotted CSMA/CA (non-beacon mode) and
-the slotted CSMA/CA (beacon-enabled mode). The beacon-enabled mode supports only
-direct transmissions. Indirect transmissions and Guaranteed Time Slots (GTS) are
-currently not supported.
-
-The present implementation supports a single PAN coordinator, support for additional
-coordinators is under consideration for future releases.
-
-The implemented MAC is similar to Contiki's NullMAC, i.e., a MAC without sleep
-features. The radio is assumed to be always active (receiving or transmitting),
-of completely shut down. Frame reception is not disabled while performing the
-CCA.
-
-The main API supported is the data transfer API
-(McpsDataRequest/Indication/Confirm).  CSMA/CA according to Stc 802.15.4-2006,
-section 7.5.1.4 is supported. Frame reception and rejection according to
-Std 802.15.4-2006, section 7.5.6.2 is supported, including acknowledgements.
-Only short addressing completely implemented. Various trace sources are
-supported, and trace sources can be hooked to sinks.
-
-The implemented ns-3 MAC supports scanning. Typically, a scanning request is preceded
-by an association request but these can be used independently.
-IEEE 802.15.4 supports 4 types of scanning:
-
-* *Energy Detection (ED) Scan:* In an energy scan, a device or a coordinator scan a set number of channels looking for traces of energy. The maximum energy registered during a given amount of time is stored. Energy scan is typically used to measure the quality of a channel at any given time. For this reason, coordinators often use this scan before initiating a PAN on a channel.
-
-* *Active Scan:* A device sends ``beacon request commands`` on a set number of channels looking for a PAN coordinator. The receiving coordinator must be configured on non-beacon mode. Coordinators on beacon-mode ignore these requests. The coordinators who accept the request, respond with a beacon. After an active scan take place, during the association process devices extract the information in the PAN descriptors from the collected beacons and based on this information (e.g. channel, LQI level), choose a coordinator to associate with.
-
-* *Passive Scan:* In a passive scan, no ``beacon requests commands`` are sent. Devices scan a set number of channels looking for beacons currently being transmitted (coordinators in beacon-mode). Like in the active scan, the information from beacons is stored in PAN descriptors and used by the device to choose a coordinator to associate with.
-
-* *Orphan Scan:* Orphan scan is used typically by device as a result of repeated communication failure attempts with a coordinator. In other words, an orphan scan represents the intent of a device to relocate its coordinator. In some situations, it can be used by devices higher layers to not only rejoin a network but also join a network for the first time. In an orphan scan, a device send a ``orphan notification command`` to a given list of channels. If a coordinator receives this notification, it responds to the device with a ``coordinator realignment command``.
-
-In active and passive scans, the link quality indicator (LQI) is the main parameter used to
-determine the optimal coordinator. LQI values range from 0 to 255. Where 255 is the highest quality link value and 0 the lowest. Typically, a link lower than 127 is considered a link with poor quality.
-
-In LR-WPAN, association is used to join or leave PANs. All devices in LR-WPAN must belong to a PAN to communicate. |ns3| uses a classic association procedure described in the standard. The standard also covers a more effective association procedure known as fast association (See IEEE 802.15.4-2015, fastA) but this association is currently not supported by |ns3|. Alternatively, |ns3| can do a "quick and dirty" association using either ```LrWpanHelper::AssociateToPan``` or ```LrWpanHelper::AssociateToBeaconPan```. These functions are used when a preset association can be done. For example, when the relationships between existing nodes and coordinators are known and can be set before the beginning of the simulation. In other situations, like in many networks in real deployments or in large networks, it is desirable that devices "associate themselves" with the best possible available coordinator candidates. This is a process known as bootstrap, and simulating this process makes it possible to demonstrate the kind of situations a node would face in which large networks to associate in real environment.
-
-Bootstrap (a.k.a. network initialization) is possible with a combination of scan and association MAC primitives. Details on the general process for this network initialization is described in the standard. Bootstrap is a complex process that not only requires the scanning networks, but also the exchange of command frames and the use of a pending transaction list (indirect transmissions) in the coordinator to store command frames. The following summarizes the whole process:
-
-.. _fig-lr-wpan-assocSequence:
-
-.. figure:: figures/lr-wpan-assocSequence.*
-
-Bootstrap as whole depends on procedures that also take place on higher layers of devices and coordinators. These procedures are briefly described in the standard but out of its scope (See IEE 802.15.4-2011 Section 5.1.3.1.). However, these procedures are necessary for a "complete bootstrap" process. In the examples in |ns3|, these high layer procedures are only briefly implemented to demonstrate a complete example that shows the use of scan and association. A full high layer (e.g. such as those found in Zigbee and Thread protocol stacks) should complete these procedures more robustly.
-
-MAC queues
-++++++++++
-
-By default, ``Tx queue`` and ``Ind Tx queue`` (the pending transaction list) are not limited but they can configure to drop packets after they
-reach a limit of elements (transaction overflow). Additionally, the ``Ind Tx queue`` drop packets when the packet has been longer than
-``macTransactionPersistenceTime`` (transaction expiration). Expiration of packets in the Tx queue is not supported.
-Finally, packets in the ``Tx queue`` may be dropped due to excessive transmission retries or channel access failure.
+Although it is expected that other technology profiles (such as
+6LoWPAN and ZigBee) will write their own NetDevice classes, a basic
+LrWpanNetDevice is provided, which encapsulates the common operations
+of creating a generic LrWpan device and hooking things together.
 
-PHY
-###
+The PHY layer
+-------------
 
-The physical layer components consist of a Phy model, an error rate model,
+The physical layer components consist of a PHY model, an error rate model,
 and a loss model. The PHY state transitions are roughly model after
 ATMEL's AT86RF233.
 
@@ -232,7 +162,7 @@
                               | <--------------------------------------->|
                                     Acceptable sensitivity range
 
-The example ``lr-wpan-per-plot.cc` shows that at given Rx sensitivity, packets are dropped regardless of their theoretical error probability.
+The example ``lr-wpan-per-plot.cc`` shows that at given Rx sensitivity, packets are dropped regardless of their theoretical error probability.
 This program outputs a file named ``802.15.4-per-vs-rxSignal.plt``.
 Loading this file into gnuplot yields a file ``802.15.4-per-vs-rsSignal.eps``, which can
 be converted to pdf or other formats. Packet payload size, Tx power and Rx sensitivity can be configured.
@@ -244,17 +174,80 @@
 
     Default output of the program ``lr-wpan-per-plot.cc``
 
+The MAC layer
+-------------
+
+The MAC at present implements both, the unslotted CSMA/CA (non-beacon mode) and
+the slotted CSMA/CA (beacon-enabled mode). The beacon-enabled mode supports only
+direct transmissions. Indirect transmissions and Guaranteed Time Slots (GTS) are
+currently not supported.
+
+The present implementation supports a single PAN coordinator, support for additional
+coordinators is under consideration for future releases.
+
+The implemented MAC is similar to Contiki's NullMAC, i.e., a MAC without sleep
+features. The radio is assumed to be always active (receiving or transmitting),
+of completely shut down. Frame reception is not disabled while performing the
+CCA.
 
-NetDevice
-#########
+The main API supported is the data transfer API
+(McpsDataRequest/Indication/Confirm).  CSMA/CA according to Stc 802.15.4-2006,
+section 7.5.1.4 is supported. Frame reception and rejection according to
+Std 802.15.4-2006, section 7.5.6.2 is supported, including acknowledgements.
+Both short and extended addressing are supported. Various trace sources are
+supported, and trace sources can be hooked to sinks.
 
-Although it is expected that other technology profiles (such as
-6LoWPAN and ZigBee) will write their own NetDevice classes, a basic
-LrWpanNetDevice is provided, which encapsulates the common operations
-of creating a generic LrWpan device and hooking things together.
+Scan and Association
+~~~~~~~~~~~~~~~~~~~~
+
+The implemented |ns3| MAC layer supports scanning. Typically, a scanning request is preceded
+by an association request but these can be used independently.
+|ns3| IEEE 802.15.4 MAC layer supports 4 types of scanning:
+
+* *Energy Detection (ED) Scan:* In an energy scan, a device or a coordinator scan a set number of channels looking for traces of energy. The maximum energy registered during a given amount of time is stored. Energy scan is typically used to measure the quality of a channel at any given time. For this reason, coordinators often use this scan before initiating a PAN on a channel.
+
+* *Active Scan:* A device sends ``beacon request commands`` on a set number of channels looking for a PAN coordinator. The receiving coordinator must be configured on non-beacon mode. Coordinators on beacon-mode ignore these requests. The coordinators who accept the request, respond with a beacon. After an active scan take place, during the association process devices extract the information in the PAN descriptors from the collected beacons and based on this information (e.g. channel, LQI level), choose a coordinator to associate with.
+
+* *Passive Scan:* In a passive scan, no ``beacon requests commands`` are sent. Devices scan a set number of channels looking for beacons currently being transmitted (coordinators in beacon-mode). Like in the active scan, the information from beacons is stored in PAN descriptors and used by the device to choose a coordinator to associate with.
+
+* *Orphan Scan:* Orphan scan is used typically by device as a result of repeated communication failure attempts with a coordinator. In other words, an orphan scan represents the intent of a device to relocate its coordinator. In some situations, it can be used by devices higher layers to not only rejoin a network but also join a network for the first time. In an orphan scan, a device send a ``orphan notification command`` to a given list of channels. If a coordinator receives this notification, it responds to the device with a ``coordinator realignment command``.
+
+In active and passive scans, the link quality indicator (LQI) is the main parameter used to
+determine the optimal coordinator. LQI values range from 0 to 255. Where 255 is the highest quality link value and 0 the lowest. Typically, a link lower than 127 is considered a link with poor quality.
+
+In LR-WPAN, association is used to join  PANs. All devices in LR-WPAN must belong to a PAN to communicate. |ns3| uses a classic association procedure described in the standard. The standard also covers a more effective association procedure known as fast association (See IEEE 802.15.4-2015, fastA) but this association is currently not supported by |ns3|. Alternatively, |ns3| can do a "quick and dirty" association using either ```LrWpanHelper::AssociateToPan``` or ```LrWpanHelper::AssociateToBeaconPan```. These functions are used when a preset association can be done. For example, when the relationships between existing nodes and coordinators are known and can be set before the beginning of the simulation. In other situations, like in many networks in real deployments or in large networks, it is desirable that devices "associate themselves" with the best possible available coordinator candidates. This is a process known as bootstrap, and simulating this process makes it possible to demonstrate the kind of situations a node would face in which large networks to associate in real environment.
+
+Bootstrap (a.k.a. network initialization) is possible with a combination of scan and association MAC primitives. Details on the general process for this network initialization is described in the standard. Bootstrap is a complex process that not only requires the scanning networks, but also the exchange of command frames and the use of a pending transaction list (indirect transmissions) in the coordinator to store command frames. The following summarizes the whole process:
+
+.. _fig-lr-wpan-assocSequence:
+
+.. figure:: figures/lr-wpan-assocSequence.*
+
+Bootstrap as whole depends on procedures that also take place on higher layers of devices and coordinators. These procedures are briefly described in the standard but out of its scope (See IEE 802.15.4-2011 Section 5.1.3.1.). However, these procedures are necessary for a "complete bootstrap" process. In the examples in |ns3|, these high layer procedures are only briefly implemented to demonstrate a complete example that shows the use of scan and association. A full high layer (e.g. such as those found in Zigbee and Thread protocol stacks) should complete these procedures more robustly.
+Examples such as  ``lr-wpan-bootstrap.cc`` demonstrate the whole bootstrap process (including scanning and association) while doing some place holder of procedures that take place in higher layers which are not part of standard focus.
+
+A key element to remember is that bootstrap have 2 key objectives:
+
+1- Enable devices to join a new formed network (associate).
+2- Assign short addresses and PAN ID.
+
+Devices that have the short address ``FF:FF`` are not associated an cannot participate in any unicast communication in the network.
+Devices that have the short address ``FF:FE`` and have a valid PAN ID can communicate with other devices in the network using the
+extended address mode. In this mode, devices will use its 64 bit address (A.K.A. extended address) to communicate in the network.
+
+A fixed association is possible in |ns3| without the use of the bootstrap process. For this purpose, the ``LrWpanHelper::CreateAssociatedPan``
+is used.
+
+MAC transmission Queues
+~~~~~~~~~~~~~~~~~~~~~~~
+
+By default, ``Tx queue`` and ``Ind Tx queue`` (the pending transaction list) are not limited but they can configure to drop packets after they
+reach a limit of elements (transaction overflow). Additionally, the ``Ind Tx queue`` drop packets when the packet has been longer than
+``macTransactionPersistenceTime`` (transaction expiration). Expiration of packets in the Tx queue is not supported.
+Finally, packets in the ``Tx queue`` may be dropped due to excessive transmission retries or channel access failure.
 
 MAC addresses
-+++++++++++++
+~~~~~~~~~~~~~
 
 Contrary to other technologies, a IEEE 802.15.4 has 2 different kind of addresses:
 
@@ -306,54 +299,53 @@
 in the ``sixlowpan`` module documentation.
 
 
-Scope and Limitations
-=====================
+Usage
+-----
 
-Future versions of this document will contain a PICS proforma similar to
-Appendix D of IEEE 802.15.4-2006. The current emphasis is on direct transmissions
-running on both, slotted and unslotted mode (CSMA/CA) of 802.15.4 operation for use in Zigbee.
 
-- Indirect data transmissions are not supported but planned for a future update.
-- Devices are capable of associating with a single PAN coordinator. Interference is modeled as AWGN but this is currently not thoroughly tested.
-- The standard describes the support of multiple PHY band-modulations but currently, only 250kbps O-QPSK (channel page 0) is supported.
-- Active and passive MAC scans are able to obtain a LQI value from a beacon frame, however, the scan primitives assumes LQI is correctly implemented and does not check the validity of its value.
-- Configuration of the ED thresholds are currently not supported.
-- Coordinator realignment command is only supported in orphan scans.
-- Disassociation primitives are not supported.
-- Security is not supported.
-- Beacon enabled mode GTS are not supported.
+Helpers
+~~~~~~~
 
-References
-==========
+The helper is patterned after other device helpers.  In particular,
+tracing (ascii and pcap) is enabled similarly, and enabling of all
+lr-wpan log components is performed similarly.  Use of the helper
+is exemplified in many of the examples found in ``src\lrwpan\examples``.
 
-* Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks (WPANs), IEEE Computer Society, IEEE Std 802.15.4-2006, 8 September 2006.
-* IEEE Standard for Local and metropolitan area networks--Part 15.4: Low-Rate Wireless Personal Area Networks (LR-WPANs)," in IEEE Std 802.15.4-2011 (Revision of IEEE Std 802.15.4-2006) , vol., no., pp.1-314, 5 Sept. 2011, doi: 10.1109/IEEESTD.2011.6012487.
-* J. Zheng and Myung J. Lee, "A comprehensive performance study of IEEE 802.15.4," Sensor Network Operations, IEEE Press, Wiley Interscience, Chapter 4, pp. 218-237, 2006.
-* Alberto Gallegos Ramonet and Taku Noguchi. 2020. LR-WPAN: Beacon Enabled Direct Transmissions on Ns-3. In 2020 the 6th International Conference on Communication and Information Processing (ICCIP 2020). Association for Computing Machinery, New York, NY, USA, 115–122. https://doi.org/10.1145/3442555.3442574.
-* Gallegos Ramonet, A.; Noguchi, T. Performance Analysis of IEEE 802.15.4 Bootstrap Process. Electronics 2022, 11, 4090. https://doi.org/10.3390/electronics11244090.
+When the helper is used, the default propagation loss model added to the channel is the ``LogDistancePropagationLossModel`` with default parameters.
+The default delay model used is ``ConstantSpeedPropagationDelayMode``. Alternatively, users can specify the models used by the helper with the
+``SetPropagationDelayModel`` and the ``AddPropagationLossModel`` functions. The helper can also be used to form a fully associated PANs:
 
-Usage
-*****
+::
 
-Enabling lr-wpan
-================
+    NodeContainer nodes;
+    nodes.Create(4);
+    LrWpanHelper lrWpanHelper;
+    // The propagation and Delay Model are optional, a default is used if not provided.
+    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
+    // Create and associate a PAN with addresses, The first node is used as coordinator
+    lrWpanHelper.CreateAssociatedPan(lrwpanDevices, 0xCAFE);
+    NetDeviceContainer lrwpanDevices = lrWpanHelper.Install(nodes);
+
+In the example shown above, the function ``CreateAssociatedPan`` forms a star topology PAN with devices sharing the same PAN ID (0xCAFE).
+Devices are assigned both 64 bit addresses (extended addresses) and 16 bit addresses (short addresses). The first node is assigned the
+role of PAN coordinator. Number of nodes are limited by the number of possible assignable short addresses ([00:01]-[FF:FD]).
 
-Add ``lr-wpan`` to the list of modules built with |ns3|.
+For more complex topologies or a more robust address assignation scheme, the bootstrap process is recommended.
 
-Helper
-======
+The helper can be used to generate pcap or ascii traces.
+These pcap files can be later on visualized in Wireshark.
 
-The helper is patterned after other device helpers.  In particular,
-tracing (ascii and pcap) is enabled similarly, and enabling of all
-lr-wpan log components is performed similarly.  Use of the helper
-is exemplified in ``examples/lr-wpan-data.cc``.  For ascii tracing,
-the transmit and receive traces are hooked at the Mac layer.
+::
 
-The default propagation loss model added to the channel, when this helper
-is used, is the LogDistancePropagationLossModel with default parameters.
+    // Tracing
+    lrWpanHelper.EnablePcapAll(std::string("lr-wpan-data"), true);
+    AsciiTraceHelper ascii;
+    Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream("lr-wpan-data.tr");
+    lrWpanHelper.EnableAsciiAll(stream);
 
 Examples
-========
+~~~~~~~~
 
 The following examples have been written, which can be found in ``src/lr-wpan/examples/``:
 
@@ -403,21 +395,29 @@
     Default output of the program ``lr-wpan-error-distance-plot.cc``
 
 Tests
-=====
+~~~~~
 
 The following tests have been written, which can be found in ``src/lr-wpan/tests/``:
 
 * ``lr-wpan-ack-test.cc``:  Check that acknowledgments are being used and issued in the correct order.
+* ``lr-wpan-cca-test.cc``: Test the behavior of CCA under specific circumstances (Hidden terminal and CCA vulnerable windows)
 * ``lr-wpan-collision-test.cc``:  Test correct reception of packets with interference and collisions.
+* ``lr-wpan-ed-test.cc``: Test the energy detection (ED) capabilities of the Lr-Wpan implementation.
 * ``lr-wpan-error-model-test.cc``:  Check that the error model gives predictable values.
+* ``lr-wpan-ifs-test.cc``:  Check that the Intraframe Spaces (IFS) are being used and issued in the correct order.
+* ``lr-wpan-mac-test.cc``: Test various MAC capabilities such different types of scanning and RX_ON_WHEN_IDLE.
 * ``lr-wpan-packet-test.cc``:  Test the 802.15.4 MAC header/trailer classes
-* ``lr-wpan-pd-plme-sap-test.cc``:  Test the PLME and PD SAP per IEEE 802.15.4
+* ``lr-wpan-pd-plme-sap-test.cc``:  Test the PLME and PD primitives from Lr-wpan's PHY.
 * ``lr-wpan-spectrum-value-helper-test.cc``:  Test that the conversion between power (expressed as a scalar quantity) and spectral power, and back again, falls within a 25% tolerance across the range of possible channels and input powers.
-* ``lr-wpan-ifs-test.cc``:  Check that the Intraframe Spaces (IFS) are being used and issued in the correct order.
 * ``lr-wpan-slotted-csmaca-test.cc``:  Test the transmission and deferring of data packets in the Contention Access Period (CAP) for the slotted CSMA/CA (beacon-enabled mode).
 
+The test suite ``lr-wpan-cca-test.cc`` demenostrate some known CCA behaviors.
+The test suite includes a test that demonstrates the well known hidden terminal problem. The second test
+included in the test suite shows a known vulnerability window (192us) in CCA that can cause a false positive identification
+of channel as IDLE caused by the turnAround delay between the CCA and the actual transmission of the frame.
+
 Validation
-**********
+----------
 
 The model has not been validated against real hardware.  The error model
 has been validated against the data in IEEE Std 802.15.4-2006,
@@ -431,3 +431,39 @@
 .. figure:: figures/802-15-4-ber.*
 
     Default output of the program ``lr-wpan-error-model-plot.cc``
+
+
+Scope and Limitations
+---------------------
+
+Future versions of this document will contain a PICS proforma similar to
+Appendix D of IEEE 802.15.4-2006. The current emphasis is on direct transmissions
+running on both, slotted and unslotted mode (CSMA/CA) of 802.15.4 operation for use in Zigbee.
+
+- Indirect data transmissions are not supported but planned for a future update.
+- Devices are capable of associating with a single PAN coordinator.
+- Interference is modeled as AWGN but this is currently not thoroughly tested.
+- The standard describes the support of multiple PHY band-modulations but currently, only 250kbps O-QPSK (channel page 0) is supported.
+- Active and passive MAC scans are able to obtain a LQI value from a beacon frame, however, the scan primitives assumes LQI is correctly implemented and does not check the validity of its value.
+- Configuration of the ED thresholds are currently not supported.
+- Coordinator realignment command is only supported in orphan scans.
+- Disassociation primitives are not supported.
+- Security is not supported.
+- Guaranteed Time Slots (GTS) are not supported.
+- Not all attributes are supported by the MLME-SET and MLME-GET primitives.
+- Indirect transmissions are only supported during the association process.
+- RSSI is not supported as this is part of the 2015 revision and the current implementation only supports until the 2011 revision.
+
+References
+----------
+
+[`1 <https://ieeexplore.ieee.org/document/1700009>`_] Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks (WPANs), IEEE Computer Society, IEEE Std 802.15.4-2006, 8 September 2006.
+
+[`2 <https://ieeexplore.ieee.org/document/6012487>`_] IEEE Standard for Local and metropolitan area networks--Part 15.4: Low-Rate Wireless Personal Area Networks (LR-WPANs)," in IEEE Std 802.15.4-2011 (Revision of IEEE Std 802.15.4-2006) , vol., no., pp.1-314, 5 Sept. 2011, doi: 10.1109/IEEESTD.2011.6012487.
+
+[`3 <https://www.mdpi.com/2079-9292/11/24/4090>`_] J. Zheng and Myung J. Lee, "A comprehensive performance study of IEEE 802.15.4," Sensor Network Operations, IEEE Press, Wiley Interscience, Chapter 4, pp. 218-237, 2006.
+
+[`4 <https://dl.acm.org/doi/10.1145/3442555.3442574>`_] Alberto Gallegos Ramonet and Taku Noguchi. 2020. LR-WPAN: Beacon Enabled Direct Transmissions on Ns-3. In 2020 the 6th International Conference on Communication and Information Processing (ICCIP 2020). Association for Computing Machinery, New York, NY, USA, 115–122. https://doi.org/10.1145/3442555.3442574.
+
+[`5 <https://www.mdpi.com/2079-9292/11/24/4090>`_] Gallegos Ramonet, A.; Noguchi, T. Performance Analysis of IEEE 802.15.4 Bootstrap Process. Electronics 2022, 11, 4090. https://doi.org/10.3390/electronics11244090.
+
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-active-scan.cc ns-3.43/src/lr-wpan/examples/lr-wpan-active-scan.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-active-scan.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-active-scan.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Tokushima University, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-bootstrap.cc ns-3.43/src/lr-wpan/examples/lr-wpan-bootstrap.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-bootstrap.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-bootstrap.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Tokushima University, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
@@ -369,17 +358,9 @@
     mobility.SetPositionAllocator(listPositionAlloc);
     mobility.Install(coordinators);
 
-    Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel>();
-    Ptr<LogDistancePropagationLossModel> propModel =
-        CreateObject<LogDistancePropagationLossModel>();
-    Ptr<ConstantSpeedPropagationDelayModel> delayModel =
-        CreateObject<ConstantSpeedPropagationDelayModel>();
-
-    channel->AddPropagationLossModel(propModel);
-    channel->SetPropagationDelayModel(delayModel);
-
     LrWpanHelper lrWpanHelper;
-    lrWpanHelper.SetChannel(channel);
+    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
 
     NetDeviceContainer lrwpanDevices = lrWpanHelper.Install(nodes);
     lrwpanDevices.Add(lrWpanHelper.Install(coordinators));
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-data.cc ns-3.43/src/lr-wpan/examples/lr-wpan-data.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-data.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-data.cc	2024-10-09 16:41:09.896656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Tom Henderson <thomas.r.henderson@boeing.com>
  */
@@ -91,10 +80,11 @@
 
     cmd.Parse(argc, argv);
 
-    LrWpanHelper lrWpanHelper;
     if (verbose)
     {
-        lrWpanHelper.EnableLogComponents();
+        LogComponentEnableAll(LogLevel(LOG_PREFIX_TIME | LOG_PREFIX_FUNC));
+        LogComponentEnable("LrWpanPhy", LOG_LEVEL_ALL);
+        LogComponentEnable("LrWpanMac", LOG_LEVEL_ALL);
     }
 
     // Enable calculation of FCS in the trailers. Only necessary when interacting with real devices
@@ -107,19 +97,6 @@
     Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice>();
     Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice>();
 
-    if (!extended)
-    {
-        dev0->SetAddress(Mac16Address("00:01"));
-        dev1->SetAddress(Mac16Address("00:02"));
-    }
-    else
-    {
-        Ptr<LrWpanMac> mac0 = dev0->GetMac();
-        Ptr<LrWpanMac> mac1 = dev1->GetMac();
-        mac0->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:01"));
-        mac1->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:02"));
-    }
-
     // Each device must be attached to the same channel
     Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel>();
     Ptr<LogDistancePropagationLossModel> propModel =
@@ -136,6 +113,33 @@
     n0->AddDevice(dev0);
     n1->AddDevice(dev1);
 
+    // Note: This setup, which has been done manually here, can be simplified using the LrWpanHelper
+    // class. The LrWpanHelper can be used to set up the propagation loss and delay models in many
+    // devices in a simpler way. The following is an equivalent, simplified setup:
+    //
+    //    LrWpanHelper lrWpanHelper;
+    //    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    //    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
+    //    NodeContainer nodes;
+    //    nodes.Create(2);
+    //    NetDeviceContainer devices = lrWpanHelper.Install(nodes);
+    //    Ptr<LrWpanNetDevice> dev0 = devices.Get(0)->GetObject<LrWpanNetDevice>();
+    //    Ptr<LrWpanNetDevice> dev1 = devices.Get(1)->GetObject<LrWpanNetDevice>();
+
+    // Set 16-bit short addresses if extended is false, otherwise use 64-bit extended addresses
+    if (!extended)
+    {
+        dev0->SetAddress(Mac16Address("00:01"));
+        dev1->SetAddress(Mac16Address("00:02"));
+    }
+    else
+    {
+        Ptr<LrWpanMac> mac0 = dev0->GetMac();
+        Ptr<LrWpanMac> mac1 = dev1->GetMac();
+        mac0->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:01"));
+        mac1->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:02"));
+    }
+
     // Trace state changes in the phy
     dev0->GetPhy()->TraceConnect("TrxState",
                                  std::string("phy0"),
@@ -170,12 +174,6 @@
     cb3 = MakeCallback(&DataIndication);
     dev1->GetMac()->SetMcpsDataIndicationCallback(cb3);
 
-    // Tracing
-    lrWpanHelper.EnablePcapAll(std::string("lr-wpan-data"), true);
-    AsciiTraceHelper ascii;
-    Ptr<OutputStreamWrapper> stream = ascii.CreateFileStream("lr-wpan-data.tr");
-    lrWpanHelper.EnableAsciiAll(stream);
-
     // The below should trigger two callbacks when end-to-end data is working
     // 1) DataConfirm callback is called
     // 2) DataIndication callback is called with value of 50
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-ed-scan.cc ns-3.43/src/lr-wpan/examples/lr-wpan-ed-scan.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-ed-scan.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-ed-scan.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Tokushima University, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc ns-3.43/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-error-distance-plot.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Henderson <thomas.r.henderson@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-error-model-plot.cc ns-3.43/src/lr-wpan/examples/lr-wpan-error-model-plot.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-error-model-plot.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-error-model-plot.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-mlme.cc ns-3.43/src/lr-wpan/examples/lr-wpan-mlme.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-mlme.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-mlme.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
  */
@@ -98,29 +87,20 @@
     LrWpanHelper lrWpanHelper;
 
     // Create 2 nodes, and a NetDevice for each one
-    Ptr<Node> n0 = CreateObject<Node>();
-    Ptr<Node> n1 = CreateObject<Node>();
 
-    Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice>();
-    Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice>();
+    NodeContainer nodes;
+    nodes.Create(2);
+
+    // Use LrWpanHelper to create devices and assign them to nodes
+    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
+    NetDeviceContainer devices = lrWpanHelper.Install(nodes);
+    Ptr<LrWpanNetDevice> dev0 = devices.Get(0)->GetObject<LrWpanNetDevice>();
+    Ptr<LrWpanNetDevice> dev1 = devices.Get(1)->GetObject<LrWpanNetDevice>();
 
     dev0->SetAddress(Mac16Address("00:01"));
     dev1->SetAddress(Mac16Address("00:02"));
 
-    Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel>();
-    Ptr<LogDistancePropagationLossModel> propModel =
-        CreateObject<LogDistancePropagationLossModel>();
-    Ptr<ConstantSpeedPropagationDelayModel> delayModel =
-        CreateObject<ConstantSpeedPropagationDelayModel>();
-    channel->AddPropagationLossModel(propModel);
-    channel->SetPropagationDelayModel(delayModel);
-
-    dev0->SetChannel(channel);
-    dev1->SetChannel(channel);
-
-    n0->AddDevice(dev0);
-    n1->AddDevice(dev1);
-
     ///////////////// Mobility   ///////////////////////
     Ptr<ConstantPositionMobilityModel> sender0Mobility =
         CreateObject<ConstantPositionMobilityModel>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-orphan-scan.cc ns-3.43/src/lr-wpan/examples/lr-wpan-orphan-scan.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-orphan-scan.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-orphan-scan.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Tokushima University, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-packet-print.cc ns-3.43/src/lr-wpan/examples/lr-wpan-packet-print.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-packet-print.cc	2024-05-29 15:29:46.972073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-packet-print.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Tom Henderson <thomas.r.henderson@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-per-plot.cc ns-3.43/src/lr-wpan/examples/lr-wpan-per-plot.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-per-plot.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-per-plot.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Tokushima University, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  *          Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/examples/lr-wpan-phy-test.cc ns-3.43/src/lr-wpan/examples/lr-wpan-phy-test.cc
--- ns-3.42/src/lr-wpan/examples/lr-wpan-phy-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/examples/lr-wpan-phy-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/helper/lr-wpan-helper.cc ns-3.43/src/lr-wpan/helper/lr-wpan-helper.cc
--- ns-3.42/src/lr-wpan/helper/lr-wpan-helper.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/helper/lr-wpan-helper.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *  Gary Pei <guangyu.pei@boeing.com>
@@ -27,8 +16,6 @@
 #include <ns3/lr-wpan-net-device.h>
 #include <ns3/mobility-model.h>
 #include <ns3/multi-model-spectrum-channel.h>
-#include <ns3/propagation-delay-model.h>
-#include <ns3/propagation-loss-model.h>
 #include <ns3/single-model-spectrum-channel.h>
 
 namespace ns3
@@ -64,34 +51,12 @@
 
 LrWpanHelper::LrWpanHelper()
 {
-    m_channel = CreateObject<SingleModelSpectrumChannel>();
-
-    Ptr<LogDistancePropagationLossModel> lossModel =
-        CreateObject<LogDistancePropagationLossModel>();
-    m_channel->AddPropagationLossModel(lossModel);
-
-    Ptr<ConstantSpeedPropagationDelayModel> delayModel =
-        CreateObject<ConstantSpeedPropagationDelayModel>();
-    m_channel->SetPropagationDelayModel(delayModel);
+    m_useMultiModelSpectrumChannel = false;
 }
 
 LrWpanHelper::LrWpanHelper(bool useMultiModelSpectrumChannel)
 {
-    if (useMultiModelSpectrumChannel)
-    {
-        m_channel = CreateObject<MultiModelSpectrumChannel>();
-    }
-    else
-    {
-        m_channel = CreateObject<SingleModelSpectrumChannel>();
-    }
-    Ptr<LogDistancePropagationLossModel> lossModel =
-        CreateObject<LogDistancePropagationLossModel>();
-    m_channel->AddPropagationLossModel(lossModel);
-
-    Ptr<ConstantSpeedPropagationDelayModel> delayModel =
-        CreateObject<ConstantSpeedPropagationDelayModel>();
-    m_channel->SetPropagationDelayModel(delayModel);
+    m_useMultiModelSpectrumChannel = useMultiModelSpectrumChannel;
 }
 
 LrWpanHelper::~LrWpanHelper()
@@ -178,6 +143,45 @@
 NetDeviceContainer
 LrWpanHelper::Install(NodeContainer c)
 {
+    if (!m_channel)
+    {
+        if (m_useMultiModelSpectrumChannel)
+        {
+            m_channel = CreateObject<MultiModelSpectrumChannel>();
+        }
+        else
+        {
+            m_channel = CreateObject<SingleModelSpectrumChannel>();
+        }
+        if (!m_propagationDelay.IsTypeIdSet())
+        {
+            SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+        }
+        if (m_propagationLoss.empty())
+        {
+            AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
+        }
+
+        for (auto i = m_propagationLoss.begin(); i != m_propagationLoss.end(); ++i)
+        {
+            Ptr<PropagationLossModel> cur = (*i).Create<PropagationLossModel>();
+            m_channel->AddPropagationLossModel(cur);
+        }
+        Ptr<PropagationDelayModel> delay = m_propagationDelay.Create<PropagationDelayModel>();
+        m_channel->SetPropagationDelayModel(delay);
+    }
+    else
+    {
+        if (!m_channel->GetPropagationDelayModel())
+        {
+            NS_FATAL_ERROR("No propagation delay model added to the channel");
+        }
+        if (!m_channel->GetPropagationLossModel())
+        {
+            NS_FATAL_ERROR("No propagation loss model added to the channel");
+        }
+    }
+
     NetDeviceContainer devices;
     for (auto i = c.Begin(); i != c.End(); i++)
     {
@@ -342,7 +346,7 @@
     if (!device)
     {
         NS_LOG_INFO("LrWpanHelper::EnablePcapInternal(): Device "
-                    << device << " not of type ns3::LrWpanNetDevice");
+                    << device << " not of type ns3::lrwpan::LrWpanNetDevice");
         return;
     }
 
@@ -464,7 +468,7 @@
 
     oss.str("");
     oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid
-        << "/$ns3::LrWpanNetDevice/Mac/MacRx";
+        << "/$ns3::lrwpan::LrWpanNetDevice/Mac/MacRx";
     device->GetMac()->TraceConnect(
         "MacRx",
         oss.str(),
@@ -472,7 +476,7 @@
 
     oss.str("");
     oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid
-        << "/$ns3::LrWpanNetDevice/Mac/MacTx";
+        << "/$ns3::lrwpan::LrWpanNetDevice/Mac/MacTx";
     device->GetMac()->TraceConnect(
         "MacTx",
         oss.str(),
@@ -480,7 +484,7 @@
 
     oss.str("");
     oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid
-        << "/$ns3::LrWpanNetDevice/Mac/MacTxEnqueue";
+        << "/$ns3::lrwpan::LrWpanNetDevice/Mac/MacTxEnqueue";
     device->GetMac()->TraceConnect(
         "MacTxEnqueue",
         oss.str(),
@@ -488,7 +492,7 @@
 
     oss.str("");
     oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid
-        << "/$ns3::LrWpanNetDevice/Mac/MacTxDequeue";
+        << "/$ns3::lrwpan::LrWpanNetDevice/Mac/MacTxDequeue";
     device->GetMac()->TraceConnect(
         "MacTxDequeue",
         oss.str(),
@@ -496,7 +500,7 @@
 
     oss.str("");
     oss << "/NodeList/" << nodeid << "/DeviceList/" << deviceid
-        << "/$ns3::LrWpanNetDevice/Mac/MacTxDrop";
+        << "/$ns3::lrwpan::LrWpanNetDevice/Mac/MacTxDrop";
     device->GetMac()->TraceConnect(
         "MacTxDrop",
         oss.str(),
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/helper/lr-wpan-helper.h ns-3.43/src/lr-wpan/helper/lr-wpan-helper.h
--- ns-3.42/src/lr-wpan/helper/lr-wpan-helper.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/helper/lr-wpan-helper.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *  Gary Pei <guangyu.pei@boeing.com>
@@ -50,23 +39,14 @@
 {
   public:
     /**
-     * \brief Create a LrWpan helper in an empty state.  By default, a
-     * SingleModelSpectrumChannel is created, with a
-     * LogDistancePropagationLossModel and a ConstantSpeedPropagationDelayModel.
-     *
-     * To change the channel type, loss model, or delay model, the Get/Set
-     * Channel methods may be used.
+     * \brief Create a LrWpan helper in an empty state.
      */
     LrWpanHelper();
 
     /**
-     * \brief Create a LrWpan helper in an empty state with either a
-     * SingleModelSpectrumChannel or a MultiModelSpectrumChannel.
+     * \brief Create a LrWpan helper in an empty state.
      * \param useMultiModelSpectrumChannel use a MultiModelSpectrumChannel if true, a
      * SingleModelSpectrumChannel otherwise
-     *
-     * A LogDistancePropagationLossModel and a
-     * ConstantSpeedPropagationDelayModel are added to the channel.
      */
     LrWpanHelper(bool useMultiModelSpectrumChannel);
 
@@ -95,6 +75,26 @@
     void SetChannel(std::string channelName);
 
     /**
+     * \tparam Ts \deduced Argument types
+     * \param name the name of the model to set
+     * \param [in] args Name and AttributeValue pairs to set.
+     *
+     * Add a propagation loss model to the set of currently-configured loss models.
+     */
+    template <typename... Ts>
+    void AddPropagationLossModel(std::string name, Ts&&... args);
+
+    /**
+     * \tparam Ts \deduced Argument types
+     * \param name the name of the model to set
+     * \param [in] args Name and AttributeValue pairs to set.
+     *
+     * Configure a propagation delay for this channel.
+     */
+    template <typename... Ts>
+    void SetPropagationDelayModel(std::string name, Ts&&... args);
+
+    /**
      * \brief Add mobility model to a physical device
      * \param phy the physical device
      * \param m the mobility model
@@ -103,6 +103,16 @@
 
     /**
      * \brief Install a LrWpanNetDevice and the associated structures (e.g., channel) in the nodes.
+     *
+     * If the channel is not already initialized, it will be created as either a
+     * SingleModelSpectrumChannel or a MultiModelSpectrumChannel, depending on the
+     * useMultiModelSpectrumChannel flag. Additionally, a ConstantSpeedPropagationDelayModel will be
+     * set as the default delay model if no delay model is specified, and a
+     * LogDistancePropagationLossModel will be added to the channel if no propagation loss models
+     * are defined.
+     *
+     * If the channel is already initialized but lacks either a PropagationDelayModel or a
+     * PropagationLossModel, an error will be raised.
      * \param c a set of nodes
      * \returns A container holding the added net devices.
      */
@@ -193,9 +203,30 @@
                              bool explicitFilename) override;
 
   private:
-    Ptr<SpectrumChannel> m_channel; //!< channel to be used for the devices
+    Ptr<SpectrumChannel> m_channel;      //!< channel to be used for the devices
+    bool m_useMultiModelSpectrumChannel; //!< indicates whether a MultiModelSpectrumChannel is used
+    std::vector<ObjectFactory> m_propagationLoss; ///< vector of propagation loss models
+    ObjectFactory m_propagationDelay;             ///< propagation delay model
 };
 
+/***************************************************************
+ *  Implementation of the templates declared above.
+ ***************************************************************/
+
+template <typename... Ts>
+void
+LrWpanHelper::AddPropagationLossModel(std::string name, Ts&&... args)
+{
+    m_propagationLoss.push_back(ObjectFactory(name, std::forward<Ts>(args)...));
+}
+
+template <typename... Ts>
+void
+LrWpanHelper::SetPropagationDelayModel(std::string name, Ts&&... args)
+{
+    m_propagationDelay = ObjectFactory(name, std::forward<Ts>(args)...);
+}
+
 } // namespace ns3
 
 #endif /* LR_WPAN_HELPER_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-constants.h ns-3.43/src/lr-wpan/model/lr-wpan-constants.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-constants.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-constants.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *  Gary Pei <guangyu.pei@boeing.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-csmaca.cc ns-3.43/src/lr-wpan/model/lr-wpan-csmaca.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-csmaca.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-csmaca.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  kwong yin <kwong-sang.yin@boeing.com>
@@ -32,8 +21,7 @@
 
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT                                                                      \
-    std::clog << "[address " << m_mac->GetShortAddress() << " | " << m_mac->GetExtendedAddress()   \
-              << "] ";
+    std::clog << "[" << m_mac->GetShortAddress() << " | " << m_mac->GetExtendedAddress() << "] ";
 
 namespace ns3
 {
@@ -46,7 +34,8 @@
 TypeId
 LrWpanCsmaCa::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::LrWpanCsmaCa")
+    static TypeId tid = TypeId("ns3::lrwpan::LrWpanCsmaCa")
+                            .AddDeprecatedName("ns3::LrWpanCsmaCa")
                             .SetParent<Object>()
                             .SetGroupName("LrWpan")
                             .AddConstructor<LrWpanCsmaCa>();
@@ -101,28 +90,24 @@
 void
 LrWpanCsmaCa::SetSlottedCsmaCa()
 {
-    NS_LOG_FUNCTION(this);
     m_isSlotted = true;
 }
 
 void
 LrWpanCsmaCa::SetUnSlottedCsmaCa()
 {
-    NS_LOG_FUNCTION(this);
     m_isSlotted = false;
 }
 
 bool
 LrWpanCsmaCa::IsSlottedCsmaCa() const
 {
-    NS_LOG_FUNCTION(this);
     return m_isSlotted;
 }
 
 bool
 LrWpanCsmaCa::IsUnSlottedCsmaCa() const
 {
-    NS_LOG_FUNCTION(this);
     return !m_isSlotted;
 }
 
@@ -234,6 +219,8 @@
     m_NB = 0;
     if (IsSlottedCsmaCa())
     {
+        NS_LOG_DEBUG("Using Slotted CSMA-CA");
+
         // TODO: Check if the current PHY is using the Japanese band 950 Mhz:
         //       (IEEE_802_15_4_950MHZ_BPSK and IEEE_802_15_4_950MHZ_2GFSK)
         //       if in use, m_CW = 1.
@@ -264,6 +251,7 @@
     }
     else
     {
+        NS_LOG_DEBUG("Using Unslotted CSMA-CA");
         m_BE = m_macMinBE;
         m_randomBackoffEvent = Simulator::ScheduleNow(&LrWpanCsmaCa::RandomBackoffDelay, this);
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-csmaca.h ns-3.43/src/lr-wpan/model/lr-wpan-csmaca.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-csmaca.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-csmaca.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  kwong yin <kwong-sang.yin@boeing.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-error-model.cc ns-3.43/src/lr-wpan/model/lr-wpan-error-model.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-error-model.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-error-model.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
@@ -33,7 +22,8 @@
 TypeId
 LrWpanErrorModel::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::LrWpanErrorModel")
+    static TypeId tid = TypeId("ns3::lrwpan::LrWpanErrorModel")
+                            .AddDeprecatedName("ns3::LrWpanErrorModel")
                             .SetParent<Object>()
                             .SetGroupName("LrWpan")
                             .AddConstructor<LrWpanErrorModel>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-error-model.h ns-3.43/src/lr-wpan/model/lr-wpan-error-model.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-error-model.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-error-model.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-fields.cc ns-3.43/src/lr-wpan/model/lr-wpan-fields.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-fields.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-fields.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *  Author: Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-fields.h ns-3.43/src/lr-wpan/model/lr-wpan-fields.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-fields.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-fields.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-interference-helper.cc ns-3.43/src/lr-wpan/model/lr-wpan-interference-helper.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-interference-helper.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-interference-helper.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Fraunhofer FKIE
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-interference-helper.h ns-3.43/src/lr-wpan/model/lr-wpan-interference-helper.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-interference-helper.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-interference-helper.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Fraunhofer FKIE
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-lqi-tag.cc ns-3.43/src/lr-wpan/model/lr-wpan-lqi-tag.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-lqi-tag.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-lqi-tag.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Fraunhofer FKIE
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
@@ -31,7 +20,8 @@
 TypeId
 LrWpanLqiTag::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::LrWpanLqiTag")
+    static TypeId tid = TypeId("ns3::lrwpan::LrWpanLqiTag")
+                            .AddDeprecatedName("ns3::LrWpanLqiTag")
                             .SetParent<Tag>()
                             .SetGroupName("LrWpan")
                             .AddConstructor<LrWpanLqiTag>()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-lqi-tag.h ns-3.43/src/lr-wpan/model/lr-wpan-lqi-tag.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-lqi-tag.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-lqi-tag.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Fraunhofer FKIE
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac-base.cc ns-3.43/src/lr-wpan/model/lr-wpan-mac-base.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac-base.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac-base.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Tokushima University, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *  Author: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
@@ -33,7 +22,10 @@
 TypeId
 LrWpanMacBase::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::LrWpanMacBase").SetParent<Object>().SetGroupName("LrWpan");
+    static TypeId tid = TypeId("ns3::lrwpan::LrWpanMacBase")
+                            .AddDeprecatedName("ns3::LrWpanMacBase")
+                            .SetParent<Object>()
+                            .SetGroupName("LrWpan");
     return tid;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac-base.h ns-3.43/src/lr-wpan/model/lr-wpan-mac-base.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac-base.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac-base.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Tokushima University, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *  Author: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
@@ -311,13 +300,18 @@
  */
 struct MacPibAttributes : public SimpleRefCount<MacPibAttributes>
 {
-    Ptr<Packet> macBeaconPayload;      //!< The contents of the beacon payload.
-    uint8_t macBeaconPayloadLength{0}; //!< The length in octets of the beacon payload.
-    Mac16Address macShortAddress;      //!< The 16 bit mac short address
-    Mac64Address macExtendedAddress;   //!< The EUI-64 bit address
-    uint16_t macPanId{0xffff};         //!< The identifier of the PAN
-    uint8_t pCurrentChannel{11};       //!< The current logical channel in used in the PHY
-    uint8_t pCurrentPage{0};           //!< The current logical page in use in the PHY
+    std::vector<uint8_t> macBeaconPayload; //!< The set with the contents of the beacon payload.
+    uint8_t macBeaconPayloadLength{0};     //!< The length in octets of the beacon payload.
+    Mac16Address macShortAddress;          //!< The 16 bit mac short address
+    Mac64Address macExtendedAddress;       //!< The EUI-64 bit address
+    uint16_t macPanId{0xffff};             //!< The identifier of the PAN
+    bool macAssociationPermit{true};       //!< Indication of whether the coordinator is allowing
+                                           //!< association.
+    bool macRxOnWhenIdle{true}; //!< Indication of whether the MAC is enabled during idle periods.
+    bool macPromiscuousMode{false}; //!< Indication of whether the mac is in promiscuous mode
+                                    //!<  (Receive all mode).
+    uint8_t pCurrentChannel{11};    //!< The current logical channel in used in the PHY
+    uint8_t pCurrentPage{0};        //!< The current logical page in use in the PHY
     // TODO: complete other MAC pib attributes
 };
 
@@ -875,7 +869,7 @@
      * The callback implements MLME-GET.confirm SAP of IEEE 802.15.4-2011,
      * section 6.2.5.2
      *
-     *\param c the callback
+     * \param c the callback
      */
     void SetMlmeGetConfirmCallback(MlmeGetConfirmCallback c);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac.cc ns-3.43/src/lr-wpan/model/lr-wpan-mac.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *  Gary Pei <guangyu.pei@boeing.com>
@@ -40,7 +29,7 @@
 
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT                                                                      \
-    std::clog << "[address " << m_shortAddress << " | " << m_macExtendedAddress << "] ";
+    std::clog << "[" << m_shortAddress << " | " << m_macExtendedAddress << "] ";
 
 namespace ns3
 {
@@ -93,7 +82,8 @@
 LrWpanMac::GetTypeId()
 {
     static TypeId tid =
-        TypeId("ns3::LrWpanMac")
+        TypeId("ns3::lrwpan::LrWpanMac")
+            .AddDeprecatedName("ns3::LrWpanMac")
             .SetParent<LrWpanMacBase>()
             .SetGroupName("LrWpan")
             .AddConstructor<LrWpanMac>()
@@ -187,12 +177,12 @@
             .AddTraceSource("MacState",
                             "The state of LrWpan Mac",
                             MakeTraceSourceAccessor(&LrWpanMac::m_macStateLogger),
-                            "ns3::LrWpanMac::StateTracedCallback")
+                            "ns3::lrwpan::LrWpanMac::StateTracedCallback")
             .AddTraceSource("MacSentPkt",
                             "Trace source reporting some information about "
                             "the sent packet",
                             MakeTraceSourceAccessor(&LrWpanMac::m_sentPktTrace),
-                            "ns3::LrWpanMac::SentTracedCallback")
+                            "ns3::lrwpan::LrWpanMac::SentTracedCallback")
             .AddTraceSource("IfsEnd",
                             "Trace source reporting the end of an "
                             "Interframe space (IFS)",
@@ -252,12 +242,10 @@
     m_maxTxQueueSize = m_txQueue.max_size();
     m_maxIndTxQueueSize = m_indTxQueue.max_size();
 
-    Ptr<UniformRandomVariable> uniformVar = CreateObject<UniformRandomVariable>();
-    uniformVar->SetAttribute("Min", DoubleValue(0.0));
-    uniformVar->SetAttribute("Max", DoubleValue(255.0));
-    m_macDsn = SequenceNumber8(uniformVar->GetValue());
-    m_macBsn = SequenceNumber8(uniformVar->GetValue());
-    m_macBeaconPayload = nullptr;
+    m_uniformVar = CreateObject<UniformRandomVariable>();
+    m_macDsn = SequenceNumber8(m_uniformVar->GetInteger(0, 255));
+    m_macBsn = SequenceNumber8(m_uniformVar->GetInteger(0, 255));
+    m_macBeaconPayload = {};
     m_macBeaconPayloadLength = 0;
     m_shortAddress = Mac16Address("FF:FF"); // FF:FF = The address is not assigned.
 }
@@ -357,28 +345,24 @@
 void
 LrWpanMac::SetShortAddress(Mac16Address address)
 {
-    NS_LOG_FUNCTION(this << address);
     m_shortAddress = address;
 }
 
 void
 LrWpanMac::SetExtendedAddress(Mac64Address address)
 {
-    NS_LOG_FUNCTION(this << address);
     m_macExtendedAddress = address;
 }
 
 Mac16Address
 LrWpanMac::GetShortAddress() const
 {
-    NS_LOG_FUNCTION(this);
     return m_shortAddress;
 }
 
 Mac64Address
 LrWpanMac::GetExtendedAddress() const
 {
-    NS_LOG_FUNCTION(this);
     return m_macExtendedAddress;
 }
 
@@ -924,19 +908,28 @@
 
     switch (id)
     {
+    case macAssociationPermit:
+        m_macAssociationPermit = attribute->macAssociationPermit;
+        break;
     case macBeaconPayload:
-        if (attribute->macBeaconPayload->GetSize() > lrwpan::aMaxBeaconPayloadLength)
+        if (attribute->macBeaconPayload.size() > aMaxBeaconPayloadLength)
         {
             confirmParams.m_status = MacStatus::INVALID_PARAMETER;
         }
         else
         {
             m_macBeaconPayload = attribute->macBeaconPayload;
-            m_macBeaconPayloadLength = attribute->macBeaconPayload->GetSize();
         }
         break;
     case macBeaconPayloadLength:
-        confirmParams.m_status = MacStatus::INVALID_PARAMETER;
+        if (attribute->macBeaconPayloadLength > aMaxBeaconPayloadLength)
+        {
+            confirmParams.m_status = MacStatus::INVALID_PARAMETER;
+        }
+        else
+        {
+            m_macBeaconPayloadLength = attribute->macBeaconPayloadLength;
+        }
         break;
     case macShortAddress:
         m_shortAddress = attribute->macShortAddress;
@@ -947,6 +940,24 @@
     case macPanId:
         m_macPanId = macPanId;
         break;
+    case macPromiscuousMode:
+        m_macPromiscuousMode = attribute->macPromiscuousMode;
+        break;
+    case macRxOnWhenIdle:
+        m_macRxOnWhenIdle = attribute->macRxOnWhenIdle;
+        break;
+    case pCurrentChannel: {
+        Ptr<PhyPibAttributes> pibAttr = Create<PhyPibAttributes>();
+        pibAttr->phyCurrentChannel = attribute->pCurrentChannel;
+        m_phy->PlmeSetAttributeRequest(PhyPibAttributeIdentifier::phyCurrentChannel, pibAttr);
+        break;
+    }
+    case pCurrentPage: {
+        Ptr<PhyPibAttributes> pibAttr = Create<PhyPibAttributes>();
+        pibAttr->phyCurrentPage = attribute->pCurrentPage;
+        m_phy->PlmeSetAttributeRequest(PhyPibAttributeIdentifier::phyCurrentPage, pibAttr);
+        break;
+    }
     default:
         // TODO: Add support for setting other attributes
         confirmParams.m_status = MacStatus::UNSUPPORTED_ATTRIBUTE;
@@ -968,12 +979,21 @@
 
     switch (id)
     {
+    case macAssociationPermit:
+        attributes->macAssociationPermit = m_macAssociationPermit;
+        break;
     case macBeaconPayload:
         attributes->macBeaconPayload = m_macBeaconPayload;
         break;
     case macBeaconPayloadLength:
         attributes->macBeaconPayloadLength = m_macBeaconPayloadLength;
         break;
+    case macPromiscuousMode:
+        attributes->macPromiscuousMode = m_macPromiscuousMode;
+        break;
+    case macRxOnWhenIdle:
+        attributes->macRxOnWhenIdle = m_macRxOnWhenIdle;
+        break;
     case macShortAddress:
         attributes->macShortAddress = m_shortAddress;
         break;
@@ -1006,21 +1026,21 @@
     NS_LOG_FUNCTION(this);
     NS_ASSERT(m_macState == MAC_IDLE);
 
-    LrWpanMacHeader macHdr(LrWpanMacHeader::LRWPAN_MAC_BEACON, m_macBsn.GetValue());
     m_macBsn++;
-    BeaconPayloadHeader macPayload;
-    Ptr<Packet> beaconPacket;
-    LrWpanMacTrailer macTrailer;
 
-    if (m_macBeaconPayload == nullptr)
+    Ptr<Packet> beaconPacket;
+    if (m_macBeaconPayload.empty())
     {
         beaconPacket = Create<Packet>();
     }
     else
     {
-        beaconPacket = m_macBeaconPayload;
+        // Extract the octets from m_macBeaconPayload and place them in a packet
+        uint8_t* octets = &m_macBeaconPayload[0];
+        beaconPacket = Create<Packet>(octets, m_macBeaconPayload.size());
     }
 
+    LrWpanMacHeader macHdr(LrWpanMacHeader::LRWPAN_MAC_BEACON, m_macBsn.GetValue());
     macHdr.SetDstAddrMode(LrWpanMacHeader::SHORTADDR);
     macHdr.SetDstAddrFields(GetPanId(), Mac16Address("ff:ff"));
 
@@ -1039,6 +1059,7 @@
     macHdr.SetSecDisable();
     macHdr.SetNoAckReq();
 
+    BeaconPayloadHeader macPayload;
     macPayload.SetSuperframeSpecField(GetSuperframeField());
     macPayload.SetGtsFields(GetGtsFields());
     macPayload.SetPndAddrFields(GetPendingAddrFields());
@@ -1047,6 +1068,7 @@
     beaconPacket->AddHeader(macHdr);
 
     // Calculate FCS if the global attribute ChecksumEnabled is set.
+    LrWpanMacTrailer macTrailer;
     if (Node::ChecksumEnabled())
     {
         macTrailer.EnableFcs(true);
@@ -1055,18 +1077,28 @@
 
     beaconPacket->AddTrailer(macTrailer);
 
-    // Set the Beacon packet to be transmitted
-    m_txPkt = beaconPacket;
-
     if (m_csmaCa->IsSlottedCsmaCa())
     {
+        // Beacon in beacon-enabled mode
+        // Transmit beacon immediately (i.e. Without CSMA/CA)
+        m_txPkt = beaconPacket;
         m_outSuperframeStatus = BEACON;
         NS_LOG_DEBUG("Outgoing superframe Active Portion (Beacon + CAP + CFP): "
                      << m_superframeDuration << " symbols");
-    }
 
-    ChangeMacState(MAC_SENDING);
-    m_phy->PlmeSetTRXStateRequest(IEEE_802_15_4_PHY_TX_ON);
+        ChangeMacState(MAC_SENDING);
+        m_phy->PlmeSetTRXStateRequest(IEEE_802_15_4_PHY_TX_ON);
+    }
+    else
+    {
+        // Beacon as a result of a beacon request
+        // The beacon shall be transmitted using CSMA/CA
+        // IEEE 802.15.4-2011 (Section 5.1.2.1.2)
+        Ptr<TxQueueElement> txQElement = Create<TxQueueElement>();
+        txQElement->txQPkt = beaconPacket;
+        EnqueueTxQElement(txQElement);
+        CheckQueue();
+    }
 }
 
 void
@@ -1714,6 +1746,210 @@
 }
 
 void
+LrWpanMac::ReceiveBeacon(uint8_t lqi, Ptr<Packet> p)
+{
+    NS_LOG_FUNCTION(this << lqi << p);
+    // The received beacon size in symbols
+    // Beacon = Sync Header (SHR)[5 bytes] +
+    //          PHY header (PHR) [1 byte]  +
+    //          PSDU (MAC header + beacon payload) [default 17 bytes]
+    m_rxBeaconSymbols = m_phy->GetPhySHRDuration() + 1 * m_phy->GetPhySymbolsPerOctet() +
+                        (p->GetSize() * m_phy->GetPhySymbolsPerOctet());
+
+    // The start of Rx beacon time and start of the Incoming superframe Active Period
+    auto symbolRate = (uint64_t)m_phy->GetDataOrSymbolRate(false); // symbols per second
+    m_macBeaconRxTime = Simulator::Now() - Seconds(double(m_rxBeaconSymbols) / symbolRate);
+
+    NS_LOG_DEBUG("Beacon Received; forwarding up (m_macBeaconRxTime: "
+                 << m_macBeaconRxTime.As(Time::S) << ")");
+
+    // Strip the MAC header, the trailer and the Beacon Payload
+    LrWpanMacTrailer receivedMacTrailer;
+    p->RemoveTrailer(receivedMacTrailer);
+
+    LrWpanMacHeader receivedMacHdr;
+    p->RemoveHeader(receivedMacHdr);
+
+    BeaconPayloadHeader receivedMacPayload;
+    p->RemoveHeader(receivedMacPayload);
+
+    // Fill the PAN descriptor
+    PanDescriptor panDescriptor;
+
+    if (receivedMacHdr.GetSrcAddrMode() == SHORT_ADDR)
+    {
+        panDescriptor.m_coorAddrMode = SHORT_ADDR;
+        panDescriptor.m_coorShortAddr = receivedMacHdr.GetShortSrcAddr();
+    }
+    else
+    {
+        panDescriptor.m_coorAddrMode = EXT_ADDR;
+        panDescriptor.m_coorExtAddr = receivedMacHdr.GetExtSrcAddr();
+    }
+
+    panDescriptor.m_coorPanId = receivedMacHdr.GetSrcPanId();
+    panDescriptor.m_gtsPermit = receivedMacPayload.GetGtsFields().GetGtsPermit();
+    panDescriptor.m_linkQuality = lqi;
+    panDescriptor.m_logChPage = m_phy->GetCurrentPage();
+    panDescriptor.m_logCh = m_phy->GetCurrentChannelNum();
+    panDescriptor.m_superframeSpec = receivedMacPayload.GetSuperframeSpecField();
+    panDescriptor.m_timeStamp = m_macBeaconRxTime;
+
+    // Process beacon when device belongs to a PAN (associated device)
+    if (!m_scanEvent.IsPending() && m_macPanId == receivedMacHdr.GetDstPanId())
+    {
+        // We need to make sure to cancel any possible ongoing unslotted CSMA/CA
+        // operations when receiving a beacon (e.g. Those taking place at the
+        // beginning of an Association).
+        m_csmaCa->Cancel();
+
+        SuperframeField incomingSuperframe(receivedMacPayload.GetSuperframeSpecField());
+
+        m_incomingBeaconOrder = incomingSuperframe.GetBeaconOrder();
+        m_incomingSuperframeOrder = incomingSuperframe.GetFrameOrder();
+        m_incomingFnlCapSlot = incomingSuperframe.GetFinalCapSlot();
+
+        if (m_incomingBeaconOrder < 15)
+        {
+            // Start Beacon-enabled mode
+            m_csmaCa->SetSlottedCsmaCa();
+            m_incomingBeaconInterval = (static_cast<uint32_t>(1 << m_incomingBeaconOrder)) *
+                                       lrwpan::aBaseSuperframeDuration;
+            m_incomingSuperframeDuration = lrwpan::aBaseSuperframeDuration *
+                                           (static_cast<uint32_t>(1 << m_incomingSuperframeOrder));
+
+            if (incomingSuperframe.IsBattLifeExt())
+            {
+                m_csmaCa->SetBatteryLifeExtension(true);
+            }
+            else
+            {
+                m_csmaCa->SetBatteryLifeExtension(false);
+            }
+
+            // TODO: get Incoming frame GTS Fields here
+
+            // Begin CAP on the current device using info from
+            // the Incoming superframe
+            NS_LOG_DEBUG("Incoming superframe Active Portion "
+                         << "(Beacon + CAP + CFP): " << m_incomingSuperframeDuration << " symbols");
+
+            m_incCapEvent =
+                Simulator::ScheduleNow(&LrWpanMac::StartCAP, this, SuperframeType::INCOMING);
+        }
+        else
+        {
+            // Start non-beacon enabled mode
+            m_csmaCa->SetUnSlottedCsmaCa();
+        }
+
+        m_setMacState = Simulator::ScheduleNow(&LrWpanMac::SetLrWpanMacState, this, MAC_IDLE);
+    }
+    else if (!m_scanEvent.IsPending() && m_macPanId == 0xFFFF)
+    {
+        NS_LOG_DEBUG(this << " Device not associated, cannot process beacon");
+    }
+
+    if (m_macAutoRequest)
+    {
+        if (p->GetSize() > 0)
+        {
+            if (!m_mlmeBeaconNotifyIndicationCallback.IsNull())
+            {
+                // The beacon contains payload, send the beacon notification.
+                MlmeBeaconNotifyIndicationParams beaconParams;
+                beaconParams.m_bsn = receivedMacHdr.GetSeqNum();
+                beaconParams.m_panDescriptor = panDescriptor;
+                beaconParams.m_sduLength = p->GetSize();
+                beaconParams.m_sdu = p;
+                m_mlmeBeaconNotifyIndicationCallback(beaconParams);
+            }
+        }
+
+        if (m_scanEvent.IsPending())
+        {
+            // Channel scanning is taking place, save only unique PAN descriptors
+            bool descriptorExists = false;
+
+            for (const auto& descriptor : m_panDescriptorList)
+            {
+                if (descriptor.m_coorAddrMode == SHORT_ADDR)
+                {
+                    // Found a coordinator in PAN descriptor list with the same
+                    // registered short address
+                    descriptorExists =
+                        (descriptor.m_coorShortAddr == panDescriptor.m_coorShortAddr &&
+                         descriptor.m_coorPanId == panDescriptor.m_coorPanId);
+                }
+                else
+                {
+                    // Found a coordinator in PAN descriptor list with the same
+                    // registered extended address
+                    descriptorExists = (descriptor.m_coorExtAddr == panDescriptor.m_coorExtAddr &&
+                                        descriptor.m_coorPanId == panDescriptor.m_coorPanId);
+                }
+
+                if (descriptorExists)
+                {
+                    break;
+                }
+            }
+
+            if (!descriptorExists)
+            {
+                m_panDescriptorList.emplace_back(panDescriptor);
+            }
+            return;
+        }
+        else if (m_trackingEvent.IsPending())
+        {
+            // check if MLME-SYNC.request was previously issued and running
+            // Sync. is necessary to handle pending messages (indirect
+            // transmissions)
+            m_trackingEvent.Cancel();
+            m_numLostBeacons = 0;
+
+            if (m_beaconTrackingOn)
+            {
+                // if tracking option is on keep tracking the next beacon
+                uint64_t searchSymbols;
+                Time searchBeaconTime;
+
+                searchSymbols = (static_cast<uint64_t>(1 << m_incomingBeaconOrder)) +
+                                1 * lrwpan::aBaseSuperframeDuration;
+                searchBeaconTime = Seconds(static_cast<double>(searchSymbols / symbolRate));
+                m_trackingEvent =
+                    Simulator::Schedule(searchBeaconTime, &LrWpanMac::BeaconSearchTimeout, this);
+            }
+
+            PendingAddrFields pndAddrFields;
+            pndAddrFields = receivedMacPayload.GetPndAddrFields();
+
+            // TODO: Ignore pending data, and do not send data command request if
+            // the address is in the GTS list.
+            //       If the address is not in the GTS list, then  check if the
+            //       address is in the short address pending list or in the extended
+            //       address pending list and send a data command request.
+        }
+    }
+    else
+    {
+        // m_macAutoRequest is FALSE
+        // Data command request are not send, only the beacon notification.
+        // see IEEE 802.15.4-2011 Section 6.2.4.1
+        if (!m_mlmeBeaconNotifyIndicationCallback.IsNull())
+        {
+            MlmeBeaconNotifyIndicationParams beaconParams;
+            beaconParams.m_bsn = receivedMacHdr.GetSeqNum();
+            beaconParams.m_panDescriptor = panDescriptor;
+            beaconParams.m_sduLength = p->GetSize();
+            beaconParams.m_sdu = p;
+            m_mlmeBeaconNotifyIndicationCallback(beaconParams);
+        }
+    }
+}
+
+void
 LrWpanMac::CheckQueue()
 {
     NS_LOG_FUNCTION(this);
@@ -1875,15 +2111,29 @@
         if (m_macPromiscuousMode)
         {
             // level 2 filtering
-            if (receivedMacHdr.GetDstAddrMode() == SHORT_ADDR)
+            if (receivedMacHdr.GetSrcAddrMode() == SHORT_ADDR &&
+                receivedMacHdr.GetDstAddrMode() == SHORT_ADDR)
             {
-                NS_LOG_DEBUG("Packet from " << params.m_srcAddr);
-                NS_LOG_DEBUG("Packet to " << params.m_dstAddr);
+                NS_LOG_DEBUG("Packet from [" << params.m_srcAddr << "] to [" << params.m_dstAddr
+                                             << "]");
             }
-            else if (receivedMacHdr.GetDstAddrMode() == EXT_ADDR)
+            else if (receivedMacHdr.GetSrcAddrMode() == EXT_ADDR &&
+                     receivedMacHdr.GetDstAddrMode() == EXT_ADDR)
             {
-                NS_LOG_DEBUG("Packet from " << params.m_srcExtAddr);
-                NS_LOG_DEBUG("Packet to " << params.m_dstExtAddr);
+                NS_LOG_DEBUG("Packet from [" << params.m_srcExtAddr << "] to ["
+                                             << params.m_dstExtAddr << "]");
+            }
+            else if (receivedMacHdr.GetSrcAddrMode() == SHORT_ADDR &&
+                     receivedMacHdr.GetDstAddrMode() == EXT_ADDR)
+            {
+                NS_LOG_DEBUG("Packet from [" << params.m_srcAddr << "] to [" << params.m_dstExtAddr
+                                             << "]");
+            }
+            else if (receivedMacHdr.GetSrcAddrMode() == EXT_ADDR &&
+                     receivedMacHdr.GetDstAddrMode() == SHORT_ADDR)
+            {
+                NS_LOG_DEBUG("Packet from [" << params.m_srcExtAddr << "] to [" << params.m_dstAddr
+                                             << "]");
             }
 
             // TODO: Fix here, this should trigger different Indication Callbacks
@@ -2069,223 +2319,34 @@
                                                            receivedMacHdr.GetSeqNum());
                 }
 
-                if (receivedMacHdr.GetDstAddrMode() == SHORT_ADDR)
+                if (receivedMacHdr.GetSrcAddrMode() == SHORT_ADDR &&
+                    receivedMacHdr.GetDstAddrMode() == SHORT_ADDR)
+                {
+                    NS_LOG_DEBUG("Packet from [" << params.m_srcAddr << "] to [" << params.m_dstAddr
+                                                 << "]");
+                }
+                else if (receivedMacHdr.GetSrcAddrMode() == EXT_ADDR &&
+                         receivedMacHdr.GetDstAddrMode() == EXT_ADDR)
+                {
+                    NS_LOG_DEBUG("Packet from [" << params.m_srcExtAddr << "] to ["
+                                                 << params.m_dstExtAddr << "]");
+                }
+                else if (receivedMacHdr.GetSrcAddrMode() == SHORT_ADDR &&
+                         receivedMacHdr.GetDstAddrMode() == EXT_ADDR)
                 {
-                    NS_LOG_DEBUG("Packet from " << params.m_srcAddr);
-                    NS_LOG_DEBUG("Packet to " << params.m_dstAddr);
+                    NS_LOG_DEBUG("Packet from [" << params.m_srcAddr << "] to ["
+                                                 << params.m_dstExtAddr << "]");
                 }
-                else if (receivedMacHdr.GetDstAddrMode() == EXT_ADDR)
+                else if (receivedMacHdr.GetSrcAddrMode() == EXT_ADDR &&
+                         receivedMacHdr.GetDstAddrMode() == SHORT_ADDR)
                 {
-                    NS_LOG_DEBUG("Packet from " << params.m_srcExtAddr);
-                    NS_LOG_DEBUG("Packet to " << params.m_dstExtAddr);
+                    NS_LOG_DEBUG("Packet from [" << params.m_srcExtAddr << "] to ["
+                                                 << params.m_dstAddr << "]");
                 }
 
                 if (receivedMacHdr.IsBeacon())
                 {
-                    // The received beacon size in symbols
-                    // Beacon = 5 bytes Sync Header (SHR) +  1 byte PHY header (PHR) + PSDU (default
-                    // 17 bytes)
-                    m_rxBeaconSymbols = m_phy->GetPhySHRDuration() +
-                                        1 * m_phy->GetPhySymbolsPerOctet() +
-                                        (originalPkt->GetSize() * m_phy->GetPhySymbolsPerOctet());
-
-                    // The start of Rx beacon time and start of the Incoming superframe Active
-                    // Period
-                    m_macBeaconRxTime =
-                        Simulator::Now() - Seconds(double(m_rxBeaconSymbols) / symbolRate);
-
-                    NS_LOG_DEBUG("Beacon Received; forwarding up (m_macBeaconRxTime: "
-                                 << m_macBeaconRxTime.As(Time::S) << ")");
-
-                    BeaconPayloadHeader receivedMacPayload;
-                    p->RemoveHeader(receivedMacPayload);
-
-                    // Fill the PAN descriptor
-                    PanDescriptor panDescriptor;
-
-                    if (receivedMacHdr.GetSrcAddrMode() == SHORT_ADDR)
-                    {
-                        panDescriptor.m_coorAddrMode = SHORT_ADDR;
-                        panDescriptor.m_coorShortAddr = receivedMacHdr.GetShortSrcAddr();
-                    }
-                    else
-                    {
-                        panDescriptor.m_coorAddrMode = EXT_ADDR;
-                        panDescriptor.m_coorExtAddr = receivedMacHdr.GetExtSrcAddr();
-                    }
-
-                    panDescriptor.m_coorPanId = receivedMacHdr.GetSrcPanId();
-                    panDescriptor.m_gtsPermit = receivedMacPayload.GetGtsFields().GetGtsPermit();
-                    panDescriptor.m_linkQuality = lqi;
-                    panDescriptor.m_logChPage = m_phy->GetCurrentPage();
-                    panDescriptor.m_logCh = m_phy->GetCurrentChannelNum();
-                    panDescriptor.m_superframeSpec = receivedMacPayload.GetSuperframeSpecField();
-                    panDescriptor.m_timeStamp = m_macBeaconRxTime;
-
-                    // Process beacon when device belongs to a PAN (associated device)
-                    if (!m_scanEvent.IsPending() && m_macPanId == receivedMacHdr.GetDstPanId())
-                    {
-                        // We need to make sure to cancel any possible ongoing unslotted CSMA/CA
-                        // operations when receiving a beacon (e.g. Those taking place at the
-                        // beginning of an Association).
-                        m_csmaCa->Cancel();
-
-                        SuperframeField incomingSuperframe(
-                            receivedMacPayload.GetSuperframeSpecField());
-
-                        m_incomingBeaconOrder = incomingSuperframe.GetBeaconOrder();
-                        m_incomingSuperframeOrder = incomingSuperframe.GetFrameOrder();
-                        m_incomingFnlCapSlot = incomingSuperframe.GetFinalCapSlot();
-
-                        if (m_incomingBeaconOrder < 15)
-                        {
-                            // Start Beacon-enabled mode
-                            m_csmaCa->SetSlottedCsmaCa();
-                            m_incomingBeaconInterval =
-                                (static_cast<uint32_t>(1 << m_incomingBeaconOrder)) *
-                                lrwpan::aBaseSuperframeDuration;
-                            m_incomingSuperframeDuration =
-                                lrwpan::aBaseSuperframeDuration *
-                                (static_cast<uint32_t>(1 << m_incomingSuperframeOrder));
-
-                            if (incomingSuperframe.IsBattLifeExt())
-                            {
-                                m_csmaCa->SetBatteryLifeExtension(true);
-                            }
-                            else
-                            {
-                                m_csmaCa->SetBatteryLifeExtension(false);
-                            }
-
-                            // TODO: get Incoming frame GTS Fields here
-
-                            // Begin CAP on the current device using info from
-                            // the Incoming superframe
-                            NS_LOG_DEBUG("Incoming superframe Active Portion "
-                                         << "(Beacon + CAP + CFP): " << m_incomingSuperframeDuration
-                                         << " symbols");
-
-                            m_incCapEvent = Simulator::ScheduleNow(&LrWpanMac::StartCAP,
-                                                                   this,
-                                                                   SuperframeType::INCOMING);
-                        }
-                        else
-                        {
-                            // Start non-beacon enabled mode
-                            m_csmaCa->SetUnSlottedCsmaCa();
-                        }
-
-                        m_setMacState =
-                            Simulator::ScheduleNow(&LrWpanMac::SetLrWpanMacState, this, MAC_IDLE);
-                    }
-                    else if (!m_scanEvent.IsPending() && m_macPanId == 0xFFFF)
-                    {
-                        NS_LOG_DEBUG(this << " Device not associated, cannot process beacon");
-                    }
-
-                    if (m_macAutoRequest)
-                    {
-                        if (p->GetSize() > 0)
-                        {
-                            if (!m_mlmeBeaconNotifyIndicationCallback.IsNull())
-                            {
-                                // The beacon contains payload, send the beacon notification.
-                                MlmeBeaconNotifyIndicationParams beaconParams;
-                                beaconParams.m_bsn = receivedMacHdr.GetSeqNum();
-                                beaconParams.m_panDescriptor = panDescriptor;
-                                beaconParams.m_sduLength = p->GetSize();
-                                beaconParams.m_sdu = p;
-                                m_mlmeBeaconNotifyIndicationCallback(beaconParams);
-                            }
-                        }
-
-                        if (m_scanEvent.IsPending())
-                        {
-                            // Channel scanning is taking place, save only unique PAN descriptors
-                            bool descriptorExists = false;
-
-                            for (const auto& descriptor : m_panDescriptorList)
-                            {
-                                if (descriptor.m_coorAddrMode == SHORT_ADDR)
-                                {
-                                    // Found a coordinator in PAN descriptor list with the same
-                                    // registered short address
-                                    descriptorExists =
-                                        (descriptor.m_coorShortAddr ==
-                                             panDescriptor.m_coorShortAddr &&
-                                         descriptor.m_coorPanId == panDescriptor.m_coorPanId);
-                                }
-                                else
-                                {
-                                    // Found a coordinator in PAN descriptor list with the same
-                                    // registered extended address
-                                    descriptorExists =
-                                        (descriptor.m_coorExtAddr == panDescriptor.m_coorExtAddr &&
-                                         descriptor.m_coorPanId == panDescriptor.m_coorPanId);
-                                }
-
-                                if (descriptorExists)
-                                {
-                                    break;
-                                }
-                            }
-
-                            if (!descriptorExists)
-                            {
-                                m_panDescriptorList.emplace_back(panDescriptor);
-                            }
-                            return;
-                        }
-                        else if (m_trackingEvent.IsPending())
-                        {
-                            // check if MLME-SYNC.request was previously issued and running
-                            // Sync. is necessary to handle pending messages (indirect
-                            // transmissions)
-                            m_trackingEvent.Cancel();
-                            m_numLostBeacons = 0;
-
-                            if (m_beaconTrackingOn)
-                            {
-                                // if tracking option is on keep tracking the next beacon
-                                uint64_t searchSymbols;
-                                Time searchBeaconTime;
-
-                                searchSymbols =
-                                    (static_cast<uint64_t>(1 << m_incomingBeaconOrder)) +
-                                    1 * lrwpan::aBaseSuperframeDuration;
-                                searchBeaconTime =
-                                    Seconds(static_cast<double>(searchSymbols / symbolRate));
-                                m_trackingEvent =
-                                    Simulator::Schedule(searchBeaconTime,
-                                                        &LrWpanMac::BeaconSearchTimeout,
-                                                        this);
-                            }
-
-                            PendingAddrFields pndAddrFields;
-                            pndAddrFields = receivedMacPayload.GetPndAddrFields();
-
-                            // TODO: Ignore pending data, and do not send data command request if
-                            // the address is in the GTS list.
-                            //       If the address is not in the GTS list, then  check if the
-                            //       address is in the short address pending list or in the extended
-                            //       address pending list and send a data command request.
-                        }
-                    }
-                    else
-                    {
-                        // m_macAutoRequest is FALSE
-                        // Data command request are not send, only the beacon notification.
-                        // see IEEE 802.15.4-2011 Section 6.2.4.1
-                        if (!m_mlmeBeaconNotifyIndicationCallback.IsNull())
-                        {
-                            MlmeBeaconNotifyIndicationParams beaconParams;
-                            beaconParams.m_bsn = receivedMacHdr.GetSeqNum();
-                            beaconParams.m_panDescriptor = panDescriptor;
-                            beaconParams.m_sduLength = p->GetSize();
-                            beaconParams.m_sdu = p;
-                            m_mlmeBeaconNotifyIndicationCallback(beaconParams);
-                        }
-                    }
+                    ReceiveBeacon(lqi, originalPkt);
                 }
                 else if (receivedMacHdr.IsCommand())
                 {
@@ -2299,7 +2360,17 @@
                     case CommandPayloadHeader::BEACON_REQ:
                         if (m_csmaCa->IsUnSlottedCsmaCa() && m_coor)
                         {
-                            SendOneBeacon();
+                            // Jitter = Between 0 and 2 aUnitBackoffPeriods
+                            // (0, 320us or 640us in 2.4Ghz O-QPSK)
+                            // While this jitter is not described by the standard,
+                            // it reduces the probability of collisions in beacons
+                            // transmitted as a result of a beacon request
+                            Time jitter =
+                                Seconds(static_cast<double>(m_uniformVar->GetInteger(0, 3) *
+                                                            aUnitBackoffPeriod) /
+                                        symbolRate);
+
+                            Simulator::Schedule((jitter), &LrWpanMac::SendOneBeacon, this);
                         }
                         else
                         {
@@ -2958,6 +3029,15 @@
     os << "\n";
 }
 
+int64_t
+LrWpanMac::AssignStreams(int64_t stream)
+{
+    NS_LOG_FUNCTION(this);
+    m_uniformVar->SetStream(stream);
+    m_csmaCa->AssignStreams(stream + 1);
+    return 2;
+}
+
 void
 LrWpanMac::RemovePendTxQElement(Ptr<Packet> p)
 {
@@ -3040,7 +3120,18 @@
                 }
 
                 ifsWaitTime = Seconds(static_cast<double>(GetIfsSize()) / symbolRate);
-                m_txPkt = nullptr;
+
+                if (m_csmaCa->IsSlottedCsmaCa())
+                {
+                    // The beacon was sent immediately in beacon-enabled mode
+                    m_txPkt = nullptr;
+                }
+                else
+                {
+                    // The beacon was sent using CSMA/CA as a result of a beacon request
+                    // therefore, remove it from TX Queue
+                    RemoveFirstTxQElement();
+                }
             }
             else if (macHdr.IsAckReq()) // We have sent a regular data packet, check if we have to
                                         // wait  for an ACK.
@@ -3527,6 +3618,32 @@
             NS_LOG_ERROR("Invalid channel parameter in MLME-associate");
         }
     }
+    else
+    {
+        if (!m_mlmeSetConfirmCallback.IsNull())
+        {
+            MlmeSetConfirmParams confirmParams;
+            if (status == PhyEnumeration::IEEE_802_15_4_PHY_SUCCESS)
+            {
+                confirmParams.m_status = MacStatus::SUCCESS;
+            }
+            else
+            {
+                confirmParams.m_status = MacStatus::UNSUPPORTED_ATTRIBUTE;
+            }
+
+            if (id == PhyPibAttributeIdentifier::phyCurrentChannel)
+            {
+                confirmParams.id = MacPibAttributeIdentifier::pCurrentChannel;
+            }
+            else if (id == PhyPibAttributeIdentifier::phyCurrentPage)
+            {
+                confirmParams.id = MacPibAttributeIdentifier::pCurrentPage;
+            }
+
+            m_mlmeSetConfirmCallback(confirmParams);
+        }
+    }
 }
 
 void
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac.h ns-3.43/src/lr-wpan/model/lr-wpan-mac.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *  Gary Pei <guangyu.pei@boeing.com>
@@ -520,11 +509,11 @@
     SequenceNumber8 m_macBsn;
 
     /**
-     * The contents of the beacon payload.
+     * The set with the contents of the beacon payload.
      * This value is set directly by the MLME-SET primitive.
      * See IEEE 802.15.4-2011, section 6.4.2, Table 52.
      */
-    Ptr<Packet> m_macBeaconPayload;
+    std::vector<uint8_t> m_macBeaconPayload;
 
     /**
      * The length, in octets, of the beacon payload.
@@ -668,14 +657,14 @@
     /**
      * Check if the packet destination is its coordinator
      *
-     *\param mac The coordinator short MAC Address
+     * \param mac The coordinator short MAC Address
      */
     void SetAssociatedCoor(Mac16Address mac);
 
     /**
      * Check if the packet destination is its coordinator
      *
-     *\param mac The coordinator extended MAC Address
+     * \param mac The coordinator extended MAC Address
      */
     void SetAssociatedCoor(Mac64Address mac);
 
@@ -689,15 +678,15 @@
     /**
      * Obtain the number of symbols in the packet which is currently being sent by the MAC layer.
      *
-     *\return packet number of symbols
-     * */
+     * \return packet number of symbols
+     */
     uint64_t GetTxPacketSymbols();
 
     /**
      * Check if the packet to transmit requires acknowledgment
      *
-     *\return True if the Tx packet requires acknowledgment
-     * */
+     * \return True if the Tx packet requires acknowledgment
+     */
     bool IsTxAckReq();
 
     /**
@@ -713,6 +702,15 @@
     void PrintTxQueue(std::ostream& os) const;
 
     /**
+     * Assign a fixed random variable stream number to the random variables
+     * used by this model.  Return the number of streams that have been assigned.
+     *
+     * \param stream first stream index to use
+     * \return the number of stream indices assigned by this model
+     */
+    int64_t AssignStreams(int64_t stream);
+
+    /**
      * TracedCallback signature for sent packets.
      *
      * \param [in] packet The packet.
@@ -730,6 +728,7 @@
      * TracedValue \c MacStateValue. The \c MacState TracedCallback will
      * be removed in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*StateTracedCallback)(MacState oldState, MacState newState);
 
   protected:
@@ -857,6 +856,14 @@
     void BeaconSearchTimeout();
 
     /**
+     * Used to process the reception of a beacon packet.
+     *
+     * \param lqi The value of the link quality indicator (LQI) of the received packet
+     * \param p The packet containing the MAC header and the beacon payload information
+     */
+    void ReceiveBeacon(uint8_t lqi, Ptr<Packet> p);
+
+    /**
      * Send an acknowledgment packet for the given sequence number.
      *
      * \param seqno the sequence number for the ACK
@@ -1121,6 +1128,7 @@
      * removed in a future release,  Instead, use the \c MacStateValue
      * TracedValue.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<MacState, MacState> m_macStateLogger;
 
     /**
@@ -1323,6 +1331,11 @@
      * Scheduler event for the end of a ED channel scan.
      */
     EventId m_scanEnergyEvent;
+
+    /**
+     * The uniform random variable used in this mac layer
+     */
+    Ptr<UniformRandomVariable> m_uniformVar;
 };
 } // namespace lrwpan
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac-header.cc ns-3.43/src/lr-wpan/model/lr-wpan-mac-header.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac-header.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac-header.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: kwong yin <kwong-sang.yin@boeing.com>
  */
@@ -444,7 +433,8 @@
 TypeId
 LrWpanMacHeader::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::LrWpanMacHeader")
+    static TypeId tid = TypeId("ns3::lrwpan::LrWpanMacHeader")
+                            .AddDeprecatedName("ns3::LrWpanMacHeader")
                             .SetParent<Header>()
                             .SetGroupName("LrWpan")
                             .AddConstructor<LrWpanMacHeader>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac-header.h ns-3.43/src/lr-wpan/model/lr-wpan-mac-header.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac-header.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac-header.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *  Author: kwong yin <kwong-sang.yin@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac-pl-headers.cc ns-3.43/src/lr-wpan/model/lr-wpan-mac-pl-headers.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac-pl-headers.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac-pl-headers.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Ritsumeikan University, Shiga, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *  Author: Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
  */
@@ -40,7 +29,8 @@
 TypeId
 BeaconPayloadHeader::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::BeaconPayloadHeader")
+    static TypeId tid = TypeId("ns3::lrwpan::BeaconPayloadHeader")
+                            .AddDeprecatedName("ns3::BeaconPayloadHeader")
                             .SetParent<Header>()
                             .SetGroupName("LrWpan")
                             .AddConstructor<BeaconPayloadHeader>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac-pl-headers.h ns-3.43/src/lr-wpan/model/lr-wpan-mac-pl-headers.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac-pl-headers.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac-pl-headers.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *  Author: Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac-trailer.cc ns-3.43/src/lr-wpan/model/lr-wpan-mac-trailer.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac-trailer.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac-trailer.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  kwong yin <kwong-sang.yin@boeing.com>
@@ -42,7 +31,8 @@
 TypeId
 LrWpanMacTrailer::GetTypeId()
 {
-    static TypeId tid = TypeId("ns3::LrWpanMacTrailer")
+    static TypeId tid = TypeId("ns3::lrwpan::LrWpanMacTrailer")
+                            .AddDeprecatedName("ns3::LrWpanMacTrailer")
                             .SetParent<Trailer>()
                             .SetGroupName("LrWpan")
                             .AddConstructor<LrWpanMacTrailer>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-mac-trailer.h ns-3.43/src/lr-wpan/model/lr-wpan-mac-trailer.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-mac-trailer.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-mac-trailer.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  kwong yin <kwong-sang.yin@boeing.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-net-device.cc ns-3.43/src/lr-wpan/model/lr-wpan-net-device.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-net-device.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-net-device.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Tom Henderson <thomas.r.henderson@boeing.com>
@@ -45,7 +34,8 @@
 LrWpanNetDevice::GetTypeId()
 {
     static TypeId tid =
-        TypeId("ns3::LrWpanNetDevice")
+        TypeId("ns3::lrwpan::LrWpanNetDevice")
+            .AddDeprecatedName("ns3::LrWpanNetDevice")
             .SetParent<NetDevice>()
             .SetGroupName("LrWpan")
             .AddConstructor<LrWpanNetDevice>()
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-net-device.h ns-3.43/src/lr-wpan/model/lr-wpan-net-device.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-net-device.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-net-device.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Tom Henderson <thomas.r.henderson@boeing.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-phy.cc ns-3.43/src/lr-wpan/model/lr-wpan-phy.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-phy.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-phy.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Gary Pei <guangyu.pei@boeing.com>
@@ -147,7 +136,8 @@
 LrWpanPhy::GetTypeId()
 {
     static TypeId tid =
-        TypeId("ns3::LrWpanPhy")
+        TypeId("ns3::lrwpan::LrWpanPhy")
+            .AddDeprecatedName("ns3::LrWpanPhy")
             .SetParent<SpectrumPhy>()
             .SetGroupName("LrWpan")
             .AddConstructor<LrWpanPhy>()
@@ -166,7 +156,7 @@
             .AddTraceSource("TrxState",
                             "The state of the transceiver",
                             MakeTraceSourceAccessor(&LrWpanPhy::m_trxStateLogger),
-                            "ns3::LrWpanPhy::StateTracedCallback")
+                            "ns3::lrwpan::LrWpanPhy::StateTracedCallback")
             .AddTraceSource("PhyTxBegin",
                             "Trace source indicating a packet has "
                             "begun transmitting over the channel medium",
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-phy.h ns-3.43/src/lr-wpan/model/lr-wpan-phy.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-phy.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-phy.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Gary Pei <guangyu.pei@boeing.com>
@@ -567,6 +556,7 @@
      * TracedValue \c TrxStateValue.  The \c TrxState TracedCallback will
      * be removed in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*StateTracedCallback)(Time time,
                                         PhyEnumeration oldState,
                                         PhyEnumeration newState);
@@ -749,6 +739,7 @@
      * TracedValue \c TrxStateValue.  This TracedCallback will
      * be removed in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Time, PhyEnumeration, PhyEnumeration> m_trxStateLogger;
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc ns-3.43/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h ns-3.43/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-spectrum-signal-parameters.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc ns-3.43/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc
--- ns-3.42/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-spectrum-value-helper.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h ns-3.43/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h
--- ns-3.42/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/model/lr-wpan-spectrum-value-helper.h	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-ack-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-ack-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-ack-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-ack-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Fraunhofer FKIE
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
@@ -192,11 +181,13 @@
     std::string asciiPrefix;
 
     // Create 2 nodes, and a NetDevice for each one
-    Ptr<Node> n0 = CreateObject<Node>();
-    Ptr<Node> n1 = CreateObject<Node>();
-
-    m_dev0 = CreateObject<LrWpanNetDevice>();
-    m_dev1 = CreateObject<LrWpanNetDevice>();
+    NodeContainer nodes;
+    nodes.Create(2);
+    helper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    helper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
+    NetDeviceContainer devices = helper.Install(nodes);
+    m_dev0 = devices.Get(0)->GetObject<LrWpanNetDevice>();
+    m_dev1 = devices.Get(1)->GetObject<LrWpanNetDevice>();
 
     // Make random variable stream assignment deterministic
     m_dev0->AssignStreams(0);
@@ -209,22 +200,6 @@
     m_dev0->GetMac()->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:01"));
     m_dev1->GetMac()->SetExtendedAddress(Mac64Address("00:00:00:00:00:00:00:02"));
 
-    // Each device must be attached to the same channel
-    Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel>();
-    Ptr<LogDistancePropagationLossModel> propModel =
-        CreateObject<LogDistancePropagationLossModel>();
-    Ptr<ConstantSpeedPropagationDelayModel> delayModel =
-        CreateObject<ConstantSpeedPropagationDelayModel>();
-    channel->AddPropagationLossModel(propModel);
-    channel->SetPropagationDelayModel(delayModel);
-
-    m_dev0->SetChannel(channel);
-    m_dev1->SetChannel(channel);
-
-    // To complete configuration, a LrWpanNetDevice must be added to a node
-    n0->AddDevice(m_dev0);
-    n1->AddDevice(m_dev1);
-
     Ptr<ConstantPositionMobilityModel> sender0Mobility =
         CreateObject<ConstantPositionMobilityModel>();
     sender0Mobility->SetPosition(Vector(0, 0, 0));
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-cca-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-cca-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-cca-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-cca-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,21 +1,11 @@
 /*
  * Copyright (c) 2014 Fraunhofer FKIE
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
+ *  Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
 
 #include "ns3/rng-seed-manager.h"
@@ -35,13 +25,13 @@
 using namespace ns3;
 using namespace ns3::lrwpan;
 
-NS_LOG_COMPONENT_DEFINE("lr-wpan-clear-channel-assessment-test");
+NS_LOG_COMPONENT_DEFINE("lr-wpan-cca-test");
 
 /**
  * \ingroup lr-wpan-test
  * \ingroup tests
  *
- * \brief LrWpan CCA Test
+ * LrWpan CCA Test
  */
 class LrWpanCcaTestCase : public TestCase
 {
@@ -50,57 +40,63 @@
 
   private:
     /**
-     * \brief Function called when PlmeCcaConfirm is hit.
-     * \param testcase The TestCase.
-     * \param device The LrWpanNetDevice.
-     * \param status The device status.
+     * Function called when PlmeCcaConfirm is hit.
+     *
+     * @param testcase The TestCase.
+     * @param device The LrWpanNetDevice.
+     * @param status The device status.
      */
     static void PlmeCcaConfirm(LrWpanCcaTestCase* testcase,
                                Ptr<LrWpanNetDevice> device,
                                PhyEnumeration status);
     /**
-     * \brief Function called when PhyTxBegin is hit.
-     * \param testcase The TestCase.
-     * \param device The LrWpanNetDevice.
-     * \param packet The packet.
+     * Function called when PhyTxBegin is hit.
+     *
+     * @param testcase The TestCase.
+     * @param device The LrWpanNetDevice.
+     * @param packet The packet.
      */
     static void PhyTxBegin(LrWpanCcaTestCase* testcase,
                            Ptr<LrWpanNetDevice> device,
                            Ptr<const Packet> packet);
     /**
-     * \brief Function called when PhyTxEnd is hit.
-     * \param testcase The TestCase.
-     * \param device The LrWpanNetDevice.
-     * \param packet The packet.
+     * Function called when PhyTxEnd is hit.
+     *
+     * @param testcase The TestCase.
+     * @param device The LrWpanNetDevice.
+     * @param packet The packet.
      */
     static void PhyTxEnd(LrWpanCcaTestCase* testcase,
                          Ptr<LrWpanNetDevice> device,
                          Ptr<const Packet> packet);
     /**
-     * \brief Function called when PhyRxBegin is hit.
-     * \param testcase The TestCase.
-     * \param device The LrWpanNetDevice.
-     * \param packet The packet.
+     * Function called when PhyRxBegin is hit.
+     *
+     * @param testcase The TestCase.
+     * @param device The LrWpanNetDevice.
+     * @param packet The packet.
      */
     static void PhyRxBegin(LrWpanCcaTestCase* testcase,
                            Ptr<LrWpanNetDevice> device,
                            Ptr<const Packet> packet);
     /**
-     * \brief Function called when PhyRxEnd is hit.
-     * \param testcase The TestCase.
-     * \param device The LrWpanNetDevice.
-     * \param packet The packet.
-     * \param sinr The received SINR.
+     * Function called when PhyRxEnd is hit.
+     *
+     * @param testcase The TestCase.
+     * @param device The LrWpanNetDevice.
+     * @param packet The packet.
+     * @param sinr The received SINR.
      */
     static void PhyRxEnd(LrWpanCcaTestCase* testcase,
                          Ptr<LrWpanNetDevice> device,
                          Ptr<const Packet> packet,
                          double sinr);
     /**
-     * \brief Function called when PhyRxDrop is hit.
-     * \param testcase The TestCase.
-     * \param device The LrWpanNetDevice.
-     * \param packet The packet.
+     * Function called when PhyRxDrop is hit.
+     *
+     * @param testcase The TestCase.
+     * @param device The LrWpanNetDevice.
+     * @param packet The packet.
      */
     static void PhyRxDrop(LrWpanCcaTestCase* testcase,
                           Ptr<LrWpanNetDevice> device,
@@ -356,7 +352,245 @@
  * \ingroup lr-wpan-test
  * \ingroup tests
  *
- * \brief LrWpan ACK TestSuite
+ * \brief Test the sensitivity of the CSMA/CA clear channel assestment (CCA)
+ */
+class CCAVulnerableWindowTest : public TestCase
+{
+  public:
+    CCAVulnerableWindowTest();
+    ~CCAVulnerableWindowTest() override;
+
+  private:
+    /**
+     * Function called when a Data indication is invoked
+     *
+     * @param params MCPS data indication parameters
+     * @param p packet
+     */
+    void DataIndication(McpsDataIndicationParams params, Ptr<Packet> p);
+
+    void DoRun() override;
+
+    uint8_t countPackets; //!< Count the number of packets received in the test
+};
+
+CCAVulnerableWindowTest::CCAVulnerableWindowTest()
+    : TestCase("Test CCA false positives vulnerable window caused by turnAround")
+{
+}
+
+CCAVulnerableWindowTest::~CCAVulnerableWindowTest()
+{
+}
+
+void
+CCAVulnerableWindowTest::DataIndication(McpsDataIndicationParams params, Ptr<Packet> p)
+{
+    countPackets++;
+}
+
+void
+CCAVulnerableWindowTest::DoRun()
+{
+    /*
+     *  CCA Vulnerable Window:
+     *
+     *  Topology
+     *         Node 0             Node 1
+     *         (dev 0) <--------  (dev1)
+     *               ^
+     *               |
+     *               |------Node2
+     *                    (dev2)
+     *
+     *  Transmission of packets over time:
+     *
+     *             Node1 CCA |  Node 1 TurnAround Rx->Tx | Node1 Packet Tx
+     *                128us  |       192us               |
+     *                                                                             = Collision
+     *                   Node2 CCA |  Node 2 TurnAround Rx->Tx | Node2 Packet Tx
+     *                      128us  |       192us               |
+     * Time ---------------------------------------------------------------->
+     *
+     *
+     *  If 2 packets are transmitted within 192 us from each other, CSMA/CA will give a false
+     * positive and cause a collision even with CCA active. This is because there is a vulnerable
+     * window due to the turn around (RX_ON->TX_ON) between the CCA and the actual transmission of
+     * the packet. During this time, the 2nd node's CCA will assume the channel IDLE because there
+     * is no transmission (the first node is in its turnaround before transmission).
+     *
+     *  To demonstrate this, In this test, Node 1 transmits a packet to Node 0 at second 1.
+     *  Node 0 Attempts transmitting a packet to Node 2 at second and 1.000128 which falls under the
+     * vulnerable window (1 and 1.000192 seconds). A collision occurs and both packets failed to be
+     * received. All 3 nodes are within each other communication range and csma/ca backoff periods
+     * are turn off to make this test reprodusable.
+     *
+     *  The test is repeated but outside the vulnerable window, in this case CSMA/CA works as
+     * intended: The CCA of node 2 detects the first packet in the medium and defers the
+     * transmission. Avoiding effectively the collision.
+     */
+
+    LogComponentEnableAll(LogLevel(LOG_PREFIX_TIME | LOG_PREFIX_FUNC | LOG_PREFIX_NODE));
+    LogComponentEnable("LrWpanMac", LOG_LEVEL_DEBUG);
+
+    // Create 3 nodes, and a NetDevice for each one
+    Ptr<Node> n0 = CreateObject<Node>();
+    Ptr<Node> n1 = CreateObject<Node>();
+    Ptr<Node> n2 = CreateObject<Node>();
+
+    Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice>();
+    Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice>();
+    Ptr<LrWpanNetDevice> dev2 = CreateObject<LrWpanNetDevice>();
+
+    // Make random variable stream assignment deterministic
+    dev0->AssignStreams(0);
+    dev1->AssignStreams(10);
+    dev2->AssignStreams(20);
+
+    dev0->GetMac()->SetExtendedAddress("00:00:00:00:00:00:CA:FE");
+    dev1->GetMac()->SetExtendedAddress("00:00:00:00:00:00:00:01");
+    dev2->GetMac()->SetExtendedAddress("00:00:00:00:00:00:00:02");
+
+    dev0->SetAddress(Mac16Address("00:00"));
+    dev1->SetAddress(Mac16Address("00:01"));
+    dev2->SetAddress(Mac16Address("00:02"));
+
+    // Note: By default all devices are in the PANID: 0
+
+    // Each device must be attached to the same channel
+    Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel>();
+    Ptr<LogDistancePropagationLossModel> propModel =
+        CreateObject<LogDistancePropagationLossModel>();
+    Ptr<ConstantSpeedPropagationDelayModel> delayModel =
+        CreateObject<ConstantSpeedPropagationDelayModel>();
+    channel->AddPropagationLossModel(propModel);
+    channel->SetPropagationDelayModel(delayModel);
+
+    dev0->SetChannel(channel);
+    dev1->SetChannel(channel);
+    dev2->SetChannel(channel);
+
+    // To complete configuration, a LrWpanNetDevice must be added to a node
+    n0->AddDevice(dev0);
+    n1->AddDevice(dev1);
+    n2->AddDevice(dev2);
+
+    // Set mobility
+    Ptr<ConstantPositionMobilityModel> dev0Mobility = CreateObject<ConstantPositionMobilityModel>();
+    dev0Mobility->SetPosition(Vector(0, 0, 0));
+    dev0->GetPhy()->SetMobility(dev0Mobility);
+
+    Ptr<ConstantPositionMobilityModel> dev1Mobility = CreateObject<ConstantPositionMobilityModel>();
+    dev1Mobility->SetPosition(Vector(10, 0, 0));
+    dev1->GetPhy()->SetMobility(dev1Mobility);
+
+    Ptr<ConstantPositionMobilityModel> dev2Mobility = CreateObject<ConstantPositionMobilityModel>();
+    dev2Mobility->SetPosition(Vector(5, 5, 0));
+    dev2->GetPhy()->SetMobility(dev2Mobility);
+
+    // Do a CCA without a previous RandomBackoffDelay
+    // This is set to make the test reprodusable.
+    dev0->GetCsmaCa()->SetMacMinBE(0);
+    dev1->GetCsmaCa()->SetMacMinBE(0);
+    dev2->GetCsmaCa()->SetMacMinBE(0);
+
+    // Callback hooks to MAC layer
+    dev0->GetMac()->SetMcpsDataIndicationCallback(
+        MakeCallback(&CCAVulnerableWindowTest::DataIndication, this));
+
+    dev1->GetMac()->SetMcpsDataIndicationCallback(
+        MakeCallback(&CCAVulnerableWindowTest::DataIndication, this));
+
+    dev2->GetMac()->SetMcpsDataIndicationCallback(
+        MakeCallback(&CCAVulnerableWindowTest::DataIndication, this));
+
+    // --------------------------------------------------------------------------
+    /// Outside the vulnerable window, 2 packets are meant to be received
+    countPackets = 0;
+
+    // Device 1 send data to Device 0
+    Ptr<Packet> p0 = Create<Packet>(50);
+    McpsDataRequestParams params;
+    params.m_dstPanId = 0;
+    params.m_srcAddrMode = SHORT_ADDR;
+    params.m_dstAddrMode = SHORT_ADDR;
+    params.m_dstAddr = Mac16Address("00:00");
+    params.m_msduHandle = 0;
+    Simulator::ScheduleWithContext(1,
+                                   Seconds(1),
+                                   &LrWpanMac::McpsDataRequest,
+                                   dev1->GetMac(),
+                                   params,
+                                   p0);
+
+    // Device 0 send data to Device 2
+    Ptr<Packet> p1 = Create<Packet>(50);
+    McpsDataRequestParams params1;
+    params1.m_dstPanId = 0;
+    params1.m_srcAddrMode = SHORT_ADDR;
+    params1.m_dstAddrMode = SHORT_ADDR;
+    params1.m_dstAddr = Mac16Address("00:02");
+    params1.m_msduHandle = 1;
+    Simulator::ScheduleWithContext(1,
+                                   Seconds(1.000193),
+                                   &LrWpanMac::McpsDataRequest,
+                                   dev0->GetMac(),
+                                   params1,
+                                   p1);
+
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(countPackets, 2, "2 Packets are meant to be received");
+    // --------------------------------------------------------------------------
+    // Within the vulnerable window, a collion occurs and no
+    // packets are meant to be received
+    countPackets = 0;
+
+    // Device 1 send data to Device 0
+    Ptr<Packet> p3 = Create<Packet>(50);
+    McpsDataRequestParams params3;
+    params3.m_dstPanId = 0;
+    params3.m_srcAddrMode = SHORT_ADDR;
+    params3.m_dstAddrMode = SHORT_ADDR;
+    params3.m_dstAddr = Mac16Address("00:00");
+    params3.m_msduHandle = 0;
+    Simulator::ScheduleWithContext(1,
+                                   Seconds(1),
+                                   &LrWpanMac::McpsDataRequest,
+                                   dev1->GetMac(),
+                                   params3,
+                                   p3);
+
+    // Device 0 send data to Device 2
+    // This devices sends a second packet in less that 192us (turnaround time)
+    // apart from the first packet transmission sent by Device 1
+    Ptr<Packet> p4 = Create<Packet>(50);
+    McpsDataRequestParams params4;
+    params4.m_dstPanId = 0;
+    params4.m_srcAddrMode = SHORT_ADDR;
+    params4.m_dstAddrMode = SHORT_ADDR;
+    params4.m_dstAddr = Mac16Address("00:02");
+    params4.m_msduHandle = 1;
+    Simulator::ScheduleWithContext(1,
+                                   Seconds(1.000121),
+                                   &LrWpanMac::McpsDataRequest,
+                                   dev0->GetMac(),
+                                   params4,
+                                   p4);
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(countPackets,
+                          0,
+                          "Collision is meant to happen and no packets should be received");
+
+    Simulator::Destroy();
+}
+
+/**
+ * \ingroup lr-wpan-test
+ * \ingroup tests
+ *
+ * LrWpan ACK TestSuite
  */
 class LrWpanCcaTestSuite : public TestSuite
 {
@@ -365,9 +599,10 @@
 };
 
 LrWpanCcaTestSuite::LrWpanCcaTestSuite()
-    : TestSuite("lr-wpan-clear-channel-assessment", Type::UNIT)
+    : TestSuite("lr-wpan-cca-test", Type::UNIT)
 {
     AddTestCase(new LrWpanCcaTestCase, TestCase::Duration::QUICK);
+    AddTestCase(new CCAVulnerableWindowTest, TestCase::Duration::QUICK);
 }
 
 static LrWpanCcaTestSuite g_lrWpanCcaTestSuite; //!< Static variable for test initialization
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-collision-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-collision-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-collision-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-collision-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-ed-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-ed-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-ed-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-ed-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Fraunhofer FKIE
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Sascha Alexander Jopen <jopen@cs.uni-bonn.de>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-error-model-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-error-model-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-error-model-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-error-model-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Henderson <thomas.r.henderson@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-ifs-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-ifs-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-ifs-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-ifs-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-mac-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-mac-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-mac-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-mac-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Tokushima University, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
@@ -454,10 +443,13 @@
                                    params);
 
     // PAN coordinator N2 (PAN 7) is set to channel 14 in non-beacon mode but answer to beacon
-    // requests. The second coordinator includes a beacon payload of 25 bytes using the
+    // requests. The second coordinator includes a beacon payload of 2 bytes using the
     // MLME-SET.request primitive.
     Ptr<MacPibAttributes> pibAttribute = Create<MacPibAttributes>();
-    pibAttribute->macBeaconPayload = Create<Packet>(25);
+    std::vector<uint8_t> payload;
+    payload.emplace_back(1);
+    payload.emplace_back(2);
+    pibAttribute->macBeaconPayload = payload;
     coord2NetDevice->GetMac()->MlmeSetRequest(MacPibAttributeIdentifier::macBeaconPayload,
                                               pibAttribute);
 
@@ -519,8 +511,8 @@
                               " be less than Coordinator 1 (PAN 5).");
 
         NS_TEST_EXPECT_MSG_EQ(g_beaconPayloadSize,
-                              25,
-                              "Error, Beacon Payload not received or incorrect size (25 bytes)");
+                              2,
+                              "Error, Beacon Payload not received or incorrect size (2 bytes)");
     }
 
     Simulator::Destroy();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-packet-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-packet-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-packet-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-packet-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Tom Henderson <thomas.r.henderson@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-pd-plme-sap-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-pd-plme-sap-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-pd-plme-sap-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-pd-plme-sap-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-slotted-csmaca-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-slotted-csmaca-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-slotted-csmaca-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-slotted-csmaca-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Ritsumeikan University, Shiga, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:
  *  Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc ns-3.43/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc
--- ns-3.42/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc	2024-05-29 15:29:46.976073300 -0700
+++ ns-3.43/src/lr-wpan/test/lr-wpan-spectrum-value-helper-test.cc	2024-10-09 16:41:09.900656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Tom Henderson <thomas.r.henderson@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/doc/source/lte-references.rst ns-3.43/src/lte/doc/source/lte-references.rst
--- ns-3.42/src/lte/doc/source/lte-references.rst	2024-05-29 15:29:47.000073200 -0700
+++ ns-3.43/src/lte/doc/source/lte-references.rst	2024-10-09 16:41:09.928656000 -0700
@@ -134,7 +134,7 @@
 
 .. [Bbojovic2014] B. Bojovic, N. Baldo, `"A new Channel and QoS Aware
    Scheduler to enhance the capacity of Voice over LTE systems"
-   <http://www.cttc.es/publication/a-new-channel-and-qos-aware-scheduler-to-enhance-the-capacity-of-voice-over-lte-systems/>`_,
+   <https://ieeexplore.ieee.org/document/6808890>`_,
    in Proceedings of 11th International Multi-Conference on Systems,
    Signals & Devices (SSD’14), Castelldefels, 11-14 February 2014,
    Castelldefels (Spain).
@@ -142,7 +142,7 @@
 .. [Baldo2014] N. Baldo, R. Martínez, P. Dini, R. Vilalta, M. Miozzo,
    R. Casellas, R. Muñoz, `"A Testbed for Fixed Mobile Convergence
    Experimentation: ADRENALINE-LENA Integration"
-   <http://www.cttc.es/publication/a-testbed-for-fixed-mobile-convergence-experimentation-adrenaline-lena-integration/>`_,
+   <https://ieeexplore.ieee.org/document/6843180>`_,
    in Proceedings of European Wireless 2014, 14-16 May 2014, Barcelona
    (Spain).
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-cc-helper.cc ns-3.43/src/lte/examples/lena-cc-helper.cc
--- ns-3.42/src/lte/examples/lena-cc-helper.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-cc-helper.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-cqi-threshold.cc ns-3.43/src/lte/examples/lena-cqi-threshold.cc
--- ns-3.42/src/lte/examples/lena-cqi-threshold.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-cqi-threshold.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-deactivate-bearer.cc ns-3.43/src/lte/examples/lena-deactivate-bearer.cc
--- ns-3.42/src/lte/examples/lena-deactivate-bearer.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-deactivate-bearer.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gaurav Sathe <gaurav.sathe@tcs.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-distributed-ffr.cc ns-3.43/src/lte/examples/lena-distributed-ffr.cc
--- ns-3.42/src/lte/examples/lena-distributed-ffr.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-distributed-ffr.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-dual-stripe.cc ns-3.43/src/lte/examples/lena-dual-stripe.cc
--- ns-3.42/src/lte/examples/lena-dual-stripe.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-dual-stripe.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-fading.cc ns-3.43/src/lte/examples/lena-fading.cc
--- ns-3.42/src/lte/examples/lena-fading.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-fading.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-frequency-reuse.cc ns-3.43/src/lte/examples/lena-frequency-reuse.cc
--- ns-3.42/src/lte/examples/lena-frequency-reuse.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-frequency-reuse.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-intercell-interference.cc ns-3.43/src/lte/examples/lena-intercell-interference.cc
--- ns-3.42/src/lte/examples/lena-intercell-interference.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-intercell-interference.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-ipv6-addr-conf.cc ns-3.43/src/lte/examples/lena-ipv6-addr-conf.cc
--- ns-3.42/src/lte/examples/lena-ipv6-addr-conf.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-ipv6-addr-conf.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Jadavpur University, India
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manoj Kumar Rana <manoj24.rana@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-ipv6-ue-rh.cc ns-3.43/src/lte/examples/lena-ipv6-ue-rh.cc
--- ns-3.42/src/lte/examples/lena-ipv6-ue-rh.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-ipv6-ue-rh.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Jadavpur University, India
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manoj Kumar Rana <manoj24.rana@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-ipv6-ue-ue.cc ns-3.43/src/lte/examples/lena-ipv6-ue-ue.cc
--- ns-3.42/src/lte/examples/lena-ipv6-ue-ue.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-ipv6-ue-ue.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Jadavpur University, India
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manoj Kumar Rana <manoj24.rana@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-pathloss-traces.cc ns-3.43/src/lte/examples/lena-pathloss-traces.cc
--- ns-3.42/src/lte/examples/lena-pathloss-traces.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-pathloss-traces.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-profiling.cc ns-3.43/src/lte/examples/lena-profiling.cc
--- ns-3.42/src/lte/examples/lena-profiling.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-profiling.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-radio-link-failure.cc ns-3.43/src/lte/examples/lena-radio-link-failure.cc
--- ns-3.42/src/lte/examples/lena-radio-link-failure.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-radio-link-failure.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Fraunhofer ESK
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Vignesh Babu <ns3-dev@esk.fraunhofer.de>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-rem.cc ns-3.43/src/lte/examples/lena-rem.cc
--- ns-3.42/src/lte/examples/lena-rem.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-rem.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-rem-sector-antenna.cc ns-3.43/src/lte/examples/lena-rem-sector-antenna.cc
--- ns-3.42/src/lte/examples/lena-rem-sector-antenna.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-rem-sector-antenna.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-rlc-traces.cc ns-3.43/src/lte/examples/lena-rlc-traces.cc
--- ns-3.42/src/lte/examples/lena-rlc-traces.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-rlc-traces.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-simple.cc ns-3.43/src/lte/examples/lena-simple.cc
--- ns-3.42/src/lte/examples/lena-simple.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-simple.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-simple-epc-backhaul.cc ns-3.43/src/lte/examples/lena-simple-epc-backhaul.cc
--- ns-3.42/src/lte/examples/lena-simple-epc-backhaul.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-simple-epc-backhaul.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-simple-epc.cc ns-3.43/src/lte/examples/lena-simple-epc.cc
--- ns-3.42/src/lte/examples/lena-simple-epc.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-simple-epc.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Jaume Nin <jaume.nin@cttc.cat>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-simple-epc-emu.cc ns-3.43/src/lte/examples/lena-simple-epc-emu.cc
--- ns-3.42/src/lte/examples/lena-simple-epc-emu.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-simple-epc-emu.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jaume.nin@cttc.cat>
  *         Nicola Baldo <nbaldo@cttc.cat>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-uplink-power-control.cc ns-3.43/src/lte/examples/lena-uplink-power-control.cc
--- ns-3.42/src/lte/examples/lena-uplink-power-control.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-uplink-power-control.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-x2-handover.cc ns-3.43/src/lte/examples/lena-x2-handover.cc
--- ns-3.42/src/lte/examples/lena-x2-handover.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-x2-handover.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/examples/lena-x2-handover-measures.cc ns-3.43/src/lte/examples/lena-x2-handover-measures.cc
--- ns-3.42/src/lte/examples/lena-x2-handover-measures.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/examples/lena-x2-handover-measures.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/cc-helper.cc ns-3.43/src/lte/helper/cc-helper.cc
--- ns-3.42/src/lte/helper/cc-helper.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/cc-helper.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/cc-helper.h ns-3.43/src/lte/helper/cc-helper.h
--- ns-3.42/src/lte/helper/cc-helper.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/cc-helper.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/emu-epc-helper.cc ns-3.43/src/lte/helper/emu-epc-helper.cc
--- ns-3.42/src/lte/helper/emu-epc-helper.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/emu-epc-helper.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Jaume Nin <jnin@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/emu-epc-helper.h ns-3.43/src/lte/helper/emu-epc-helper.h
--- ns-3.42/src/lte/helper/emu-epc-helper.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/emu-epc-helper.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Jaume Nin <jnin@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/epc-helper.cc ns-3.43/src/lte/helper/epc-helper.cc
--- ns-3.42/src/lte/helper/epc-helper.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/epc-helper.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Jaume Nin <jnin@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/epc-helper.h ns-3.43/src/lte/helper/epc-helper.h
--- ns-3.42/src/lte/helper/epc-helper.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/epc-helper.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Jaume Nin <jnin@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/lte-global-pathloss-database.cc ns-3.43/src/lte/helper/lte-global-pathloss-database.cc
--- ns-3.42/src/lte/helper/lte-global-pathloss-database.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/lte-global-pathloss-database.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/lte-global-pathloss-database.h ns-3.43/src/lte/helper/lte-global-pathloss-database.h
--- ns-3.42/src/lte/helper/lte-global-pathloss-database.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/lte-global-pathloss-database.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/lte-helper.cc ns-3.43/src/lte/helper/lte-helper.cc
--- ns-3.42/src/lte/helper/lte-helper.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/lte-helper.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es> (re-wrote from scratch this helper)
  *         Giuseppe Piro <g.piro@poliba.it> (parts of the PHY & channel  creation & configuration
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/lte-helper.h ns-3.43/src/lte/helper/lte-helper.h
--- ns-3.42/src/lte/helper/lte-helper.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/lte-helper.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  * Modified by: Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/lte-hex-grid-enb-topology-helper.cc ns-3.43/src/lte/helper/lte-hex-grid-enb-topology-helper.cc
--- ns-3.42/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/lte-hex-grid-enb-topology-helper.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/lte-hex-grid-enb-topology-helper.h ns-3.43/src/lte/helper/lte-hex-grid-enb-topology-helper.h
--- ns-3.42/src/lte/helper/lte-hex-grid-enb-topology-helper.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/lte-hex-grid-enb-topology-helper.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/lte-stats-calculator.cc ns-3.43/src/lte/helper/lte-stats-calculator.cc
--- ns-3.42/src/lte/helper/lte-stats-calculator.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/lte-stats-calculator.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/lte-stats-calculator.h ns-3.43/src/lte/helper/lte-stats-calculator.h
--- ns-3.42/src/lte/helper/lte-stats-calculator.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/lte-stats-calculator.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/mac-stats-calculator.cc ns-3.43/src/lte/helper/mac-stats-calculator.cc
--- ns-3.42/src/lte/helper/mac-stats-calculator.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/mac-stats-calculator.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  * Modified by: Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/mac-stats-calculator.h ns-3.43/src/lte/helper/mac-stats-calculator.h
--- ns-3.42/src/lte/helper/mac-stats-calculator.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/mac-stats-calculator.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  * Modified by: Danilo Abrignani <danilo.abrignani@unibo.it> (Carrier Aggregation - GSoC 2015)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/no-backhaul-epc-helper.cc ns-3.43/src/lte/helper/no-backhaul-epc-helper.cc
--- ns-3.42/src/lte/helper/no-backhaul-epc-helper.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/no-backhaul-epc-helper.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         (based on the original point-to-point-epc-helper.cc)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/no-backhaul-epc-helper.h ns-3.43/src/lte/helper/no-backhaul-epc-helper.h
--- ns-3.42/src/lte/helper/no-backhaul-epc-helper.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/no-backhaul-epc-helper.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         (based on the original point-to-point-epc-helper.h)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/phy-rx-stats-calculator.cc ns-3.43/src/lte/helper/phy-rx-stats-calculator.cc
--- ns-3.42/src/lte/helper/phy-rx-stats-calculator.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/phy-rx-stats-calculator.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  * modified by: Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/phy-rx-stats-calculator.h ns-3.43/src/lte/helper/phy-rx-stats-calculator.h
--- ns-3.42/src/lte/helper/phy-rx-stats-calculator.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/phy-rx-stats-calculator.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  * modified by: Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/phy-stats-calculator.cc ns-3.43/src/lte/helper/phy-stats-calculator.cc
--- ns-3.42/src/lte/helper/phy-stats-calculator.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/phy-stats-calculator.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  *         Danilo Abrignani <danilo.abrignani@unibo.it> (Modification due to new Architecture -
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/phy-stats-calculator.h ns-3.43/src/lte/helper/phy-stats-calculator.h
--- ns-3.42/src/lte/helper/phy-stats-calculator.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/phy-stats-calculator.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/phy-tx-stats-calculator.cc ns-3.43/src/lte/helper/phy-tx-stats-calculator.cc
--- ns-3.42/src/lte/helper/phy-tx-stats-calculator.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/phy-tx-stats-calculator.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  * modified by: Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/phy-tx-stats-calculator.h ns-3.43/src/lte/helper/phy-tx-stats-calculator.h
--- ns-3.42/src/lte/helper/phy-tx-stats-calculator.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/phy-tx-stats-calculator.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  * modified by: Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/point-to-point-epc-helper.cc ns-3.43/src/lte/helper/point-to-point-epc-helper.cc
--- ns-3.42/src/lte/helper/point-to-point-epc-helper.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/point-to-point-epc-helper.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Jaume Nin <jnin@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/point-to-point-epc-helper.h ns-3.43/src/lte/helper/point-to-point-epc-helper.h
--- ns-3.42/src/lte/helper/point-to-point-epc-helper.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/point-to-point-epc-helper.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2019 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Jaume Nin <jnin@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/radio-bearer-stats-calculator.cc ns-3.43/src/lte/helper/radio-bearer-stats-calculator.cc
--- ns-3.42/src/lte/helper/radio-bearer-stats-calculator.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/radio-bearer-stats-calculator.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/radio-bearer-stats-calculator.h ns-3.43/src/lte/helper/radio-bearer-stats-calculator.h
--- ns-3.42/src/lte/helper/radio-bearer-stats-calculator.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/radio-bearer-stats-calculator.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/radio-bearer-stats-connector.cc ns-3.43/src/lte/helper/radio-bearer-stats-connector.cc
--- ns-3.42/src/lte/helper/radio-bearer-stats-connector.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/radio-bearer-stats-connector.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/radio-bearer-stats-connector.h ns-3.43/src/lte/helper/radio-bearer-stats-connector.h
--- ns-3.42/src/lte/helper/radio-bearer-stats-connector.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/radio-bearer-stats-connector.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/radio-environment-map-helper.cc ns-3.43/src/lte/helper/radio-environment-map-helper.cc
--- ns-3.42/src/lte/helper/radio-environment-map-helper.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/radio-environment-map-helper.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/helper/radio-environment-map-helper.h ns-3.43/src/lte/helper/radio-environment-map-helper.h
--- ns-3.42/src/lte/helper/radio-environment-map-helper.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/helper/radio-environment-map-helper.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/a2-a4-rsrq-handover-algorithm.cc ns-3.43/src/lte/model/a2-a4-rsrq-handover-algorithm.cc
--- ns-3.42/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/model/a2-a4-rsrq-handover-algorithm.cc	2024-10-09 16:41:09.928656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original work authors (from lte-enb-rrc.cc):
  *   Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/a2-a4-rsrq-handover-algorithm.h ns-3.43/src/lte/model/a2-a4-rsrq-handover-algorithm.h
--- ns-3.42/src/lte/model/a2-a4-rsrq-handover-algorithm.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/model/a2-a4-rsrq-handover-algorithm.h	2024-10-09 16:41:09.928656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original work authors (from lte-enb-rrc.cc):
  *   Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/a3-rsrp-handover-algorithm.cc ns-3.43/src/lte/model/a3-rsrp-handover-algorithm.cc
--- ns-3.42/src/lte/model/a3-rsrp-handover-algorithm.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/model/a3-rsrp-handover-algorithm.cc	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/a3-rsrp-handover-algorithm.h ns-3.43/src/lte/model/a3-rsrp-handover-algorithm.h
--- ns-3.42/src/lte/model/a3-rsrp-handover-algorithm.h	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/model/a3-rsrp-handover-algorithm.h	2024-10-09 16:41:09.928656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/component-carrier.cc ns-3.43/src/lte/model/component-carrier.cc
--- ns-3.42/src/lte/model/component-carrier.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/component-carrier.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/component-carrier-enb.cc ns-3.43/src/lte/model/component-carrier-enb.cc
--- ns-3.42/src/lte/model/component-carrier-enb.cc	2024-05-29 15:29:47.004073400 -0700
+++ ns-3.43/src/lte/model/component-carrier-enb.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/component-carrier-enb.h ns-3.43/src/lte/model/component-carrier-enb.h
--- ns-3.42/src/lte/model/component-carrier-enb.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/component-carrier-enb.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/component-carrier.h ns-3.43/src/lte/model/component-carrier.h
--- ns-3.42/src/lte/model/component-carrier.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/component-carrier.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/component-carrier-ue.cc ns-3.43/src/lte/model/component-carrier-ue.cc
--- ns-3.42/src/lte/model/component-carrier-ue.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/component-carrier-ue.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/component-carrier-ue.h ns-3.43/src/lte/model/component-carrier-ue.h
--- ns-3.42/src/lte/model/component-carrier-ue.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/component-carrier-ue.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/cqa-ff-mac-scheduler.cc ns-3.43/src/lte/model/cqa-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/cqa-ff-mac-scheduler.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/cqa-ff-mac-scheduler.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Biljana Bojovic <bbojovic@cttc.es>, Nicola Baldo<nbaldo@cttc.es>.
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/cqa-ff-mac-scheduler.h ns-3.43/src/lte/model/cqa-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/cqa-ff-mac-scheduler.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/cqa-ff-mac-scheduler.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Biljana Bojovic <bbojovic@cttc.es>, Nicola Baldo<nbaldo@cttc.es>.
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-enb-application.cc ns-3.43/src/lte/model/epc-enb-application.cc
--- ns-3.42/src/lte/model/epc-enb-application.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-enb-application.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.cat>
  *         Nicola Baldo <nbaldo@cttc.cat>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-enb-application.h ns-3.43/src/lte/model/epc-enb-application.h
--- ns-3.42/src/lte/model/epc-enb-application.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-enb-application.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Jaume Nin <jnin@cttc.cat>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-enb-s1-sap.cc ns-3.43/src/lte/model/epc-enb-s1-sap.cc
--- ns-3.42/src/lte/model/epc-enb-s1-sap.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-enb-s1-sap.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-enb-s1-sap.h ns-3.43/src/lte/model/epc-enb-s1-sap.h
--- ns-3.42/src/lte/model/epc-enb-s1-sap.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-enb-s1-sap.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-gtpc-header.cc ns-3.43/src/lte/model/epc-gtpc-header.cc
--- ns-3.42/src/lte/model/epc-gtpc-header.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-gtpc-header.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-gtpc-header.h ns-3.43/src/lte/model/epc-gtpc-header.h
--- ns-3.42/src/lte/model/epc-gtpc-header.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-gtpc-header.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-gtpu-header.cc ns-3.43/src/lte/model/epc-gtpu-header.cc
--- ns-3.42/src/lte/model/epc-gtpu-header.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-gtpu-header.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.cat>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-gtpu-header.h ns-3.43/src/lte/model/epc-gtpu-header.h
--- ns-3.42/src/lte/model/epc-gtpu-header.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-gtpu-header.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jnin@cttc.cat>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-mme-application.cc ns-3.43/src/lte/model/epc-mme-application.cc
--- ns-3.42/src/lte/model/epc-mme-application.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-mme-application.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-mme-application.h ns-3.43/src/lte/model/epc-mme-application.h
--- ns-3.42/src/lte/model/epc-mme-application.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-mme-application.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-pgw-application.cc ns-3.43/src/lte/model/epc-pgw-application.cc
--- ns-3.42/src/lte/model/epc-pgw-application.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-pgw-application.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         (based on epc-sgw-pgw-application.cc)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-pgw-application.h ns-3.43/src/lte/model/epc-pgw-application.h
--- ns-3.42/src/lte/model/epc-pgw-application.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-pgw-application.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         (based on epc-sgw-pgw-application.h)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-s11-sap.cc ns-3.43/src/lte/model/epc-s11-sap.cc
--- ns-3.42/src/lte/model/epc-s11-sap.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-s11-sap.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-s11-sap.h ns-3.43/src/lte/model/epc-s11-sap.h
--- ns-3.42/src/lte/model/epc-s11-sap.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-s11-sap.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.cat>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-s1ap-sap.cc ns-3.43/src/lte/model/epc-s1ap-sap.cc
--- ns-3.42/src/lte/model/epc-s1ap-sap.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-s1ap-sap.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-s1ap-sap.h ns-3.43/src/lte/model/epc-s1ap-sap.h
--- ns-3.42/src/lte/model/epc-s1ap-sap.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-s1ap-sap.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.cat>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-sgw-application.cc ns-3.43/src/lte/model/epc-sgw-application.cc
--- ns-3.42/src/lte/model/epc-sgw-application.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-sgw-application.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-sgw-application.h ns-3.43/src/lte/model/epc-sgw-application.h
--- ns-3.42/src/lte/model/epc-sgw-application.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-sgw-application.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-tft.cc ns-3.43/src/lte/model/epc-tft.cc
--- ns-3.42/src/lte/model/epc-tft.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-tft.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-tft-classifier.cc ns-3.43/src/lte/model/epc-tft-classifier.cc
--- ns-3.42/src/lte/model/epc-tft-classifier.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-tft-classifier.cc	2024-10-09 16:41:09.932656000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 CTTC
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Nicola Baldo <nbaldo@cttc.es> (the EpcTftClassifier class)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-tft-classifier.h ns-3.43/src/lte/model/epc-tft-classifier.h
--- ns-3.42/src/lte/model/epc-tft-classifier.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-tft-classifier.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo  <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-tft.h ns-3.43/src/lte/model/epc-tft.h
--- ns-3.42/src/lte/model/epc-tft.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-tft.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo  <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-ue-nas.cc ns-3.43/src/lte/model/epc-ue-nas.cc
--- ns-3.42/src/lte/model/epc-ue-nas.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-ue-nas.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-ue-nas.h ns-3.43/src/lte/model/epc-ue-nas.h
--- ns-3.42/src/lte/model/epc-ue-nas.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-ue-nas.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-x2.cc ns-3.43/src/lte/model/epc-x2.cc
--- ns-3.42/src/lte/model/epc-x2.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-x2.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-x2.h ns-3.43/src/lte/model/epc-x2.h
--- ns-3.42/src/lte/model/epc-x2.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-x2.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-x2-header.cc ns-3.43/src/lte/model/epc-x2-header.cc
--- ns-3.42/src/lte/model/epc-x2-header.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-x2-header.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-x2-header.h ns-3.43/src/lte/model/epc-x2-header.h
--- ns-3.42/src/lte/model/epc-x2-header.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-x2-header.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-x2-sap.cc ns-3.43/src/lte/model/epc-x2-sap.cc
--- ns-3.42/src/lte/model/epc-x2-sap.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-x2-sap.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/epc-x2-sap.h ns-3.43/src/lte/model/epc-x2-sap.h
--- ns-3.42/src/lte/model/epc-x2-sap.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/epc-x2-sap.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/eps-bearer.cc ns-3.43/src/lte/model/eps-bearer.cc
--- ns-3.42/src/lte/model/eps-bearer.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/eps-bearer.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/eps-bearer.h ns-3.43/src/lte/model/eps-bearer.h
--- ns-3.42/src/lte/model/eps-bearer.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/eps-bearer.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/eps-bearer-tag.cc ns-3.43/src/lte/model/eps-bearer-tag.cc
--- ns-3.42/src/lte/model/eps-bearer-tag.cc	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/eps-bearer-tag.cc	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/eps-bearer-tag.h ns-3.43/src/lte/model/eps-bearer-tag.h
--- ns-3.42/src/lte/model/eps-bearer-tag.h	2024-05-29 15:29:47.008073300 -0700
+++ ns-3.43/src/lte/model/eps-bearer-tag.h	2024-10-09 16:41:09.932656000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/fdbet-ff-mac-scheduler.cc ns-3.43/src/lte/model/fdbet-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/fdbet-ff-mac-scheduler.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/fdbet-ff-mac-scheduler.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/fdbet-ff-mac-scheduler.h ns-3.43/src/lte/model/fdbet-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/fdbet-ff-mac-scheduler.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/fdbet-ff-mac-scheduler.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/fdmt-ff-mac-scheduler.cc ns-3.43/src/lte/model/fdmt-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/fdmt-ff-mac-scheduler.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/fdmt-ff-mac-scheduler.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/fdmt-ff-mac-scheduler.h ns-3.43/src/lte/model/fdmt-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/fdmt-ff-mac-scheduler.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/fdmt-ff-mac-scheduler.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/fdtbfq-ff-mac-scheduler.cc ns-3.43/src/lte/model/fdtbfq-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/fdtbfq-ff-mac-scheduler.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/fdtbfq-ff-mac-scheduler.h ns-3.43/src/lte/model/fdtbfq-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/fdtbfq-ff-mac-scheduler.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/fdtbfq-ff-mac-scheduler.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/ff-mac-common.cc ns-3.43/src/lte/model/ff-mac-common.cc
--- ns-3.42/src/lte/model/ff-mac-common.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/ff-mac-common.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <mmiozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/ff-mac-common.h ns-3.43/src/lte/model/ff-mac-common.h
--- ns-3.42/src/lte/model/ff-mac-common.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/ff-mac-common.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/ff-mac-csched-sap.cc ns-3.43/src/lte/model/ff-mac-csched-sap.cc
--- ns-3.42/src/lte/model/ff-mac-csched-sap.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/ff-mac-csched-sap.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/ff-mac-csched-sap.h ns-3.43/src/lte/model/ff-mac-csched-sap.h
--- ns-3.42/src/lte/model/ff-mac-csched-sap.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/ff-mac-csched-sap.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/ff-mac-sched-sap.cc ns-3.43/src/lte/model/ff-mac-sched-sap.cc
--- ns-3.42/src/lte/model/ff-mac-sched-sap.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/ff-mac-sched-sap.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/ff-mac-sched-sap.h ns-3.43/src/lte/model/ff-mac-sched-sap.h
--- ns-3.42/src/lte/model/ff-mac-sched-sap.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/ff-mac-sched-sap.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/ff-mac-scheduler.cc ns-3.43/src/lte/model/ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/ff-mac-scheduler.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/ff-mac-scheduler.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/ff-mac-scheduler.h ns-3.43/src/lte/model/ff-mac-scheduler.h
--- ns-3.42/src/lte/model/ff-mac-scheduler.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/ff-mac-scheduler.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  *         Marco Miozzo <marco.miozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-amc.cc ns-3.43/src/lte/model/lte-amc.cc
--- ns-3.42/src/lte/model/lte-amc.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-amc.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original Author: Giuseppe Piro  <g.piro@poliba.it>
  * Modified by:     Marco Miozzo   <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-amc.h ns-3.43/src/lte/model/lte-amc.h
--- ns-3.42/src/lte/model/lte-amc.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-amc.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original Author: Giuseppe Piro  <g.piro@poliba.it>
  * Modified by:     Nicola Baldo   <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-anr.cc ns-3.43/src/lte/model/lte-anr.cc
--- ns-3.42/src/lte/model/lte-anr.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-anr.cc	2024-10-09 16:41:10.036656400 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original work authors (from lte-enb-rrc.cc):
  *   Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-anr.h ns-3.43/src/lte/model/lte-anr.h
--- ns-3.42/src/lte/model/lte-anr.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-anr.h	2024-10-09 16:41:10.036656400 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original work authors (from lte-enb-rrc.cc):
  *   Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-anr-sap.cc ns-3.43/src/lte/model/lte-anr-sap.cc
--- ns-3.42/src/lte/model/lte-anr-sap.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-anr-sap.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-anr-sap.h ns-3.43/src/lte/model/lte-anr-sap.h
--- ns-3.42/src/lte/model/lte-anr-sap.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-anr-sap.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-asn1-header.cc ns-3.43/src/lte/model/lte-asn1-header.cc
--- ns-3.42/src/lte/model/lte-asn1-header.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-asn1-header.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Lluis Parcerisa <lparcerisa@cttc.cat>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-asn1-header.h ns-3.43/src/lte/model/lte-asn1-header.h
--- ns-3.42/src/lte/model/lte-asn1-header.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-asn1-header.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Lluis Parcerisa <lparcerisa@cttc.cat>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-as-sap.cc ns-3.43/src/lte/model/lte-as-sap.cc
--- ns-3.42/src/lte/model/lte-as-sap.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-as-sap.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-as-sap.h ns-3.43/src/lte/model/lte-as-sap.h
--- ns-3.42/src/lte/model/lte-as-sap.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-as-sap.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ccm-mac-sap.cc ns-3.43/src/lte/model/lte-ccm-mac-sap.cc
--- ns-3.42/src/lte/model/lte-ccm-mac-sap.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-ccm-mac-sap.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ccm-mac-sap.h ns-3.43/src/lte/model/lte-ccm-mac-sap.h
--- ns-3.42/src/lte/model/lte-ccm-mac-sap.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-ccm-mac-sap.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ccm-rrc-sap.cc ns-3.43/src/lte/model/lte-ccm-rrc-sap.cc
--- ns-3.42/src/lte/model/lte-ccm-rrc-sap.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-ccm-rrc-sap.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ccm-rrc-sap.h ns-3.43/src/lte/model/lte-ccm-rrc-sap.h
--- ns-3.42/src/lte/model/lte-ccm-rrc-sap.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-ccm-rrc-sap.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-chunk-processor.cc ns-3.43/src/lte/model/lte-chunk-processor.cc
--- ns-3.42/src/lte/model/lte-chunk-processor.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-chunk-processor.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  * Modified by : Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-chunk-processor.h ns-3.43/src/lte/model/lte-chunk-processor.h
--- ns-3.42/src/lte/model/lte-chunk-processor.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-chunk-processor.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  * Modified by : Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-common.cc ns-3.43/src/lte/model/lte-common.cc
--- ns-3.42/src/lte/model/lte-common.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-common.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-common.h ns-3.43/src/lte/model/lte-common.h
--- ns-3.42/src/lte/model/lte-common.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-common.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-control-messages.cc ns-3.43/src/lte/model/lte-control-messages.cc
--- ns-3.42/src/lte/model/lte-control-messages.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-control-messages.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Marco Miozzo <marco.miozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-control-messages.h ns-3.43/src/lte/model/lte-control-messages.h
--- ns-3.42/src/lte/model/lte-control-messages.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-control-messages.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-cmac-sap.cc ns-3.43/src/lte/model/lte-enb-cmac-sap.cc
--- ns-3.42/src/lte/model/lte-enb-cmac-sap.cc	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-enb-cmac-sap.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <mmiozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-cmac-sap.h ns-3.43/src/lte/model/lte-enb-cmac-sap.h
--- ns-3.42/src/lte/model/lte-enb-cmac-sap.h	2024-05-29 15:29:47.112073700 -0700
+++ ns-3.43/src/lte/model/lte-enb-cmac-sap.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  *         Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-component-carrier-manager.cc ns-3.43/src/lte/model/lte-enb-component-carrier-manager.cc
--- ns-3.42/src/lte/model/lte-enb-component-carrier-manager.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-component-carrier-manager.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-component-carrier-manager.h ns-3.43/src/lte/model/lte-enb-component-carrier-manager.h
--- ns-3.42/src/lte/model/lte-enb-component-carrier-manager.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-component-carrier-manager.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-cphy-sap.cc ns-3.43/src/lte/model/lte-enb-cphy-sap.cc
--- ns-3.42/src/lte/model/lte-enb-cphy-sap.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-cphy-sap.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-cphy-sap.h ns-3.43/src/lte/model/lte-enb-cphy-sap.h
--- ns-3.42/src/lte/model/lte-enb-cphy-sap.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-cphy-sap.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>,
  *         Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-mac.cc ns-3.43/src/lte/model/lte-enb-mac.cc
--- ns-3.42/src/lte/model/lte-enb-mac.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-mac.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo  <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-mac.h ns-3.43/src/lte/model/lte-enb-mac.h
--- ns-3.42/src/lte/model/lte-enb-mac.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-mac.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo  <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-net-device.cc ns-3.43/src/lte/model/lte-enb-net-device.cc
--- ns-3.42/src/lte/model/lte-enb-net-device.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-net-device.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  * Author: Marco Miozzo <mmiozzo@cttc.es> : Update to FF API Architecture
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-net-device.h ns-3.43/src/lte/model/lte-enb-net-device.h
--- ns-3.42/src/lte/model/lte-enb-net-device.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-net-device.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  * Author: Marco Miozzo <marco.miozzo@cttc.es> : Update to FF API Architecture
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-phy.cc ns-3.43/src/lte/model/lte-enb-phy.cc
--- ns-3.42/src/lte/model/lte-enb-phy.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-phy.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-phy.h ns-3.43/src/lte/model/lte-enb-phy.h
--- ns-3.42/src/lte/model/lte-enb-phy.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-phy.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
@@ -314,6 +303,7 @@
      * \deprecated The non-const \c Ptr<SpectrumValue> argument is deprecated
      * and will be changed to \c Ptr<const SpectrumValue> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*ReportInterferenceTracedCallback)(uint16_t cellId,
                                                      Ptr<SpectrumValue> spectrumValue);
 
@@ -497,6 +487,7 @@
      * \deprecated The non-const \c Ptr<SpectrumValue> argument is deprecated
      * and will be changed to \c Ptr<const SpectrumValue> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<uint16_t, Ptr<SpectrumValue>> m_reportInterferenceTrace;
     /**
      * The `InterferenceSamplePeriod` attribute. The sampling period for
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-phy-sap.cc ns-3.43/src/lte/model/lte-enb-phy-sap.cc
--- ns-3.42/src/lte/model/lte-enb-phy-sap.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-phy-sap.cc	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-phy-sap.h ns-3.43/src/lte/model/lte-enb-phy-sap.h
--- ns-3.42/src/lte/model/lte-enb-phy-sap.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-phy-sap.h	2024-10-09 16:41:10.036656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <mmiozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-rrc.cc ns-3.43/src/lte/model/lte-enb-rrc.cc
--- ns-3.42/src/lte/model/lte-enb-rrc.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-rrc.cc	2024-10-09 16:41:10.036656400 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2018 Fraunhofer ESK : RLF extensions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-enb-rrc.h ns-3.43/src/lte/model/lte-enb-rrc.h
--- ns-3.42/src/lte/model/lte-enb-rrc.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-enb-rrc.h	2024-10-09 16:41:10.040656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2018 Fraunhofer ESK : RLF extensions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Nicola Baldo <nbaldo@cttc.es>
@@ -1045,7 +1034,7 @@
     void SendHandoverRequest(uint16_t rnti, uint16_t cellId);
 
     /**
-     *  \brief This function acts as an interface to trigger Release indication messages towards eNB
+     * \brief This function acts as an interface to trigger Release indication messages towards eNB
      * and EPC
      * \param imsi the IMSI
      * \param rnti the RNTI
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-algorithm.cc ns-3.43/src/lte/model/lte-ffr-algorithm.cc
--- ns-3.42/src/lte/model/lte-ffr-algorithm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-algorithm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-algorithm.h ns-3.43/src/lte/model/lte-ffr-algorithm.h
--- ns-3.42/src/lte/model/lte-ffr-algorithm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-algorithm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-distributed-algorithm.cc ns-3.43/src/lte/model/lte-ffr-distributed-algorithm.cc
--- ns-3.42/src/lte/model/lte-ffr-distributed-algorithm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-distributed-algorithm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-distributed-algorithm.h ns-3.43/src/lte/model/lte-ffr-distributed-algorithm.h
--- ns-3.42/src/lte/model/lte-ffr-distributed-algorithm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-distributed-algorithm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-enhanced-algorithm.cc ns-3.43/src/lte/model/lte-ffr-enhanced-algorithm.cc
--- ns-3.42/src/lte/model/lte-ffr-enhanced-algorithm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-enhanced-algorithm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-enhanced-algorithm.h ns-3.43/src/lte/model/lte-ffr-enhanced-algorithm.h
--- ns-3.42/src/lte/model/lte-ffr-enhanced-algorithm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-enhanced-algorithm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-rrc-sap.cc ns-3.43/src/lte/model/lte-ffr-rrc-sap.cc
--- ns-3.42/src/lte/model/lte-ffr-rrc-sap.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-rrc-sap.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-rrc-sap.h ns-3.43/src/lte/model/lte-ffr-rrc-sap.h
--- ns-3.42/src/lte/model/lte-ffr-rrc-sap.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-rrc-sap.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-sap.cc ns-3.43/src/lte/model/lte-ffr-sap.cc
--- ns-3.42/src/lte/model/lte-ffr-sap.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-sap.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-sap.h ns-3.43/src/lte/model/lte-ffr-sap.h
--- ns-3.42/src/lte/model/lte-ffr-sap.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-sap.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-soft-algorithm.cc ns-3.43/src/lte/model/lte-ffr-soft-algorithm.cc
--- ns-3.42/src/lte/model/lte-ffr-soft-algorithm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-soft-algorithm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ffr-soft-algorithm.h ns-3.43/src/lte/model/lte-ffr-soft-algorithm.h
--- ns-3.42/src/lte/model/lte-ffr-soft-algorithm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-ffr-soft-algorithm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-fr-hard-algorithm.cc ns-3.43/src/lte/model/lte-fr-hard-algorithm.cc
--- ns-3.42/src/lte/model/lte-fr-hard-algorithm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-fr-hard-algorithm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-fr-hard-algorithm.h ns-3.43/src/lte/model/lte-fr-hard-algorithm.h
--- ns-3.42/src/lte/model/lte-fr-hard-algorithm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-fr-hard-algorithm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-fr-no-op-algorithm.cc ns-3.43/src/lte/model/lte-fr-no-op-algorithm.cc
--- ns-3.42/src/lte/model/lte-fr-no-op-algorithm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-fr-no-op-algorithm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-fr-no-op-algorithm.h ns-3.43/src/lte/model/lte-fr-no-op-algorithm.h
--- ns-3.42/src/lte/model/lte-fr-no-op-algorithm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-fr-no-op-algorithm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-fr-soft-algorithm.cc ns-3.43/src/lte/model/lte-fr-soft-algorithm.cc
--- ns-3.42/src/lte/model/lte-fr-soft-algorithm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-fr-soft-algorithm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-fr-soft-algorithm.h ns-3.43/src/lte/model/lte-fr-soft-algorithm.h
--- ns-3.42/src/lte/model/lte-fr-soft-algorithm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-fr-soft-algorithm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-fr-strict-algorithm.cc ns-3.43/src/lte/model/lte-fr-strict-algorithm.cc
--- ns-3.42/src/lte/model/lte-fr-strict-algorithm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-fr-strict-algorithm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-fr-strict-algorithm.h ns-3.43/src/lte/model/lte-fr-strict-algorithm.h
--- ns-3.42/src/lte/model/lte-fr-strict-algorithm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-fr-strict-algorithm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-handover-algorithm.cc ns-3.43/src/lte/model/lte-handover-algorithm.cc
--- ns-3.42/src/lte/model/lte-handover-algorithm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-handover-algorithm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-handover-algorithm.h ns-3.43/src/lte/model/lte-handover-algorithm.h
--- ns-3.42/src/lte/model/lte-handover-algorithm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-handover-algorithm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-handover-management-sap.cc ns-3.43/src/lte/model/lte-handover-management-sap.cc
--- ns-3.42/src/lte/model/lte-handover-management-sap.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-handover-management-sap.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-handover-management-sap.h ns-3.43/src/lte/model/lte-handover-management-sap.h
--- ns-3.42/src/lte/model/lte-handover-management-sap.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-handover-management-sap.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-harq-phy.cc ns-3.43/src/lte/model/lte-harq-phy.cc
--- ns-3.42/src/lte/model/lte-harq-phy.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-harq-phy.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-harq-phy.h ns-3.43/src/lte/model/lte-harq-phy.h
--- ns-3.42/src/lte/model/lte-harq-phy.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-harq-phy.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-interference.cc ns-3.43/src/lte/model/lte-interference.cc
--- ns-3.42/src/lte/model/lte-interference.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-interference.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-interference.h ns-3.43/src/lte/model/lte-interference.h
--- ns-3.42/src/lte/model/lte-interference.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-interference.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-mac-sap.cc ns-3.43/src/lte/model/lte-mac-sap.cc
--- ns-3.42/src/lte/model/lte-mac-sap.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-mac-sap.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo  <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-mac-sap.h ns-3.43/src/lte/model/lte-mac-sap.h
--- ns-3.42/src/lte/model/lte-mac-sap.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-mac-sap.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-mi-error-model.cc ns-3.43/src/lte/model/lte-mi-error-model.cc
--- ns-3.42/src/lte/model/lte-mi-error-model.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-mi-error-model.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 SIGNET LAB. Department of Information Engineering (DEI), University of Padua
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *
  * Original Work Authors:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-mi-error-model.h ns-3.43/src/lte/model/lte-mi-error-model.h
--- ns-3.42/src/lte/model/lte-mi-error-model.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-mi-error-model.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 SIGNET LAB. Department of Information Engineering (DEI), University of Padua
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *
  * Original Work Authors:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-net-device.cc ns-3.43/src/lte/model/lte-net-device.cc
--- ns-3.42/src/lte/model/lte-net-device.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-net-device.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-net-device.h ns-3.43/src/lte/model/lte-net-device.h
--- ns-3.42/src/lte/model/lte-net-device.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-net-device.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro <g.piro@poliba.it>
  *         Nicola Baldo  <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-pdcp.cc ns-3.43/src/lte/model/lte-pdcp.cc
--- ns-3.42/src/lte/model/lte-pdcp.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-pdcp.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-pdcp.h ns-3.43/src/lte/model/lte-pdcp.h
--- ns-3.42/src/lte/model/lte-pdcp.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-pdcp.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-pdcp-header.cc ns-3.43/src/lte/model/lte-pdcp-header.cc
--- ns-3.42/src/lte/model/lte-pdcp-header.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-pdcp-header.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-pdcp-header.h ns-3.43/src/lte/model/lte-pdcp-header.h
--- ns-3.42/src/lte/model/lte-pdcp-header.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-pdcp-header.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-pdcp-sap.cc ns-3.43/src/lte/model/lte-pdcp-sap.cc
--- ns-3.42/src/lte/model/lte-pdcp-sap.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-pdcp-sap.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-pdcp-sap.h ns-3.43/src/lte/model/lte-pdcp-sap.h
--- ns-3.42/src/lte/model/lte-pdcp-sap.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-pdcp-sap.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-pdcp-tag.cc ns-3.43/src/lte/model/lte-pdcp-tag.cc
--- ns-3.42/src/lte/model/lte-pdcp-tag.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-pdcp-tag.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jaume.nin@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-pdcp-tag.h ns-3.43/src/lte/model/lte-pdcp-tag.h
--- ns-3.42/src/lte/model/lte-pdcp-tag.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-pdcp-tag.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jaume.nin@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-phy.cc ns-3.43/src/lte/model/lte-phy.cc
--- ns-3.42/src/lte/model/lte-phy.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-phy.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-phy.h ns-3.43/src/lte/model/lte-phy.h
--- ns-3.42/src/lte/model/lte-phy.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-phy.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-phy-tag.cc ns-3.43/src/lte/model/lte-phy-tag.cc
--- ns-3.42/src/lte/model/lte-phy-tag.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-phy-tag.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-phy-tag.h ns-3.43/src/lte/model/lte-phy-tag.h
--- ns-3.42/src/lte/model/lte-phy-tag.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-phy-tag.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo  <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-radio-bearer-info.cc ns-3.43/src/lte/model/lte-radio-bearer-info.cc
--- ns-3.42/src/lte/model/lte-radio-bearer-info.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-radio-bearer-info.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-radio-bearer-info.h ns-3.43/src/lte/model/lte-radio-bearer-info.h
--- ns-3.42/src/lte/model/lte-radio-bearer-info.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-radio-bearer-info.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-radio-bearer-tag.cc ns-3.43/src/lte/model/lte-radio-bearer-tag.cc
--- ns-3.42/src/lte/model/lte-radio-bearer-tag.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-radio-bearer-tag.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-radio-bearer-tag.h ns-3.43/src/lte/model/lte-radio-bearer-tag.h
--- ns-3.42/src/lte/model/lte-radio-bearer-tag.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-radio-bearer-tag.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Author: Marco Miozzo  <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-am.cc ns-3.43/src/lte/model/lte-rlc-am.cc
--- ns-3.42/src/lte/model/lte-rlc-am.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-am.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-am.h ns-3.43/src/lte/model/lte-rlc-am.h
--- ns-3.42/src/lte/model/lte-rlc-am.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-am.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-am-header.cc ns-3.43/src/lte/model/lte-rlc-am-header.cc
--- ns-3.42/src/lte/model/lte-rlc-am-header.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-am-header.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-am-header.h ns-3.43/src/lte/model/lte-rlc-am-header.h
--- ns-3.42/src/lte/model/lte-rlc-am-header.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-am-header.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc.cc ns-3.43/src/lte/model/lte-rlc.cc
--- ns-3.42/src/lte/model/lte-rlc.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc.h ns-3.43/src/lte/model/lte-rlc.h
--- ns-3.42/src/lte/model/lte-rlc.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-header.cc ns-3.43/src/lte/model/lte-rlc-header.cc
--- ns-3.42/src/lte/model/lte-rlc-header.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-header.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-header.h ns-3.43/src/lte/model/lte-rlc-header.h
--- ns-3.42/src/lte/model/lte-rlc-header.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-header.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-sap.cc ns-3.43/src/lte/model/lte-rlc-sap.cc
--- ns-3.42/src/lte/model/lte-rlc-sap.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-sap.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-sap.h ns-3.43/src/lte/model/lte-rlc-sap.h
--- ns-3.42/src/lte/model/lte-rlc-sap.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-sap.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-sdu-status-tag.cc ns-3.43/src/lte/model/lte-rlc-sdu-status-tag.cc
--- ns-3.42/src/lte/model/lte-rlc-sdu-status-tag.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-sdu-status-tag.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-sdu-status-tag.h ns-3.43/src/lte/model/lte-rlc-sdu-status-tag.h
--- ns-3.42/src/lte/model/lte-rlc-sdu-status-tag.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-sdu-status-tag.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-sequence-number.cc ns-3.43/src/lte/model/lte-rlc-sequence-number.cc
--- ns-3.42/src/lte/model/lte-rlc-sequence-number.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-sequence-number.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-sequence-number.h ns-3.43/src/lte/model/lte-rlc-sequence-number.h
--- ns-3.42/src/lte/model/lte-rlc-sequence-number.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-sequence-number.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-tag.cc ns-3.43/src/lte/model/lte-rlc-tag.cc
--- ns-3.42/src/lte/model/lte-rlc-tag.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-tag.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jaume.nin@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-tag.h ns-3.43/src/lte/model/lte-rlc-tag.h
--- ns-3.42/src/lte/model/lte-rlc-tag.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-tag.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jaume.nin@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-tm.cc ns-3.43/src/lte/model/lte-rlc-tm.cc
--- ns-3.42/src/lte/model/lte-rlc-tm.cc	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-tm.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-tm.h ns-3.43/src/lte/model/lte-rlc-tm.h
--- ns-3.42/src/lte/model/lte-rlc-tm.h	2024-05-29 15:29:47.116073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-tm.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-um.cc ns-3.43/src/lte/model/lte-rlc-um.cc
--- ns-3.42/src/lte/model/lte-rlc-um.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-um.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rlc-um.h ns-3.43/src/lte/model/lte-rlc-um.h
--- ns-3.42/src/lte/model/lte-rlc-um.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rlc-um.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rrc-header.cc ns-3.43/src/lte/model/lte-rrc-header.cc
--- ns-3.42/src/lte/model/lte-rrc-header.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rrc-header.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Lluis Parcerisa <lparcerisa@cttc.cat>
  * Modified by:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rrc-header.h ns-3.43/src/lte/model/lte-rrc-header.h
--- ns-3.42/src/lte/model/lte-rrc-header.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rrc-header.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Lluis Parcerisa <lparcerisa@cttc.cat>
  * Modified by:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rrc-protocol-ideal.cc ns-3.43/src/lte/model/lte-rrc-protocol-ideal.cc
--- ns-3.42/src/lte/model/lte-rrc-protocol-ideal.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rrc-protocol-ideal.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rrc-protocol-ideal.h ns-3.43/src/lte/model/lte-rrc-protocol-ideal.h
--- ns-3.42/src/lte/model/lte-rrc-protocol-ideal.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rrc-protocol-ideal.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rrc-protocol-real.cc ns-3.43/src/lte/model/lte-rrc-protocol-real.cc
--- ns-3.42/src/lte/model/lte-rrc-protocol-real.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rrc-protocol-real.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Lluis Parcerisa <lparcerisa@cttc.cat>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rrc-protocol-real.h ns-3.43/src/lte/model/lte-rrc-protocol-real.h
--- ns-3.42/src/lte/model/lte-rrc-protocol-real.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rrc-protocol-real.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Lluis Parcerisa <lparcerisa@cttc.cat>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rrc-sap.cc ns-3.43/src/lte/model/lte-rrc-sap.cc
--- ns-3.42/src/lte/model/lte-rrc-sap.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rrc-sap.cc	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-rrc-sap.h ns-3.43/src/lte/model/lte-rrc-sap.h
--- ns-3.42/src/lte/model/lte-rrc-sap.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-rrc-sap.h	2024-10-09 16:41:10.040656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Lluis Parcerisa <lparcerisa@cttc.cat>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-spectrum-phy.cc ns-3.43/src/lte/model/lte-spectrum-phy.cc
--- ns-3.42/src/lte/model/lte-spectrum-phy.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-spectrum-phy.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009, 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  *         Giuseppe Piro  <g.piro@poliba.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-spectrum-phy.h ns-3.43/src/lte/model/lte-spectrum-phy.h
--- ns-3.42/src/lte/model/lte-spectrum-phy.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-spectrum-phy.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  *         Giuseppe Piro  <g.piro@poliba.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-spectrum-signal-parameters.cc ns-3.43/src/lte/model/lte-spectrum-signal-parameters.cc
--- ns-3.42/src/lte/model/lte-spectrum-signal-parameters.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-spectrum-signal-parameters.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  * Modified by Marco Miozzo <mmiozzo@cttc.es> (add data and ctrl diversity)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-spectrum-signal-parameters.h ns-3.43/src/lte/model/lte-spectrum-signal-parameters.h
--- ns-3.42/src/lte/model/lte-spectrum-signal-parameters.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-spectrum-signal-parameters.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  * Modified by Marco Miozzo <mmiozzo@cttc.es> (add data and ctrl diversity)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-spectrum-value-helper.cc ns-3.43/src/lte/model/lte-spectrum-value-helper.cc
--- ns-3.42/src/lte/model/lte-spectrum-value-helper.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-spectrum-value-helper.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-spectrum-value-helper.h ns-3.43/src/lte/model/lte-spectrum-value-helper.h
--- ns-3.42/src/lte/model/lte-spectrum-value-helper.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-spectrum-value-helper.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-ccm-rrc-sap.cc ns-3.43/src/lte/model/lte-ue-ccm-rrc-sap.cc
--- ns-3.42/src/lte/model/lte-ue-ccm-rrc-sap.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-ccm-rrc-sap.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-ccm-rrc-sap.h ns-3.43/src/lte/model/lte-ue-ccm-rrc-sap.h
--- ns-3.42/src/lte/model/lte-ue-ccm-rrc-sap.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-ccm-rrc-sap.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-cmac-sap.cc ns-3.43/src/lte/model/lte-ue-cmac-sap.cc
--- ns-3.42/src/lte/model/lte-ue-cmac-sap.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-cmac-sap.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <mmiozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-cmac-sap.h ns-3.43/src/lte/model/lte-ue-cmac-sap.h
--- ns-3.42/src/lte/model/lte-ue-cmac-sap.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-cmac-sap.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-component-carrier-manager.cc ns-3.43/src/lte/model/lte-ue-component-carrier-manager.cc
--- ns-3.42/src/lte/model/lte-ue-component-carrier-manager.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-component-carrier-manager.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-component-carrier-manager.h ns-3.43/src/lte/model/lte-ue-component-carrier-manager.h
--- ns-3.42/src/lte/model/lte-ue-component-carrier-manager.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-component-carrier-manager.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-cphy-sap.cc ns-3.43/src/lte/model/lte-ue-cphy-sap.cc
--- ns-3.42/src/lte/model/lte-ue-cphy-sap.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-cphy-sap.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-cphy-sap.h ns-3.43/src/lte/model/lte-ue-cphy-sap.h
--- ns-3.42/src/lte/model/lte-ue-cphy-sap.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-cphy-sap.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>,
  *         Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-mac.cc ns-3.43/src/lte/model/lte-ue-mac.cc
--- ns-3.42/src/lte/model/lte-ue-mac.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-mac.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo  <nbaldo@cttc.es>
  * Author: Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-mac.h ns-3.43/src/lte/model/lte-ue-mac.h
--- ns-3.42/src/lte/model/lte-ue-mac.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-mac.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo  <nbaldo@cttc.es>
  * Author: Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-net-device.cc ns-3.43/src/lte/model/lte-ue-net-device.cc
--- ns-3.42/src/lte/model/lte-ue-net-device.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-net-device.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-net-device.h ns-3.43/src/lte/model/lte-ue-net-device.h
--- ns-3.42/src/lte/model/lte-ue-net-device.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-net-device.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-phy.cc ns-3.43/src/lte/model/lte-ue-phy.cc
--- ns-3.42/src/lte/model/lte-ue-phy.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-phy.cc	2024-10-09 16:41:10.044656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  * Copyright (c) 2018 Fraunhofer ESK : RLF extensions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Marco Miozzo <marco.miozzo@cttc.es>
@@ -42,6 +31,7 @@
 
 #include <cfloat>
 #include <cmath>
+#include <numeric>
 
 namespace ns3
 {
@@ -607,19 +597,16 @@
     {
         NS_ASSERT_MSG(m_rsReceivedPowerUpdated, " RS received power info obsolete");
         // RSRP evaluated as averaged received power among RBs
-        double sum = 0.0;
-        uint8_t rbNum = 0;
-        for (auto it = m_rsReceivedPower.ConstValuesBegin();
-             it != m_rsReceivedPower.ConstValuesEnd();
-             it++)
-        {
-            // convert PSD [W/Hz] to linear power [W] for the single RE
-            // we consider only one RE for the RS since the channel is
-            // flat within the same RB
-            double powerTxW = ((*it) * 180000.0) / 12.0;
-            sum += powerTxW;
-            rbNum++;
-        }
+        uint16_t rbNum = m_rsReceivedPower.GetValuesN();
+
+        // sum PSD [W/Hz] of all bands
+        double sum = std::reduce(m_rsReceivedPower.ConstValuesBegin(),
+                                 m_rsReceivedPower.ConstValuesEnd(),
+                                 0.0);
+
+        // convert PSD [W/Hz] to linear power [W]
+        sum *= (180000.0 / 12.0);
+
         double rsrp = (rbNum > 0) ? (sum / rbNum) : DBL_MAX;
         // averaged SINR among RBs
         double avSinr = ComputeAvgSinr(sinr);
@@ -662,10 +649,11 @@
             {
                 rbNum++;
                 // convert PSD [W/Hz] to linear power [W] for the single RE
-                double interfPlusNoisePowerTxW = ((*itIntN) * 180000.0) / 12.0;
-                double signalPowerTxW = ((*itPj) * 180000.0) / 12.0;
+                double interfPlusNoisePowerTxW = (*itIntN);
+                double signalPowerTxW = (*itPj);
                 rssiSum += (2 * (interfPlusNoisePowerTxW + signalPowerTxW));
             }
+            rssiSum *= (180000.0 / 12.0);
 
             NS_ASSERT(rbNum == (*itPss).nRB);
             double rsrq_dB = 10 * log10((*itPss).pssPsdSum / rssiSum);
@@ -815,15 +803,10 @@
 
     if (m_enableUplinkPowerControl)
     {
-        double sum = 0;
-        for (auto it = m_rsReceivedPower.ConstValuesBegin();
-             it != m_rsReceivedPower.ConstValuesEnd();
-             it++)
-        {
-            double powerTxW = ((*it) * 180000);
-            sum += powerTxW;
-        }
-        double rsrp = 10 * log10(sum) + 30;
+        double sum = std::reduce(m_rsReceivedPower.ConstValuesBegin(),
+                                 m_rsReceivedPower.ConstValuesEnd(),
+                                 0.0);
+        double rsrp = 10 * log10(sum * 180000) + 30;
 
         NS_LOG_INFO("RSRP: " << rsrp);
         m_powerControl->SetRsrp(rsrp);
@@ -1186,15 +1169,12 @@
 {
     NS_LOG_FUNCTION(this << cellId << (*p));
 
-    double sum = 0.0;
-    uint16_t nRB = 0;
-    for (auto itPi = p->ConstValuesBegin(); itPi != p->ConstValuesEnd(); itPi++)
-    {
-        // convert PSD [W/Hz] to linear power [W] for the single RE
-        double powerTxW = ((*itPi) * 180000.0) / 12.0;
-        sum += powerTxW;
-        nRB++;
-    }
+    uint16_t nRB = p->GetValuesN();
+    // sum PSD [W/Hz] of all bands
+    double sum = std::reduce(p->ConstValuesBegin(), p->ConstValuesEnd(), 0.0);
+
+    // convert PSD [W/Hz] to linear power [W]
+    sum *= (180000.0 / 12.0);
 
     // measure instantaneous RSRP now
     double rsrp_dBm = 10 * log10(1000 * (sum / (double)nRB));
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-phy.h ns-3.43/src/lte/model/lte-ue-phy.h
--- ns-3.42/src/lte/model/lte-ue-phy.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-phy.h	2024-10-09 16:41:10.044656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  * Copyright (c) 2018 Fraunhofer ESK : RLF extensions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  * Author: Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-phy-sap.cc ns-3.43/src/lte/model/lte-ue-phy-sap.cc
--- ns-3.42/src/lte/model/lte-ue-phy-sap.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-phy-sap.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-phy-sap.h ns-3.43/src/lte/model/lte-ue-phy-sap.h
--- ns-3.42/src/lte/model/lte-ue-phy-sap.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-phy-sap.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <mmiozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-power-control.cc ns-3.43/src/lte/model/lte-ue-power-control.cc
--- ns-3.42/src/lte/model/lte-ue-power-control.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-power-control.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-power-control.h ns-3.43/src/lte/model/lte-ue-power-control.h
--- ns-3.42/src/lte/model/lte-ue-power-control.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-power-control.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-rrc.cc ns-3.43/src/lte/model/lte-ue-rrc.cc
--- ns-3.42/src/lte/model/lte-ue-rrc.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-rrc.cc	2024-10-09 16:41:10.044656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2018 Fraunhofer ESK : RLF extensions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  *         Budiarto Herman <budiarto.herman@magister.fi>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-ue-rrc.h ns-3.43/src/lte/model/lte-ue-rrc.h
--- ns-3.42/src/lte/model/lte-ue-rrc.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-ue-rrc.h	2024-10-09 16:41:10.044656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  * Copyright (c) 2018 Fraunhofer ESK : RLF extensions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  *         Budiarto Herman <budiarto.herman@magister.fi>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-vendor-specific-parameters.cc ns-3.43/src/lte/model/lte-vendor-specific-parameters.cc
--- ns-3.42/src/lte/model/lte-vendor-specific-parameters.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-vendor-specific-parameters.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/lte-vendor-specific-parameters.h ns-3.43/src/lte/model/lte-vendor-specific-parameters.h
--- ns-3.42/src/lte/model/lte-vendor-specific-parameters.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/lte-vendor-specific-parameters.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/no-op-component-carrier-manager.cc ns-3.43/src/lte/model/no-op-component-carrier-manager.cc
--- ns-3.42/src/lte/model/no-op-component-carrier-manager.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/no-op-component-carrier-manager.cc	2024-10-09 16:41:10.044656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2015 Danilo Abrignani
  * Copyright (c) 2016 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Danilo Abrignani <danilo.abrignani@unibo.it>
  *          Biljana Bojovic <biljana.bojovic@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/no-op-component-carrier-manager.h ns-3.43/src/lte/model/no-op-component-carrier-manager.h
--- ns-3.42/src/lte/model/no-op-component-carrier-manager.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/no-op-component-carrier-manager.h	2024-10-09 16:41:10.044656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2015 Danilo Abrignani
  * Copyright (c) 2016 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Danilo Abrignani <danilo.abrignani@unibo.it>
  *          Biljana Bojovic <biljana.bojovic@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/no-op-handover-algorithm.cc ns-3.43/src/lte/model/no-op-handover-algorithm.cc
--- ns-3.42/src/lte/model/no-op-handover-algorithm.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/no-op-handover-algorithm.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/no-op-handover-algorithm.h ns-3.43/src/lte/model/no-op-handover-algorithm.h
--- ns-3.42/src/lte/model/no-op-handover-algorithm.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/no-op-handover-algorithm.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/pf-ff-mac-scheduler.cc ns-3.43/src/lte/model/pf-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/pf-ff-mac-scheduler.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/pf-ff-mac-scheduler.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/pf-ff-mac-scheduler.h ns-3.43/src/lte/model/pf-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/pf-ff-mac-scheduler.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/pf-ff-mac-scheduler.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/pss-ff-mac-scheduler.cc ns-3.43/src/lte/model/pss-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/pss-ff-mac-scheduler.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/pss-ff-mac-scheduler.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/pss-ff-mac-scheduler.h ns-3.43/src/lte/model/pss-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/pss-ff-mac-scheduler.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/pss-ff-mac-scheduler.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/rem-spectrum-phy.cc ns-3.43/src/lte/model/rem-spectrum-phy.cc
--- ns-3.42/src/lte/model/rem-spectrum-phy.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/rem-spectrum-phy.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  * Modified by: Marco Miozzo <mmiozzo@cttc.es> convert to
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/rem-spectrum-phy.h ns-3.43/src/lte/model/rem-spectrum-phy.h
--- ns-3.42/src/lte/model/rem-spectrum-phy.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/rem-spectrum-phy.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/rr-ff-mac-scheduler.cc ns-3.43/src/lte/model/rr-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/rr-ff-mac-scheduler.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/rr-ff-mac-scheduler.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
@@ -298,7 +287,7 @@
     // initialize statistics of the flow in case of new flows
     if (newLc)
     {
-        m_p10CqiRxed[params.m_rnti] = 1; // only codeword 0 at this stage (SISO)
+        m_p10CqiRxed.emplace(params.m_rnti, 1); // only codeword 0 at this stage (SISO)
         // initialized to 1 (i.e., the lowest value for transmitting a signal)
         m_p10CqiTimers[params.m_rnti] = m_cqiTimersThreshold;
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/rr-ff-mac-scheduler.h ns-3.43/src/lte/model/rr-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/rr-ff-mac-scheduler.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/rr-ff-mac-scheduler.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/simple-ue-component-carrier-manager.cc ns-3.43/src/lte/model/simple-ue-component-carrier-manager.cc
--- ns-3.42/src/lte/model/simple-ue-component-carrier-manager.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/simple-ue-component-carrier-manager.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/simple-ue-component-carrier-manager.h ns-3.43/src/lte/model/simple-ue-component-carrier-manager.h
--- ns-3.42/src/lte/model/simple-ue-component-carrier-manager.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/simple-ue-component-carrier-manager.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Danilo Abrignani
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Danilo Abrignani <danilo.abrignani@unibo.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/tdbet-ff-mac-scheduler.cc ns-3.43/src/lte/model/tdbet-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/tdbet-ff-mac-scheduler.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/tdbet-ff-mac-scheduler.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/tdbet-ff-mac-scheduler.h ns-3.43/src/lte/model/tdbet-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/tdbet-ff-mac-scheduler.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/tdbet-ff-mac-scheduler.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/tdmt-ff-mac-scheduler.cc ns-3.43/src/lte/model/tdmt-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/tdmt-ff-mac-scheduler.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/tdmt-ff-mac-scheduler.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/tdmt-ff-mac-scheduler.h ns-3.43/src/lte/model/tdmt-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/tdmt-ff-mac-scheduler.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/tdmt-ff-mac-scheduler.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/tdtbfq-ff-mac-scheduler.cc ns-3.43/src/lte/model/tdtbfq-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/tdtbfq-ff-mac-scheduler.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/tdtbfq-ff-mac-scheduler.h ns-3.43/src/lte/model/tdtbfq-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/tdtbfq-ff-mac-scheduler.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/tdtbfq-ff-mac-scheduler.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/tta-ff-mac-scheduler.cc ns-3.43/src/lte/model/tta-ff-mac-scheduler.cc
--- ns-3.42/src/lte/model/tta-ff-mac-scheduler.cc	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/tta-ff-mac-scheduler.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/model/tta-ff-mac-scheduler.h ns-3.43/src/lte/model/tta-ff-mac-scheduler.h
--- ns-3.42/src/lte/model/tta-ff-mac-scheduler.h	2024-05-29 15:29:47.120073600 -0700
+++ ns-3.43/src/lte/model/tta-ff-mac-scheduler.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  * Modification: Dizhi Zhou <dizhi.zhou@gmail.com>    // modify codes related to downlink scheduler
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/epc-test-gtpu.cc ns-3.43/src/lte/test/epc-test-gtpu.cc
--- ns-3.42/src/lte/test/epc-test-gtpu.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/epc-test-gtpu.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jaume.nin@cttc.cat>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/epc-test-gtpu.h ns-3.43/src/lte/test/epc-test-gtpu.h
--- ns-3.42/src/lte/test/epc-test-gtpu.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/epc-test-gtpu.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jaume Nin <jaume.nin@cttc.cat>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/epc-test-s1u-downlink.cc ns-3.43/src/lte/test/epc-test-s1u-downlink.cc
--- ns-3.42/src/lte/test/epc-test-s1u-downlink.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/epc-test-s1u-downlink.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/epc-test-s1u-uplink.cc ns-3.43/src/lte/test/epc-test-s1u-uplink.cc
--- ns-3.42/src/lte/test/epc-test-s1u-uplink.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/epc-test-s1u-uplink.cc	2024-10-09 16:41:10.044656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007,2008,2009 INRIA, UDCAST
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * The original version of UdpClient is by  Amine Ismail
  * <amine.ismail@sophia.inria.fr> <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-ffr-simple.cc ns-3.43/src/lte/test/lte-ffr-simple.cc
--- ns-3.42/src/lte/test/lte-ffr-simple.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-ffr-simple.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-ffr-simple.h ns-3.43/src/lte/test/lte-ffr-simple.h
--- ns-3.42/src/lte/test/lte-ffr-simple.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-ffr-simple.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-simple-helper.cc ns-3.43/src/lte/test/lte-simple-helper.cc
--- ns-3.42/src/lte/test/lte-simple-helper.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-simple-helper.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  * (Based on lte-helper.cc)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-simple-helper.h ns-3.43/src/lte/test/lte-simple-helper.h
--- ns-3.42/src/lte/test/lte-simple-helper.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-simple-helper.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  * (Based on lte-helper.h)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-simple-net-device.cc ns-3.43/src/lte/test/lte-simple-net-device.cc
--- ns-3.42/src/lte/test/lte-simple-net-device.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-simple-net-device.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-simple-net-device.h ns-3.43/src/lte/test/lte-simple-net-device.h
--- ns-3.42/src/lte/test/lte-simple-net-device.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-simple-net-device.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-simple-spectrum-phy.cc ns-3.43/src/lte/test/lte-simple-spectrum-phy.cc
--- ns-3.42/src/lte/test/lte-simple-spectrum-phy.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-simple-spectrum-phy.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-simple-spectrum-phy.h ns-3.43/src/lte/test/lte-simple-spectrum-phy.h
--- ns-3.42/src/lte/test/lte-simple-spectrum-phy.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-simple-spectrum-phy.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-aggregation-throughput-scale.cc ns-3.43/src/lte/test/lte-test-aggregation-throughput-scale.cc
--- ns-3.42/src/lte/test/lte-test-aggregation-throughput-scale.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-aggregation-throughput-scale.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Alexander Krotov
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-aggregation-throughput-scale.h ns-3.43/src/lte/test/lte-test-aggregation-throughput-scale.h
--- ns-3.42/src/lte/test/lte-test-aggregation-throughput-scale.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-aggregation-throughput-scale.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Alexander Krotov
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-carrier-aggregation.cc ns-3.43/src/lte/test/lte-test-carrier-aggregation.cc
--- ns-3.42/src/lte/test/lte-test-carrier-aggregation.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-carrier-aggregation.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Biljana Bojovic <bbojovic@cttc.es>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-carrier-aggregation-configuration.cc ns-3.43/src/lte/test/lte-test-carrier-aggregation-configuration.cc
--- ns-3.42/src/lte/test/lte-test-carrier-aggregation-configuration.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-carrier-aggregation-configuration.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Zoraze Ali <zoraze.ali@cttc.es>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-carrier-aggregation.h ns-3.43/src/lte/test/lte-test-carrier-aggregation.h
--- ns-3.42/src/lte/test/lte-test-carrier-aggregation.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-carrier-aggregation.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Biljana Bojovic <biljana.bojovic@cttc.es>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-cell-selection.cc ns-3.43/src/lte/test/lte-test-cell-selection.cc
--- ns-3.42/src/lte/test/lte-test-cell-selection.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-cell-selection.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-cell-selection.h ns-3.43/src/lte/test/lte-test-cell-selection.h
--- ns-3.42/src/lte/test/lte-test-cell-selection.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-cell-selection.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-cqa-ff-mac-scheduler.cc	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Biljana Bojovic<bbojovic@cttc.es>
  *          Dizhi Zhou <dizhi.zhou@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-cqa-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-cqa-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-cqa-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-cqa-ff-mac-scheduler.h	2024-10-09 16:41:10.044656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Biljana Bojovic<bbojovic@cttc.es>
  *          Dizhi Zhou <dizhi.zhou@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-cqi-generation.cc ns-3.43/src/lte/test/lte-test-cqi-generation.cc
--- ns-3.42/src/lte/test/lte-test-cqi-generation.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-cqi-generation.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-cqi-generation.h ns-3.43/src/lte/test/lte-test-cqi-generation.h
--- ns-3.42/src/lte/test/lte-test-cqi-generation.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-cqi-generation.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-deactivate-bearer.cc ns-3.43/src/lte/test/lte-test-deactivate-bearer.cc
--- ns-3.42/src/lte/test/lte-test-deactivate-bearer.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-deactivate-bearer.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:Gaurav Sathe <gaurav.sathe@tcs.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-downlink-power-control.cc ns-3.43/src/lte/test/lte-test-downlink-power-control.cc
--- ns-3.42/src/lte/test/lte-test-downlink-power-control.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-downlink-power-control.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-downlink-power-control.h ns-3.43/src/lte/test/lte-test-downlink-power-control.h
--- ns-3.42/src/lte/test/lte-test-downlink-power-control.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-downlink-power-control.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-downlink-sinr.cc ns-3.43/src/lte/test/lte-test-downlink-sinr.cc
--- ns-3.42/src/lte/test/lte-test-downlink-sinr.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-downlink-sinr.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  * Modified by Marco Miozzo <mmiozzo@ctt.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-downlink-sinr.h ns-3.43/src/lte/test/lte-test-downlink-sinr.h
--- ns-3.42/src/lte/test/lte-test-downlink-sinr.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-downlink-sinr.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  * Modified by Marco Miozzo <mmiozzo@ctt.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-earfcn.cc ns-3.43/src/lte/test/lte-test-earfcn.cc
--- ns-3.42/src/lte/test/lte-test-earfcn.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-earfcn.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-entities.cc ns-3.43/src/lte/test/lte-test-entities.cc
--- ns-3.42/src/lte/test/lte-test-entities.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-entities.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-entities.h ns-3.43/src/lte/test/lte-test-entities.h
--- ns-3.42/src/lte/test/lte-test-entities.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-entities.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-fdbet-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-fdbet-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-fdbet-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-fdbet-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-fdbet-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-fdmt-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-fdmt-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-fdmt-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-fdmt-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-fdmt-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-fdtbfq-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-frequency-reuse.cc ns-3.43/src/lte/test/lte-test-frequency-reuse.cc
--- ns-3.42/src/lte/test/lte-test-frequency-reuse.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-frequency-reuse.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-frequency-reuse.h ns-3.43/src/lte/test/lte-test-frequency-reuse.h
--- ns-3.42/src/lte/test/lte-test-frequency-reuse.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-frequency-reuse.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-harq.cc ns-3.43/src/lte/test/lte-test-harq.cc
--- ns-3.42/src/lte/test/lte-test-harq.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-harq.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-harq.h ns-3.43/src/lte/test/lte-test-harq.h
--- ns-3.42/src/lte/test/lte-test-harq.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-harq.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-interference.cc ns-3.43/src/lte/test/lte-test-interference.cc
--- ns-3.42/src/lte/test/lte-test-interference.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-interference.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-interference-fr.cc ns-3.43/src/lte/test/lte-test-interference-fr.cc
--- ns-3.42/src/lte/test/lte-test-interference-fr.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-interference-fr.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  * Based on lte-test-interference.{h,cc} by:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-interference-fr.h ns-3.43/src/lte/test/lte-test-interference-fr.h
--- ns-3.42/src/lte/test/lte-test-interference-fr.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-interference-fr.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  * Based on lte-test-interference.{h,cc} by:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-interference.h ns-3.43/src/lte/test/lte-test-interference.h
--- ns-3.42/src/lte/test/lte-test-interference.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-interference.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-ipv6-routing.cc ns-3.43/src/lte/test/lte-test-ipv6-routing.cc
--- ns-3.42/src/lte/test/lte-test-ipv6-routing.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-ipv6-routing.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Jadavpur University, India
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manoj Kumar Rana <manoj24.rana@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-link-adaptation.cc ns-3.43/src/lte/test/lte-test-link-adaptation.cc
--- ns-3.42/src/lte/test/lte-test-link-adaptation.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-link-adaptation.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-link-adaptation.h ns-3.43/src/lte/test/lte-test-link-adaptation.h
--- ns-3.42/src/lte/test/lte-test-link-adaptation.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-link-adaptation.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-mimo.cc ns-3.43/src/lte/test/lte-test-mimo.cc
--- ns-3.42/src/lte/test/lte-test-mimo.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-mimo.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-mimo.h ns-3.43/src/lte/test/lte-test-mimo.h
--- ns-3.42/src/lte/test/lte-test-mimo.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-mimo.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-pathloss-model.cc ns-3.43/src/lte/test/lte-test-pathloss-model.cc
--- ns-3.42/src/lte/test/lte-test-pathloss-model.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-pathloss-model.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-pathloss-model.h ns-3.43/src/lte/test/lte-test-pathloss-model.h
--- ns-3.42/src/lte/test/lte-test-pathloss-model.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-pathloss-model.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-pf-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-pf-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-pf-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-pf-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-pf-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-pf-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-pf-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-phy-error-model.cc ns-3.43/src/lte/test/lte-test-phy-error-model.cc
--- ns-3.42/src/lte/test/lte-test-phy-error-model.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-phy-error-model.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
@@ -167,6 +156,11 @@
     Config::SetDefault("ns3::RrFfMacScheduler::HarqEnabled", BooleanValue(false));
     Config::SetGlobal("RngRun", UintegerValue(m_rngRun));
 
+    Config::SetDefault("ns3::RadioBearerStatsCalculator::DlRlcOutputFilename",
+                       StringValue(CreateTempDirFilename("DlRlcStats.txt")));
+    Config::SetDefault("ns3::RadioBearerStatsCalculator::UlRlcOutputFilename",
+                       StringValue(CreateTempDirFilename("UlRlcStats.txt")));
+
     // Disable Uplink Power Control
     Config::SetDefault("ns3::LteUePhy::EnableUplinkPowerControl", BooleanValue(false));
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-phy-error-model.h ns-3.43/src/lte/test/lte-test-phy-error-model.h
--- ns-3.42/src/lte/test/lte-test-phy-error-model.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-phy-error-model.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-primary-cell-change.cc ns-3.43/src/lte/test/lte-test-primary-cell-change.cc
--- ns-3.42/src/lte/test/lte-test-primary-cell-change.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-primary-cell-change.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Alexander Krotov
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-primary-cell-change.h ns-3.43/src/lte/test/lte-test-primary-cell-change.h
--- ns-3.42/src/lte/test/lte-test-primary-cell-change.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-primary-cell-change.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Alexander Krotov
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-pss-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-pss-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-pss-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-pss-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-pss-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-pss-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-pss-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-radio-link-failure.cc ns-3.43/src/lte/test/lte-test-radio-link-failure.cc
--- ns-3.42/src/lte/test/lte-test-radio-link-failure.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-radio-link-failure.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Fraunhofer ESK
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Vignesh Babu <ns3-dev@esk.fraunhofer.de>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-radio-link-failure.h ns-3.43/src/lte/test/lte-test-radio-link-failure.h
--- ns-3.42/src/lte/test/lte-test-radio-link-failure.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-radio-link-failure.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Fraunhofer ESK
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Vignesh Babu <ns3-dev@esk.fraunhofer.de>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rlc-am-e2e.cc ns-3.43/src/lte/test/lte-test-rlc-am-e2e.cc
--- ns-3.42/src/lte/test/lte-test-rlc-am-e2e.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rlc-am-e2e.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rlc-am-e2e.h ns-3.43/src/lte/test/lte-test-rlc-am-e2e.h
--- ns-3.42/src/lte/test/lte-test-rlc-am-e2e.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rlc-am-e2e.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rlc-am-transmitter.cc ns-3.43/src/lte/test/lte-test-rlc-am-transmitter.cc
--- ns-3.42/src/lte/test/lte-test-rlc-am-transmitter.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rlc-am-transmitter.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rlc-am-transmitter.h ns-3.43/src/lte/test/lte-test-rlc-am-transmitter.h
--- ns-3.42/src/lte/test/lte-test-rlc-am-transmitter.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rlc-am-transmitter.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rlc-um-e2e.cc ns-3.43/src/lte/test/lte-test-rlc-um-e2e.cc
--- ns-3.42/src/lte/test/lte-test-rlc-um-e2e.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rlc-um-e2e.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rlc-um-e2e.h ns-3.43/src/lte/test/lte-test-rlc-um-e2e.h
--- ns-3.42/src/lte/test/lte-test-rlc-um-e2e.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rlc-um-e2e.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rlc-um-transmitter.cc ns-3.43/src/lte/test/lte-test-rlc-um-transmitter.cc
--- ns-3.42/src/lte/test/lte-test-rlc-um-transmitter.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rlc-um-transmitter.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rlc-um-transmitter.h ns-3.43/src/lte/test/lte-test-rlc-um-transmitter.h
--- ns-3.42/src/lte/test/lte-test-rlc-um-transmitter.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rlc-um-transmitter.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rr-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-rr-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rr-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-rr-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-rr-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-rr-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-rr-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-secondary-cell-handover.cc ns-3.43/src/lte/test/lte-test-secondary-cell-handover.cc
--- ns-3.42/src/lte/test/lte-test-secondary-cell-handover.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-secondary-cell-handover.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Alexander Krotov
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-secondary-cell-selection.cc ns-3.43/src/lte/test/lte-test-secondary-cell-selection.cc
--- ns-3.42/src/lte/test/lte-test-secondary-cell-selection.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-secondary-cell-selection.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Alexander Krotov
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-secondary-cell-selection.h ns-3.43/src/lte/test/lte-test-secondary-cell-selection.h
--- ns-3.42/src/lte/test/lte-test-secondary-cell-selection.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-secondary-cell-selection.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Alexander Krotov
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-spectrum-value-helper.cc ns-3.43/src/lte/test/lte-test-spectrum-value-helper.cc
--- ns-3.42/src/lte/test/lte-test-spectrum-value-helper.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-spectrum-value-helper.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-tdbet-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-tdbet-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-tdbet-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-tdbet-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-tdbet-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-tdmt-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-tdmt-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-tdmt-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-tdmt-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-tdmt-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-tdtbfq-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-tta-ff-mac-scheduler.cc ns-3.43/src/lte/test/lte-test-tta-ff-mac-scheduler.cc
--- ns-3.42/src/lte/test/lte-test-tta-ff-mac-scheduler.cc	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-tta-ff-mac-scheduler.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-tta-ff-mac-scheduler.h ns-3.43/src/lte/test/lte-test-tta-ff-mac-scheduler.h
--- ns-3.42/src/lte/test/lte-test-tta-ff-mac-scheduler.h	2024-05-29 15:29:47.124073500 -0700
+++ ns-3.43/src/lte/test/lte-test-tta-ff-mac-scheduler.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-ue-measurements.cc ns-3.43/src/lte/test/lte-test-ue-measurements.cc
--- ns-3.42/src/lte/test/lte-test-ue-measurements.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/lte-test-ue-measurements.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-ue-measurements.h ns-3.43/src/lte/test/lte-test-ue-measurements.h
--- ns-3.42/src/lte/test/lte-test-ue-measurements.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/lte-test-ue-measurements.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-ue-phy.cc ns-3.43/src/lte/test/lte-test-ue-phy.cc
--- ns-3.42/src/lte/test/lte-test-ue-phy.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/lte-test-ue-phy.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-ue-phy.h ns-3.43/src/lte/test/lte-test-ue-phy.h
--- ns-3.42/src/lte/test/lte-test-ue-phy.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/lte-test-ue-phy.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  * (Based on lte-ue-phy code)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-uplink-power-control.cc ns-3.43/src/lte/test/lte-test-uplink-power-control.cc
--- ns-3.42/src/lte/test/lte-test-uplink-power-control.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/lte-test-uplink-power-control.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-uplink-power-control.h ns-3.43/src/lte/test/lte-test-uplink-power-control.h
--- ns-3.42/src/lte/test/lte-test-uplink-power-control.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/lte-test-uplink-power-control.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Piotr Gawlowicz
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Gawlowicz <gawlowicz.p@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-uplink-sinr.cc ns-3.43/src/lte/test/lte-test-uplink-sinr.cc
--- ns-3.42/src/lte/test/lte-test-uplink-sinr.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/lte-test-uplink-sinr.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  * Modified by Marco Miozzo <mmiozzo@ctt.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/lte-test-uplink-sinr.h ns-3.43/src/lte/test/lte-test-uplink-sinr.h
--- ns-3.42/src/lte/test/lte-test-uplink-sinr.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/lte-test-uplink-sinr.h	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  * Modified by Marco Miozzo <mmiozzo@ctt.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-asn1-encoding.cc ns-3.43/src/lte/test/test-asn1-encoding.cc
--- ns-3.42/src/lte/test/test-asn1-encoding.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-asn1-encoding.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Lluis Parcerisa <lparcerisa@cttc.cat>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-epc-tft-classifier.cc ns-3.43/src/lte/test/test-epc-tft-classifier.cc
--- ns-3.42/src/lte/test/test-epc-tft-classifier.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-epc-tft-classifier.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011-2018 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-lte-antenna.cc ns-3.43/src/lte/test/test-lte-antenna.cc
--- ns-3.42/src/lte/test/test-lte-antenna.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-lte-antenna.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-lte-epc-e2e-data.cc ns-3.43/src/lte/test/test-lte-epc-e2e-data.cc
--- ns-3.42/src/lte/test/test-lte-epc-e2e-data.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-lte-epc-e2e-data.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-lte-handover-delay.cc ns-3.43/src/lte/test/test-lte-handover-delay.cc
--- ns-3.42/src/lte/test/test-lte-handover-delay.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-lte-handover-delay.cc	2024-10-09 16:41:10.048656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Magister Solutions
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *         Alexander Krotov <krotov@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-lte-handover-failure.cc ns-3.43/src/lte/test/test-lte-handover-failure.cc
--- ns-3.42/src/lte/test/test-lte-handover-failure.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-lte-handover-failure.cc	2024-10-09 16:41:10.052656400 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2013 Magister Solutions (original test-lte-handover-delay.cc)
  * Copyright (c) 2021 University of Washington (handover failure cases)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sachin Nayak <sachinnn@uw.edu>
  */
@@ -29,6 +18,7 @@
 #include <ns3/ipv4-static-routing.h>
 #include <ns3/log.h>
 #include <ns3/lte-helper.h>
+#include <ns3/lte-ue-net-device.h>
 #include <ns3/mobility-helper.h>
 #include <ns3/net-device-container.h>
 #include <ns3/node-container.h>
@@ -266,6 +256,10 @@
      */
     auto enbDevs = lteHelper->InstallEnbDevice(enbNodes);
     auto ueDev = lteHelper->InstallUeDevice(ueNode).Get(0);
+    auto castedUeDev = DynamicCast<LteUeNetDevice>(ueDev);
+    // Working value from before we started resetting g_nextStreamIndex. For more details
+    // see https://gitlab.com/nsnam/ns-3-dev/-/merge_requests/2178#note_2143793903
+    castedUeDev->GetPhy()->GetDlSpectrumPhy()->AssignStreams(175);
 
     /*
      * Network layer.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-lte-handover-target.cc ns-3.43/src/lte/test/test-lte-handover-target.cc
--- ns-3.42/src/lte/test/test-lte-handover-target.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-lte-handover-target.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Budiarto Herman
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Budiarto Herman <budiarto.herman@magister.fi>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-lte-rlc-header.cc ns-3.43/src/lte/test/test-lte-rlc-header.cc
--- ns-3.42/src/lte/test/test-lte-rlc-header.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-lte-rlc-header.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012, 2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Lluis Parcerisa <lparcerisa@cttc.cat> (TestUtils from test-asn1-encoding.cc)
  *         Nicola Baldo <nbaldo@cttc.es> (actual test)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-lte-rrc.cc ns-3.43/src/lte/test/test-lte-rrc.cc
--- ns-3.42/src/lte/test/test-lte-rrc.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-lte-rrc.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  *         Budiarto Herman <budiarto.herman@magister.fi>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-lte-x2-handover.cc ns-3.43/src/lte/test/test-lte-x2-handover.cc
--- ns-3.42/src/lte/test/test-lte-x2-handover.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-lte-x2-handover.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/lte/test/test-lte-x2-handover-measures.cc ns-3.43/src/lte/test/test-lte-x2-handover-measures.cc
--- ns-3.42/src/lte/test/test-lte-x2-handover-measures.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/lte/test/test-lte-x2-handover-measures.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *   Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/doc/mesh.h ns-3.43/src/mesh/doc/mesh.h
--- ns-3.42/src/mesh/doc/mesh.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/doc/mesh.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:     Kirill Andreev <andreev@itp.ru>
  *              Aleksander Safonov <safa@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/examples/CMakeLists.txt ns-3.43/src/mesh/examples/CMakeLists.txt
--- ns-3.42/src/mesh/examples/CMakeLists.txt	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/examples/CMakeLists.txt	2024-10-09 16:41:10.052656400 -0700
@@ -1,6 +1,6 @@
 build_lib_example(
-  NAME mesh
-  SOURCE_FILES mesh.cc
+  NAME mesh-example
+  SOURCE_FILES mesh-example.cc
   LIBRARIES_TO_LINK
     ${libinternet}
     ${libmobility}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/examples/mesh.cc ns-3.43/src/mesh/examples/mesh.cc
--- ns-3.42/src/mesh/examples/mesh.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/examples/mesh.cc	1969-12-31 16:00:00.000000000 -0800
@@ -1,362 +0,0 @@
-/*
- * Copyright (c) 2008,2009 IITP RAS
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Kirill Andreev <andreev@iitp.ru>
- *
- *
- * By default this script creates m_xSize * m_ySize square grid topology with
- * IEEE802.11s stack installed at each node with peering management
- * and HWMP protocol.
- * The side of the square cell is defined by m_step parameter.
- * When topology is created, UDP ping is installed to opposite corners
- * by diagonals. packet size of the UDP ping and interval between two
- * successive packets is configurable.
- *
- *  m_xSize * step
- *  |<--------->|
- *   step
- *  |<--->|
- *  * --- * --- * <---Ping sink  _
- *  | \   |   / |                ^
- *  |   \ | /   |                |
- *  * --- * --- * m_ySize * step |
- *  |   / | \   |                |
- *  | /   |   \ |                |
- *  * --- * --- *                _
- *  ^ Ping source
- *
- * By varying m_xSize and m_ySize, one can configure the route that is used.
- * When the inter-nodal distance is small, the source can reach the sink
- * directly.  When the inter-nodal distance is intermediate, the route
- * selected is diagonal (two hop).  When the inter-nodal distance is a bit
- * larger, the diagonals cannot be used and a four-hop route is selected.
- * When the distance is a bit larger, the packets will fail to reach even the
- * adjacent nodes.
- *
- * As of ns-3.36 release, with default configuration (mesh uses Wi-Fi 802.11a
- * standard and the ArfWifiManager rate control by default), the maximum
- * range is roughly 50m.  The default step size in this program is set to 50m,
- * so any mesh packets in the above diagram depiction will not be received
- * successfully on the diagonal hops between two nodes but only on the
- * horizontal and vertical hops.  If the step size is reduced to 35m, then
- * the shortest path will be on the diagonal hops.  If the step size is reduced
- * to 17m or less, then the source will be able to reach the sink directly
- * without any mesh hops (for the default 3x3 mesh depicted above).
- *
- * The position allocator will lay out the nodes in the following order
- * (corresponding to Node ID and to the diagram above):
- *
- * 6 - 7 - 8
- * |   |   |
- * 3 - 4 - 5
- * |   |   |
- * 0 - 1 - 2
- *
- *  See also MeshTest::Configure to read more about configurable
- *  parameters.
- */
-
-#include "ns3/applications-module.h"
-#include "ns3/core-module.h"
-#include "ns3/internet-module.h"
-#include "ns3/mesh-helper.h"
-#include "ns3/mesh-module.h"
-#include "ns3/mobility-module.h"
-#include "ns3/network-module.h"
-#include "ns3/yans-wifi-helper.h"
-
-#include <fstream>
-#include <iostream>
-#include <sstream>
-
-using namespace ns3;
-
-NS_LOG_COMPONENT_DEFINE("MeshExample");
-
-// Declaring these variables outside of main() for use in trace sinks
-uint32_t g_udpTxCount = 0; //!< Rx packet counter.
-uint32_t g_udpRxCount = 0; //!< Tx packet counter.
-
-/**
- * Transmission trace sink.
- *
- * \param p The sent packet.
- */
-void
-TxTrace(Ptr<const Packet> p)
-{
-    NS_LOG_DEBUG("Sent " << p->GetSize() << " bytes");
-    g_udpTxCount++;
-}
-
-/**
- * Reception trace sink,
- *
- * \param p The received packet.
- */
-void
-RxTrace(Ptr<const Packet> p)
-{
-    NS_LOG_DEBUG("Received " << p->GetSize() << " bytes");
-    g_udpRxCount++;
-}
-
-/**
- * \ingroup mesh
- * \brief MeshTest class
- */
-class MeshTest
-{
-  public:
-    /// Init test
-    MeshTest();
-    /**
-     * Configure test from command line arguments
-     *
-     * \param argc command line argument count
-     * \param argv command line arguments
-     */
-    void Configure(int argc, char** argv);
-    /**
-     * Run test
-     * \returns the test status
-     */
-    int Run();
-
-  private:
-    int m_xSize;             ///< X size
-    int m_ySize;             ///< Y size
-    double m_step;           ///< step
-    double m_randomStart;    ///< random start
-    double m_totalTime;      ///< total time
-    double m_packetInterval; ///< packet interval
-    uint16_t m_packetSize;   ///< packet size
-    uint32_t m_nIfaces;      ///< number interfaces
-    bool m_chan;             ///< channel
-    bool m_pcap;             ///< PCAP
-    bool m_ascii;            ///< ASCII
-    std::string m_stack;     ///< stack
-    std::string m_root;      ///< root
-    /// List of network nodes
-    NodeContainer nodes;
-    /// List of all mesh point devices
-    NetDeviceContainer meshDevices;
-    /// Addresses of interfaces:
-    Ipv4InterfaceContainer interfaces;
-    /// MeshHelper. Report is not static methods
-    MeshHelper mesh;
-
-  private:
-    /// Create nodes and setup their mobility
-    void CreateNodes();
-    /// Install internet m_stack on nodes
-    void InstallInternetStack();
-    /// Install applications
-    void InstallApplication();
-    /// Print mesh devices diagnostics
-    void Report();
-};
-
-MeshTest::MeshTest()
-    : m_xSize(3),
-      m_ySize(3),
-      m_step(50.0),
-      m_randomStart(0.1),
-      m_totalTime(100.0),
-      m_packetInterval(1),
-      m_packetSize(1024),
-      m_nIfaces(1),
-      m_chan(true),
-      m_pcap(false),
-      m_ascii(false),
-      m_stack("ns3::Dot11sStack"),
-      m_root("ff:ff:ff:ff:ff:ff")
-{
-}
-
-void
-MeshTest::Configure(int argc, char* argv[])
-{
-    CommandLine cmd(__FILE__);
-    cmd.AddValue("x-size", "Number of nodes in a row grid", m_xSize);
-    cmd.AddValue("y-size", "Number of rows in a grid", m_ySize);
-    cmd.AddValue("step", "Size of edge in our grid (meters)", m_step);
-    // Avoid starting all mesh nodes at the same time (beacons may collide)
-    cmd.AddValue("start", "Maximum random start delay for beacon jitter (sec)", m_randomStart);
-    cmd.AddValue("time", "Simulation time (sec)", m_totalTime);
-    cmd.AddValue("packet-interval", "Interval between packets in UDP ping (sec)", m_packetInterval);
-    cmd.AddValue("packet-size", "Size of packets in UDP ping (bytes)", m_packetSize);
-    cmd.AddValue("interfaces", "Number of radio interfaces used by each mesh point", m_nIfaces);
-    cmd.AddValue("channels", "Use different frequency channels for different interfaces", m_chan);
-    cmd.AddValue("pcap", "Enable PCAP traces on interfaces", m_pcap);
-    cmd.AddValue("ascii", "Enable Ascii traces on interfaces", m_ascii);
-    cmd.AddValue("stack", "Type of protocol stack. ns3::Dot11sStack by default", m_stack);
-    cmd.AddValue("root", "Mac address of root mesh point in HWMP", m_root);
-
-    cmd.Parse(argc, argv);
-    NS_LOG_DEBUG("Grid:" << m_xSize << "*" << m_ySize);
-    NS_LOG_DEBUG("Simulation time: " << m_totalTime << " s");
-    if (m_ascii)
-    {
-        PacketMetadata::Enable();
-    }
-}
-
-void
-MeshTest::CreateNodes()
-{
-    /*
-     * Create m_ySize*m_xSize stations to form a grid topology
-     */
-    nodes.Create(m_ySize * m_xSize);
-    // Configure YansWifiChannel
-    YansWifiPhyHelper wifiPhy;
-    YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default();
-    wifiPhy.SetChannel(wifiChannel.Create());
-    /*
-     * Create mesh helper and set stack installer to it
-     * Stack installer creates all needed protocols and install them to
-     * mesh point device
-     */
-    mesh = MeshHelper::Default();
-    if (!Mac48Address(m_root.c_str()).IsBroadcast())
-    {
-        mesh.SetStackInstaller(m_stack, "Root", Mac48AddressValue(Mac48Address(m_root.c_str())));
-    }
-    else
-    {
-        // If root is not set, we do not use "Root" attribute, because it
-        // is specified only for 11s
-        mesh.SetStackInstaller(m_stack);
-    }
-    if (m_chan)
-    {
-        mesh.SetSpreadInterfaceChannels(MeshHelper::SPREAD_CHANNELS);
-    }
-    else
-    {
-        mesh.SetSpreadInterfaceChannels(MeshHelper::ZERO_CHANNEL);
-    }
-    mesh.SetMacType("RandomStart", TimeValue(Seconds(m_randomStart)));
-    // Set number of interfaces - default is single-interface mesh point
-    mesh.SetNumberOfInterfaces(m_nIfaces);
-    // Install protocols and return container if MeshPointDevices
-    meshDevices = mesh.Install(wifiPhy, nodes);
-    // AssignStreams can optionally be used to control random variable streams
-    mesh.AssignStreams(meshDevices, 0);
-    // Setup mobility - static grid topology
-    MobilityHelper mobility;
-    mobility.SetPositionAllocator("ns3::GridPositionAllocator",
-                                  "MinX",
-                                  DoubleValue(0.0),
-                                  "MinY",
-                                  DoubleValue(0.0),
-                                  "DeltaX",
-                                  DoubleValue(m_step),
-                                  "DeltaY",
-                                  DoubleValue(m_step),
-                                  "GridWidth",
-                                  UintegerValue(m_xSize),
-                                  "LayoutType",
-                                  StringValue("RowFirst"));
-    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
-    mobility.Install(nodes);
-    if (m_pcap)
-    {
-        wifiPhy.EnablePcapAll(std::string("mp"));
-    }
-    if (m_ascii)
-    {
-        AsciiTraceHelper ascii;
-        wifiPhy.EnableAsciiAll(ascii.CreateFileStream("mesh.tr"));
-    }
-}
-
-void
-MeshTest::InstallInternetStack()
-{
-    InternetStackHelper internetStack;
-    internetStack.Install(nodes);
-    Ipv4AddressHelper address;
-    address.SetBase("10.1.1.0", "255.255.255.0");
-    interfaces = address.Assign(meshDevices);
-}
-
-void
-MeshTest::InstallApplication()
-{
-    uint16_t portNumber = 9;
-    UdpEchoServerHelper echoServer(portNumber);
-    uint16_t sinkNodeId = m_xSize * m_ySize - 1;
-    ApplicationContainer serverApps = echoServer.Install(nodes.Get(sinkNodeId));
-    serverApps.Start(Seconds(1.0));
-    serverApps.Stop(Seconds(m_totalTime + 1));
-    UdpEchoClientHelper echoClient(interfaces.GetAddress(sinkNodeId), portNumber);
-    echoClient.SetAttribute("MaxPackets",
-                            UintegerValue((uint32_t)(m_totalTime * (1 / m_packetInterval))));
-    echoClient.SetAttribute("Interval", TimeValue(Seconds(m_packetInterval)));
-    echoClient.SetAttribute("PacketSize", UintegerValue(m_packetSize));
-    ApplicationContainer clientApps = echoClient.Install(nodes.Get(0));
-    Ptr<UdpEchoClient> app = clientApps.Get(0)->GetObject<UdpEchoClient>();
-    app->TraceConnectWithoutContext("Tx", MakeCallback(&TxTrace));
-    app->TraceConnectWithoutContext("Rx", MakeCallback(&RxTrace));
-    clientApps.Start(Seconds(1.0));
-    clientApps.Stop(Seconds(m_totalTime + 1.5));
-}
-
-int
-MeshTest::Run()
-{
-    CreateNodes();
-    InstallInternetStack();
-    InstallApplication();
-    Simulator::Schedule(Seconds(m_totalTime), &MeshTest::Report, this);
-    Simulator::Stop(Seconds(m_totalTime + 2));
-    Simulator::Run();
-    Simulator::Destroy();
-    std::cout << "UDP echo packets sent: " << g_udpTxCount << " received: " << g_udpRxCount
-              << std::endl;
-    return 0;
-}
-
-void
-MeshTest::Report()
-{
-    unsigned n(0);
-    for (auto i = meshDevices.Begin(); i != meshDevices.End(); ++i, ++n)
-    {
-        std::ostringstream os;
-        os << "mp-report-" << n << ".xml";
-        std::cerr << "Printing mesh point device #" << n << " diagnostics to " << os.str() << "\n";
-        std::ofstream of;
-        of.open(os.str().c_str());
-        if (!of.is_open())
-        {
-            std::cerr << "Error: Can't open file " << os.str() << "\n";
-            return;
-        }
-        mesh.Report(*i, of);
-        of.close();
-    }
-}
-
-int
-main(int argc, char* argv[])
-{
-    MeshTest t;
-    t.Configure(argc, argv);
-    return t.Run();
-}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/examples/mesh-example.cc ns-3.43/src/mesh/examples/mesh-example.cc
--- ns-3.42/src/mesh/examples/mesh-example.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/mesh/examples/mesh-example.cc	2024-10-09 16:41:10.052656400 -0700
@@ -0,0 +1,351 @@
+/*
+ * Copyright (c) 2008,2009 IITP RAS
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Kirill Andreev <andreev@iitp.ru>
+ *
+ *
+ * By default this script creates m_xSize * m_ySize square grid topology with
+ * IEEE802.11s stack installed at each node with peering management
+ * and HWMP protocol.
+ * The side of the square cell is defined by m_step parameter.
+ * When topology is created, UDP ping is installed to opposite corners
+ * by diagonals. packet size of the UDP ping and interval between two
+ * successive packets is configurable.
+ *
+ *  m_xSize * step
+ *  |<--------->|
+ *   step
+ *  |<--->|
+ *  * --- * --- * <---Ping sink  _
+ *  | \   |   / |                ^
+ *  |   \ | /   |                |
+ *  * --- * --- * m_ySize * step |
+ *  |   / | \   |                |
+ *  | /   |   \ |                |
+ *  * --- * --- *                _
+ *  ^ Ping source
+ *
+ * By varying m_xSize and m_ySize, one can configure the route that is used.
+ * When the inter-nodal distance is small, the source can reach the sink
+ * directly.  When the inter-nodal distance is intermediate, the route
+ * selected is diagonal (two hop).  When the inter-nodal distance is a bit
+ * larger, the diagonals cannot be used and a four-hop route is selected.
+ * When the distance is a bit larger, the packets will fail to reach even the
+ * adjacent nodes.
+ *
+ * As of ns-3.36 release, with default configuration (mesh uses Wi-Fi 802.11a
+ * standard and the ArfWifiManager rate control by default), the maximum
+ * range is roughly 50m.  The default step size in this program is set to 50m,
+ * so any mesh packets in the above diagram depiction will not be received
+ * successfully on the diagonal hops between two nodes but only on the
+ * horizontal and vertical hops.  If the step size is reduced to 35m, then
+ * the shortest path will be on the diagonal hops.  If the step size is reduced
+ * to 17m or less, then the source will be able to reach the sink directly
+ * without any mesh hops (for the default 3x3 mesh depicted above).
+ *
+ * The position allocator will lay out the nodes in the following order
+ * (corresponding to Node ID and to the diagram above):
+ *
+ * 6 - 7 - 8
+ * |   |   |
+ * 3 - 4 - 5
+ * |   |   |
+ * 0 - 1 - 2
+ *
+ *  See also MeshTest::Configure to read more about configurable
+ *  parameters.
+ */
+
+#include "ns3/applications-module.h"
+#include "ns3/core-module.h"
+#include "ns3/internet-module.h"
+#include "ns3/mesh-helper.h"
+#include "ns3/mesh-module.h"
+#include "ns3/mobility-module.h"
+#include "ns3/network-module.h"
+#include "ns3/yans-wifi-helper.h"
+
+#include <fstream>
+#include <iostream>
+#include <sstream>
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("MeshExample");
+
+// Declaring these variables outside of main() for use in trace sinks
+uint32_t g_udpTxCount = 0; //!< Rx packet counter.
+uint32_t g_udpRxCount = 0; //!< Tx packet counter.
+
+/**
+ * Transmission trace sink.
+ *
+ * \param p The sent packet.
+ */
+void
+TxTrace(Ptr<const Packet> p)
+{
+    NS_LOG_DEBUG("Sent " << p->GetSize() << " bytes");
+    g_udpTxCount++;
+}
+
+/**
+ * Reception trace sink,
+ *
+ * \param p The received packet.
+ */
+void
+RxTrace(Ptr<const Packet> p)
+{
+    NS_LOG_DEBUG("Received " << p->GetSize() << " bytes");
+    g_udpRxCount++;
+}
+
+/**
+ * \ingroup mesh
+ * \brief MeshTest class
+ */
+class MeshTest
+{
+  public:
+    /// Init test
+    MeshTest();
+    /**
+     * Configure test from command line arguments
+     *
+     * \param argc command line argument count
+     * \param argv command line arguments
+     */
+    void Configure(int argc, char** argv);
+    /**
+     * Run test
+     * \returns the test status
+     */
+    int Run();
+
+  private:
+    int m_xSize;             ///< X size
+    int m_ySize;             ///< Y size
+    double m_step;           ///< step
+    double m_randomStart;    ///< random start
+    double m_totalTime;      ///< total time
+    double m_packetInterval; ///< packet interval
+    uint16_t m_packetSize;   ///< packet size
+    uint32_t m_nIfaces;      ///< number interfaces
+    bool m_chan;             ///< channel
+    bool m_pcap;             ///< PCAP
+    bool m_ascii;            ///< ASCII
+    std::string m_stack;     ///< stack
+    std::string m_root;      ///< root
+    /// List of network nodes
+    NodeContainer nodes;
+    /// List of all mesh point devices
+    NetDeviceContainer meshDevices;
+    /// Addresses of interfaces:
+    Ipv4InterfaceContainer interfaces;
+    /// MeshHelper. Report is not static methods
+    MeshHelper mesh;
+
+  private:
+    /// Create nodes and setup their mobility
+    void CreateNodes();
+    /// Install internet m_stack on nodes
+    void InstallInternetStack();
+    /// Install applications
+    void InstallApplication();
+    /// Print mesh devices diagnostics
+    void Report();
+};
+
+MeshTest::MeshTest()
+    : m_xSize(3),
+      m_ySize(3),
+      m_step(50.0),
+      m_randomStart(0.1),
+      m_totalTime(100.0),
+      m_packetInterval(1),
+      m_packetSize(1024),
+      m_nIfaces(1),
+      m_chan(true),
+      m_pcap(false),
+      m_ascii(false),
+      m_stack("ns3::Dot11sStack"),
+      m_root("ff:ff:ff:ff:ff:ff")
+{
+}
+
+void
+MeshTest::Configure(int argc, char* argv[])
+{
+    CommandLine cmd(__FILE__);
+    cmd.AddValue("x-size", "Number of nodes in a row grid", m_xSize);
+    cmd.AddValue("y-size", "Number of rows in a grid", m_ySize);
+    cmd.AddValue("step", "Size of edge in our grid (meters)", m_step);
+    // Avoid starting all mesh nodes at the same time (beacons may collide)
+    cmd.AddValue("start", "Maximum random start delay for beacon jitter (sec)", m_randomStart);
+    cmd.AddValue("time", "Simulation time (sec)", m_totalTime);
+    cmd.AddValue("packet-interval", "Interval between packets in UDP ping (sec)", m_packetInterval);
+    cmd.AddValue("packet-size", "Size of packets in UDP ping (bytes)", m_packetSize);
+    cmd.AddValue("interfaces", "Number of radio interfaces used by each mesh point", m_nIfaces);
+    cmd.AddValue("channels", "Use different frequency channels for different interfaces", m_chan);
+    cmd.AddValue("pcap", "Enable PCAP traces on interfaces", m_pcap);
+    cmd.AddValue("ascii", "Enable Ascii traces on interfaces", m_ascii);
+    cmd.AddValue("stack", "Type of protocol stack. ns3::Dot11sStack by default", m_stack);
+    cmd.AddValue("root", "Mac address of root mesh point in HWMP", m_root);
+
+    cmd.Parse(argc, argv);
+    NS_LOG_DEBUG("Grid:" << m_xSize << "*" << m_ySize);
+    NS_LOG_DEBUG("Simulation time: " << m_totalTime << " s");
+    if (m_ascii)
+    {
+        PacketMetadata::Enable();
+    }
+}
+
+void
+MeshTest::CreateNodes()
+{
+    /*
+     * Create m_ySize*m_xSize stations to form a grid topology
+     */
+    nodes.Create(m_ySize * m_xSize);
+    // Configure YansWifiChannel
+    YansWifiPhyHelper wifiPhy;
+    YansWifiChannelHelper wifiChannel = YansWifiChannelHelper::Default();
+    wifiPhy.SetChannel(wifiChannel.Create());
+    /*
+     * Create mesh helper and set stack installer to it
+     * Stack installer creates all needed protocols and install them to
+     * mesh point device
+     */
+    mesh = MeshHelper::Default();
+    if (!Mac48Address(m_root.c_str()).IsBroadcast())
+    {
+        mesh.SetStackInstaller(m_stack, "Root", Mac48AddressValue(Mac48Address(m_root.c_str())));
+    }
+    else
+    {
+        // If root is not set, we do not use "Root" attribute, because it
+        // is specified only for 11s
+        mesh.SetStackInstaller(m_stack);
+    }
+    if (m_chan)
+    {
+        mesh.SetSpreadInterfaceChannels(MeshHelper::SPREAD_CHANNELS);
+    }
+    else
+    {
+        mesh.SetSpreadInterfaceChannels(MeshHelper::ZERO_CHANNEL);
+    }
+    mesh.SetMacType("RandomStart", TimeValue(Seconds(m_randomStart)));
+    // Set number of interfaces - default is single-interface mesh point
+    mesh.SetNumberOfInterfaces(m_nIfaces);
+    // Install protocols and return container if MeshPointDevices
+    meshDevices = mesh.Install(wifiPhy, nodes);
+    // AssignStreams can optionally be used to control random variable streams
+    mesh.AssignStreams(meshDevices, 0);
+    // Setup mobility - static grid topology
+    MobilityHelper mobility;
+    mobility.SetPositionAllocator("ns3::GridPositionAllocator",
+                                  "MinX",
+                                  DoubleValue(0.0),
+                                  "MinY",
+                                  DoubleValue(0.0),
+                                  "DeltaX",
+                                  DoubleValue(m_step),
+                                  "DeltaY",
+                                  DoubleValue(m_step),
+                                  "GridWidth",
+                                  UintegerValue(m_xSize),
+                                  "LayoutType",
+                                  StringValue("RowFirst"));
+    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+    mobility.Install(nodes);
+    if (m_pcap)
+    {
+        wifiPhy.EnablePcapAll(std::string("mp"));
+    }
+    if (m_ascii)
+    {
+        AsciiTraceHelper ascii;
+        wifiPhy.EnableAsciiAll(ascii.CreateFileStream("mesh.tr"));
+    }
+}
+
+void
+MeshTest::InstallInternetStack()
+{
+    InternetStackHelper internetStack;
+    internetStack.Install(nodes);
+    Ipv4AddressHelper address;
+    address.SetBase("10.1.1.0", "255.255.255.0");
+    interfaces = address.Assign(meshDevices);
+}
+
+void
+MeshTest::InstallApplication()
+{
+    uint16_t portNumber = 9;
+    UdpEchoServerHelper echoServer(portNumber);
+    uint16_t sinkNodeId = m_xSize * m_ySize - 1;
+    ApplicationContainer serverApps = echoServer.Install(nodes.Get(sinkNodeId));
+    serverApps.Start(Seconds(1.0));
+    serverApps.Stop(Seconds(m_totalTime + 1));
+    UdpEchoClientHelper echoClient(interfaces.GetAddress(sinkNodeId), portNumber);
+    echoClient.SetAttribute("MaxPackets",
+                            UintegerValue((uint32_t)(m_totalTime * (1 / m_packetInterval))));
+    echoClient.SetAttribute("Interval", TimeValue(Seconds(m_packetInterval)));
+    echoClient.SetAttribute("PacketSize", UintegerValue(m_packetSize));
+    ApplicationContainer clientApps = echoClient.Install(nodes.Get(0));
+    Ptr<UdpEchoClient> app = clientApps.Get(0)->GetObject<UdpEchoClient>();
+    app->TraceConnectWithoutContext("Tx", MakeCallback(&TxTrace));
+    app->TraceConnectWithoutContext("Rx", MakeCallback(&RxTrace));
+    clientApps.Start(Seconds(1.0));
+    clientApps.Stop(Seconds(m_totalTime + 1.5));
+}
+
+int
+MeshTest::Run()
+{
+    CreateNodes();
+    InstallInternetStack();
+    InstallApplication();
+    Simulator::Schedule(Seconds(m_totalTime), &MeshTest::Report, this);
+    Simulator::Stop(Seconds(m_totalTime + 2));
+    Simulator::Run();
+    Simulator::Destroy();
+    std::cout << "UDP echo packets sent: " << g_udpTxCount << " received: " << g_udpRxCount
+              << std::endl;
+    return 0;
+}
+
+void
+MeshTest::Report()
+{
+    unsigned n(0);
+    for (auto i = meshDevices.Begin(); i != meshDevices.End(); ++i, ++n)
+    {
+        std::ostringstream os;
+        os << "mp-report-" << n << ".xml";
+        std::cerr << "Printing mesh point device #" << n << " diagnostics to " << os.str() << "\n";
+        std::ofstream of;
+        of.open(os.str().c_str());
+        if (!of.is_open())
+        {
+            std::cerr << "Error: Can't open file " << os.str() << "\n";
+            return;
+        }
+        mesh.Report(*i, of);
+        of.close();
+    }
+}
+
+int
+main(int argc, char* argv[])
+{
+    MeshTest t;
+    t.Configure(argc, argv);
+    return t.Run();
+}
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/helper/dot11s/dot11s-installer.cc ns-3.43/src/mesh/helper/dot11s/dot11s-installer.cc
--- ns-3.42/src/mesh/helper/dot11s/dot11s-installer.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/helper/dot11s/dot11s-installer.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/helper/dot11s/dot11s-installer.h ns-3.43/src/mesh/helper/dot11s/dot11s-installer.h
--- ns-3.42/src/mesh/helper/dot11s/dot11s-installer.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/helper/dot11s/dot11s-installer.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/helper/flame/flame-installer.cc ns-3.43/src/mesh/helper/flame/flame-installer.cc
--- ns-3.42/src/mesh/helper/flame/flame-installer.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/helper/flame/flame-installer.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/helper/flame/flame-installer.h ns-3.43/src/mesh/helper/flame/flame-installer.h
--- ns-3.42/src/mesh/helper/flame/flame-installer.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/helper/flame/flame-installer.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/helper/mesh-helper.cc ns-3.43/src/mesh/helper/mesh-helper.cc
--- ns-3.42/src/mesh/helper/mesh-helper.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/helper/mesh-helper.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  *         Pavel Boyko <boyko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/helper/mesh-helper.h ns-3.43/src/mesh/helper/mesh-helper.h
--- ns-3.42/src/mesh/helper/mesh-helper.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/helper/mesh-helper.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  *         Pavel Boyko <boyko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/helper/mesh-stack-installer.cc ns-3.43/src/mesh/helper/mesh-stack-installer.cc
--- ns-3.42/src/mesh/helper/mesh-stack-installer.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/helper/mesh-stack-installer.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015, Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/helper/mesh-stack-installer.h ns-3.43/src/mesh/helper/mesh-stack-installer.h
--- ns-3.42/src/mesh/helper/mesh-stack-installer.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/helper/mesh-stack-installer.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/airtime-metric.cc ns-3.43/src/mesh/model/dot11s/airtime-metric.cc
--- ns-3.42/src/mesh/model/dot11s/airtime-metric.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/airtime-metric.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/airtime-metric.h ns-3.43/src/mesh/model/dot11s/airtime-metric.h
--- ns-3.42/src/mesh/model/dot11s/airtime-metric.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/airtime-metric.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/dot11s.h ns-3.43/src/mesh/model/dot11s/dot11s.h
--- ns-3.42/src/mesh/model/dot11s/dot11s.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/dot11s.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pavel Boyko <boyko@iitp.ru>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/dot11s-mac-header.cc ns-3.43/src/mesh/model/dot11s/dot11s-mac-header.cc
--- ns-3.42/src/mesh/model/dot11s/dot11s-mac-header.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/dot11s-mac-header.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/dot11s-mac-header.h ns-3.43/src/mesh/model/dot11s/dot11s-mac-header.h
--- ns-3.42/src/mesh/model/dot11s/dot11s-mac-header.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/dot11s-mac-header.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/hwmp-protocol.cc ns-3.43/src/mesh/model/dot11s/hwmp-protocol.cc
--- ns-3.42/src/mesh/model/dot11s/hwmp-protocol.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/hwmp-protocol.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/hwmp-protocol.h ns-3.43/src/mesh/model/dot11s/hwmp-protocol.h
--- ns-3.42/src/mesh/model/dot11s/hwmp-protocol.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/hwmp-protocol.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
@@ -165,7 +154,7 @@
      *  \param os the output stream
      */
     void Report(std::ostream& os) const;
-    ///\brief Reset Statistics:
+    /// \brief Reset Statistics:
     void ResetStats();
     ///@}
 
@@ -412,7 +401,7 @@
     void SendProactivePreq();
     ///@}
 
-    ///\return address of MeshPointDevice
+    /// \return address of MeshPointDevice
     Mac48Address GetAddress();
     /// \name Methods needed by HwmpMacLugin to access protocol parameters:
     ///@{
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/hwmp-protocol-mac.cc ns-3.43/src/mesh/model/dot11s/hwmp-protocol-mac.cc
--- ns-3.42/src/mesh/model/dot11s/hwmp-protocol-mac.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/hwmp-protocol-mac.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/hwmp-protocol-mac.h ns-3.43/src/mesh/model/dot11s/hwmp-protocol-mac.h
--- ns-3.42/src/mesh/model/dot11s/hwmp-protocol-mac.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/hwmp-protocol-mac.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/hwmp-rtable.cc ns-3.43/src/mesh/model/dot11s/hwmp-rtable.cc
--- ns-3.42/src/mesh/model/dot11s/hwmp-rtable.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/hwmp-rtable.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/hwmp-rtable.h ns-3.43/src/mesh/model/dot11s/hwmp-rtable.h
--- ns-3.42/src/mesh/model/dot11s/hwmp-rtable.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/hwmp-rtable.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/hwmp-tag.cc ns-3.43/src/mesh/model/dot11s/hwmp-tag.cc
--- ns-3.42/src/mesh/model/dot11s/hwmp-tag.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/hwmp-tag.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/hwmp-tag.h ns-3.43/src/mesh/model/dot11s/hwmp-tag.h
--- ns-3.42/src/mesh/model/dot11s/hwmp-tag.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/hwmp-tag.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Aleksey Kovalenko <kovalenko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-beacon-timing.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-beacon-timing.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-configuration.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-configuration.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-configuration.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-configuration.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Aleksey Kovalenko <kovalenko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-configuration.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-configuration.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-configuration.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-configuration.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Aleksey Kovalenko <kovalenko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-id.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-id.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-id.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-id.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-id.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-id.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-id.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-id.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-metric-report.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-metric-report.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-metric-report.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-metric-report.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-metric-report.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-metric-report.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-metric-report.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-metric-report.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-peering-protocol.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-peering-protocol.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-peer-management.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-peer-management.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-peer-management.cc	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-peer-management.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Aleksey Kovalenko <kovalenko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-peer-management.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-peer-management.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-peer-management.h	2024-05-29 15:29:47.128073700 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-peer-management.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Aleksey Kovalenko <kovalenko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-perr.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-perr.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-perr.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-perr.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-perr.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-perr.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-perr.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-perr.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-prep.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-prep.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-prep.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-prep.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-prep.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-prep.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-prep.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-prep.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-preq.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-preq.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-preq.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-preq.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-preq.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-preq.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-preq.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-preq.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-rann.cc ns-3.43/src/mesh/model/dot11s/ie-dot11s-rann.cc
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-rann.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-rann.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/ie-dot11s-rann.h ns-3.43/src/mesh/model/dot11s/ie-dot11s-rann.h
--- ns-3.42/src/mesh/model/dot11s/ie-dot11s-rann.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/ie-dot11s-rann.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/peer-link.cc ns-3.43/src/mesh/model/dot11s/peer-link.cc
--- ns-3.42/src/mesh/model/dot11s/peer-link.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/peer-link.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Aleksey Kovalenko <kovalenko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/peer-link-frame.cc ns-3.43/src/mesh/model/dot11s/peer-link-frame.cc
--- ns-3.42/src/mesh/model/dot11s/peer-link-frame.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/peer-link-frame.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/peer-link-frame.h ns-3.43/src/mesh/model/dot11s/peer-link-frame.h
--- ns-3.42/src/mesh/model/dot11s/peer-link-frame.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/peer-link-frame.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
@@ -53,7 +42,7 @@
     PeerLinkOpenStart(const PeerLinkOpenStart&) = delete;
     PeerLinkOpenStart& operator=(const PeerLinkOpenStart&) = delete;
 
-    ///\brief fields:
+    /// \brief fields:
     struct PlinkOpenStartFields
     {
         IePeeringProtocol protocol; ///< Peering protocol version - 3 octets
@@ -123,7 +112,7 @@
     PeerLinkCloseStart(const PeerLinkCloseStart&) = delete;
     PeerLinkCloseStart& operator=(const PeerLinkCloseStart&) = delete;
 
-    ///\brief fields:
+    /// \brief fields:
     struct PlinkCloseStartFields
     {
         IePeeringProtocol protocol; ///< Peering protocol version - 3 octets
@@ -187,7 +176,7 @@
     PeerLinkConfirmStart(const PeerLinkConfirmStart&) = delete;
     PeerLinkConfirmStart& operator=(const PeerLinkConfirmStart&) = delete;
 
-    ///\brief fields:
+    /// \brief fields:
     struct PlinkConfirmStartFields
     {
         IePeeringProtocol protocol; ///< Peering protocol version - 3 octets
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/peer-link.h ns-3.43/src/mesh/model/dot11s/peer-link.h
--- ns-3.42/src/mesh/model/dot11s/peer-link.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/peer-link.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Aleksey Kovalenko <kovalenko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/peer-management-protocol.cc ns-3.43/src/mesh/model/dot11s/peer-management-protocol.cc
--- ns-3.42/src/mesh/model/dot11s/peer-management-protocol.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/peer-management-protocol.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Aleksey Kovalenko <kovalenko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/peer-management-protocol.h ns-3.43/src/mesh/model/dot11s/peer-management-protocol.h
--- ns-3.42/src/mesh/model/dot11s/peer-management-protocol.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/peer-management-protocol.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Aleksey Kovalenko <kovalenko@iitp.ru>
@@ -263,9 +252,9 @@
     typedef std::map<uint32_t, PeerLinksOnInterface> PeerLinksMap;
     /// This map keeps relationship between peer address and its beacon information
     typedef std::map<Mac48Address, BeaconInfo> BeaconsOnInterface;
-    ///\brief This map keeps beacon information on all interfaces
+    /// \brief This map keeps beacon information on all interfaces
     typedef std::map<uint32_t, BeaconsOnInterface> BeaconInfoMap;
-    ///\brief this vector keeps pointers to MAC-plugins
+    /// \brief this vector keeps pointers to MAC-plugins
     typedef std::map<uint32_t, Ptr<PeerManagementProtocolMac>> PeerManagementProtocolMacMap;
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/peer-management-protocol-mac.cc ns-3.43/src/mesh/model/dot11s/peer-management-protocol-mac.cc
--- ns-3.42/src/mesh/model/dot11s/peer-management-protocol-mac.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/peer-management-protocol-mac.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/dot11s/peer-management-protocol-mac.h ns-3.43/src/mesh/model/dot11s/peer-management-protocol-mac.h
--- ns-3.42/src/mesh/model/dot11s/peer-management-protocol-mac.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/dot11s/peer-management-protocol-mac.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
@@ -129,7 +118,7 @@
     /// allow PeerLink class access friend access
     friend class PeerLink;
 
-    ///\name Create peer link management frames
+    /// \name Create peer link management frames
     // \{
     /**
      * \brief This structure keeps all fields in peer link management frame,
@@ -234,7 +223,7 @@
 
   private:
     Statistics m_stats; ///< statistics
-    ///\name Information about MAC and protocol:
+    /// \name Information about MAC and protocol:
     Ptr<MeshWifiInterfaceMac> m_parent;     ///< parent
     uint32_t m_ifIndex;                     ///< IF index
     Ptr<PeerManagementProtocol> m_protocol; ///< protocol
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/flame/flame-header.cc ns-3.43/src/mesh/model/flame/flame-header.cc
--- ns-3.42/src/mesh/model/flame/flame-header.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/flame/flame-header.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/flame/flame-header.h ns-3.43/src/mesh/model/flame/flame-header.h
--- ns-3.42/src/mesh/model/flame/flame-header.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/flame/flame-header.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/flame/flame-protocol.cc ns-3.43/src/mesh/model/flame/flame-protocol.cc
--- ns-3.42/src/mesh/model/flame/flame-protocol.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/flame/flame-protocol.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/flame/flame-protocol.h ns-3.43/src/mesh/model/flame/flame-protocol.h
--- ns-3.42/src/mesh/model/flame/flame-protocol.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/flame/flame-protocol.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/flame/flame-protocol-mac.cc ns-3.43/src/mesh/model/flame/flame-protocol-mac.cc
--- ns-3.42/src/mesh/model/flame/flame-protocol-mac.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/flame/flame-protocol-mac.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/flame/flame-protocol-mac.h ns-3.43/src/mesh/model/flame/flame-protocol-mac.h
--- ns-3.42/src/mesh/model/flame/flame-protocol-mac.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/flame/flame-protocol-mac.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/flame/flame-rtable.cc ns-3.43/src/mesh/model/flame/flame-rtable.cc
--- ns-3.42/src/mesh/model/flame/flame-rtable.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/flame/flame-rtable.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/flame/flame-rtable.h ns-3.43/src/mesh/model/flame/flame-rtable.h
--- ns-3.42/src/mesh/model/flame/flame-rtable.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/flame/flame-rtable.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-information-element-vector.cc ns-3.43/src/mesh/model/mesh-information-element-vector.cc
--- ns-3.42/src/mesh/model/mesh-information-element-vector.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-information-element-vector.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-information-element-vector.h ns-3.43/src/mesh/model/mesh-information-element-vector.h
--- ns-3.42/src/mesh/model/mesh-information-element-vector.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-information-element-vector.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Pavel Boyko <boyko.iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-l2-routing-protocol.cc ns-3.43/src/mesh/model/mesh-l2-routing-protocol.cc
--- ns-3.42/src/mesh/model/mesh-l2-routing-protocol.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-l2-routing-protocol.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Pavel Boyko <boyko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-l2-routing-protocol.h ns-3.43/src/mesh/model/mesh-l2-routing-protocol.h
--- ns-3.42/src/mesh/model/mesh-l2-routing-protocol.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-l2-routing-protocol.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Pavel Boyko <boyko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-point-device.cc ns-3.43/src/mesh/model/mesh-point-device.cc
--- ns-3.42/src/mesh/model/mesh-point-device.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-point-device.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@iitp.ru>
  *         Pavel Boyko <boyko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-point-device.h ns-3.43/src/mesh/model/mesh-point-device.h
--- ns-3.42/src/mesh/model/mesh-point-device.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-point-device.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Pavel Boyko <boyko@iitp.ru>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-wifi-beacon.cc ns-3.43/src/mesh/model/mesh-wifi-beacon.cc
--- ns-3.42/src/mesh/model/mesh-wifi-beacon.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-wifi-beacon.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-wifi-beacon.h ns-3.43/src/mesh/model/mesh-wifi-beacon.h
--- ns-3.42/src/mesh/model/mesh-wifi-beacon.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-wifi-beacon.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-wifi-interface-mac.cc ns-3.43/src/mesh/model/mesh-wifi-interface-mac.cc
--- ns-3.42/src/mesh/model/mesh-wifi-interface-mac.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-wifi-interface-mac.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Pavel Boyko <boyko@iitp.ru>
@@ -98,20 +87,6 @@
     return true;
 }
 
-void
-MeshWifiInterfaceMac::Enqueue(Ptr<Packet> packet, Mac48Address to, Mac48Address from)
-{
-    NS_LOG_FUNCTION(this << packet << to << from);
-    ForwardDown(packet, from, to);
-}
-
-void
-MeshWifiInterfaceMac::Enqueue(Ptr<Packet> packet, Mac48Address to)
-{
-    NS_LOG_FUNCTION(this << packet << to);
-    ForwardDown(packet, GetAddress(), to);
-}
-
 bool
 MeshWifiInterfaceMac::SupportsSendFrom() const
 {
@@ -223,20 +198,18 @@
 // Forward frame down
 //-----------------------------------------------------------------------------
 void
-MeshWifiInterfaceMac::ForwardDown(Ptr<Packet> packet, Mac48Address from, Mac48Address to)
+MeshWifiInterfaceMac::Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from)
 {
-    WifiMacHeader hdr;
-    hdr.SetType(WIFI_MAC_QOSDATA);
+    NS_LOG_FUNCTION(this << *mpdu << to << from);
+
+    auto& hdr = mpdu->GetHeader();
+    auto packet = mpdu->GetPacket()->Copy();
+
     hdr.SetAddr2(GetAddress());
     hdr.SetAddr3(to);
     hdr.SetAddr4(from);
     hdr.SetDsFrom();
     hdr.SetDsTo();
-    // Fill QoS fields:
-    hdr.SetQosAckPolicy(WifiMacHeader::NORMAL_ACK);
-    hdr.SetQosNoEosp();
-    hdr.SetQosNoAmsdu();
-    hdr.SetQosTxopLimit(0);
     // Address 1 is unknown here. Routing plugin is responsible to correctly set it.
     hdr.SetAddr1(Mac48Address());
     // Filter packet through all installed plugins
@@ -261,24 +234,12 @@
         }
         GetWifiRemoteStationManager()->RecordDisassociated(hdr.GetAddr1());
     }
-    // Classify: application may have set a tag, which is removed here
-    AcIndex ac;
-    SocketPriorityTag tag;
-    if (packet->RemovePacketTag(tag))
-    {
-        hdr.SetQosTid(tag.GetPriority());
-        ac = QosUtilsMapTidToAc(tag.GetPriority());
-    }
-    else
-    {
-        // No tag found; set to best effort
-        ac = AC_BE;
-        hdr.SetQosTid(0);
-    }
+
     m_stats.sentFrames++;
     m_stats.sentBytes += packet->GetSize();
-    NS_ASSERT(GetQosTxop(ac) != nullptr);
-    GetQosTxop(ac)->Queue(packet, hdr);
+    auto tid = hdr.GetQosTid();
+    NS_ASSERT(GetQosTxop(tid) != nullptr);
+    GetQosTxop(tid)->Queue(Create<WifiMpdu>(packet, hdr));
 }
 
 void
@@ -310,11 +271,11 @@
      */
     if (hdr.GetAddr1() != Mac48Address::GetBroadcast())
     {
-        GetQosTxop(AC_VO)->Queue(packet, header);
+        GetQosTxop(AC_VO)->Queue(Create<WifiMpdu>(packet, header));
     }
     else
     {
-        GetQosTxop(AC_BK)->Queue(packet, header);
+        GetQosTxop(AC_BK)->Queue(Create<WifiMpdu>(packet, header));
     }
 }
 
@@ -326,14 +287,14 @@
     AllSupportedRates rates;
     for (const auto& mode : GetWifiPhy()->GetModeList())
     {
-        uint16_t gi = ConvertGuardIntervalToNanoSeconds(mode, GetWifiPhy()->GetDevice());
+        const auto gi = GetGuardIntervalForMode(mode, GetWifiPhy()->GetDevice());
         rates.AddSupportedRate(mode.GetDataRate(GetWifiPhy()->GetChannelWidth(), gi, 1));
     }
     // set the basic rates
     for (uint32_t j = 0; j < GetWifiRemoteStationManager()->GetNBasicModes(); j++)
     {
-        WifiMode mode = GetWifiRemoteStationManager()->GetBasicMode(j);
-        uint16_t gi = ConvertGuardIntervalToNanoSeconds(mode, GetWifiPhy()->GetDevice());
+        const auto mode = GetWifiRemoteStationManager()->GetBasicMode(j);
+        const auto gi = GetGuardIntervalForMode(mode, GetWifiPhy()->GetDevice());
         rates.SetBasicRate(mode.GetDataRate(GetWifiPhy()->GetChannelWidth(), gi, 1));
     }
     return rates;
@@ -344,8 +305,8 @@
 {
     for (uint32_t i = 0; i < GetWifiRemoteStationManager()->GetNBasicModes(); i++)
     {
-        WifiMode mode = GetWifiRemoteStationManager()->GetBasicMode(i);
-        uint16_t gi = ConvertGuardIntervalToNanoSeconds(mode, GetWifiPhy()->GetDevice());
+        const auto mode = GetWifiRemoteStationManager()->GetBasicMode(i);
+        const auto gi = GetGuardIntervalForMode(mode, GetWifiPhy()->GetDevice());
         if (!rates.IsSupportedRate(mode.GetDataRate(GetWifiPhy()->GetChannelWidth(), gi, 1)))
         {
             return false;
@@ -433,7 +394,8 @@
     {
         (*i)->UpdateBeacon(beacon);
     }
-    m_txop->Queue(beacon.CreatePacket(), beacon.CreateHeader(GetAddress(), GetMeshPointAddress()));
+    m_txop->Queue(Create<WifiMpdu>(beacon.CreatePacket(),
+                                   beacon.CreateHeader(GetAddress(), GetMeshPointAddress())));
 
     ScheduleNextBeacon();
 }
@@ -468,8 +430,8 @@
 
             for (const auto& mode : GetWifiPhy()->GetModeList())
             {
-                uint16_t gi = ConvertGuardIntervalToNanoSeconds(mode, GetWifiPhy()->GetDevice());
-                uint64_t rate = mode.GetDataRate(GetWifiPhy()->GetChannelWidth(), gi, 1);
+                const auto gi = GetGuardIntervalForMode(mode, GetWifiPhy()->GetDevice());
+                const auto rate = mode.GetDataRate(GetWifiPhy()->GetChannelWidth(), gi, 1);
                 if (rates.IsSupportedRate(rate))
                 {
                     GetWifiRemoteStationManager()->AddSupportedMode(hdr->GetAddr2(), mode);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-wifi-interface-mac.h ns-3.43/src/mesh/model/mesh-wifi-interface-mac.h
--- ns-3.42/src/mesh/model/mesh-wifi-interface-mac.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-wifi-interface-mac.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  *          Pavel Boyko <boyko@iitp.ru>
@@ -65,8 +54,6 @@
     ~MeshWifiInterfaceMac() override;
 
     // Inherited from WifiMac
-    void Enqueue(Ptr<Packet> packet, Mac48Address to, Mac48Address from) override;
-    void Enqueue(Ptr<Packet> packet, Mac48Address to) override;
     bool SupportsSendFrom() const override;
     void SetLinkUpCallback(Callback<void> linkUp) override;
     bool CanForwardPacketsTo(Mac48Address to) const override;
@@ -234,14 +221,6 @@
      */
     void Receive(Ptr<const WifiMpdu> mpdu, uint8_t linkId) override;
     /**
-     * Send frame. Frame is supposed to be tagged by routing information.
-     *
-     * \param packet the packet to forward
-     * \param from the from address
-     * \param to the to address
-     */
-    void ForwardDown(Ptr<Packet> packet, Mac48Address from, Mac48Address to);
-    /**
      * Send beacon.
      */
     void SendBeacon();
@@ -264,6 +243,7 @@
     typedef std::vector<Ptr<MeshWifiInterfaceMacPlugin>> PluginList; ///< PluginList typedef
 
     void DoInitialize() override;
+    void Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from) override;
 
     /// \name Mesh timing intervals
     ///@{
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/model/mesh-wifi-interface-mac-plugin.h ns-3.43/src/mesh/model/mesh-wifi-interface-mac-plugin.h
--- ns-3.42/src/mesh/model/mesh-wifi-interface-mac-plugin.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/model/mesh-wifi-interface-mac-plugin.h	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/dot11s-test-suite.cc ns-3.43/src/mesh/test/dot11s/dot11s-test-suite.cc
--- ns-3.42/src/mesh/test/dot11s/dot11s-test-suite.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/dot11s-test-suite.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/hwmp-proactive-regression.cc ns-3.43/src/mesh/test/dot11s/hwmp-proactive-regression.cc
--- ns-3.42/src/mesh/test/dot11s/hwmp-proactive-regression.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/hwmp-proactive-regression.cc	2024-10-09 16:41:10.052656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev  <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/hwmp-proactive-regression.h ns-3.43/src/mesh/test/dot11s/hwmp-proactive-regression.h
--- ns-3.42/src/mesh/test/dot11s/hwmp-proactive-regression.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/hwmp-proactive-regression.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev  <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/hwmp-reactive-regression.cc ns-3.43/src/mesh/test/dot11s/hwmp-reactive-regression.cc
--- ns-3.42/src/mesh/test/dot11s/hwmp-reactive-regression.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/hwmp-reactive-regression.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/hwmp-reactive-regression.h ns-3.43/src/mesh/test/dot11s/hwmp-reactive-regression.h
--- ns-3.42/src/mesh/test/dot11s/hwmp-reactive-regression.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/hwmp-reactive-regression.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/hwmp-simplest-regression.cc ns-3.43/src/mesh/test/dot11s/hwmp-simplest-regression.cc
--- ns-3.42/src/mesh/test/dot11s/hwmp-simplest-regression.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/hwmp-simplest-regression.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev  <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/hwmp-simplest-regression.h ns-3.43/src/mesh/test/dot11s/hwmp-simplest-regression.h
--- ns-3.42/src/mesh/test/dot11s/hwmp-simplest-regression.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/hwmp-simplest-regression.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev  <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/hwmp-target-flags-regression.cc ns-3.43/src/mesh/test/dot11s/hwmp-target-flags-regression.cc
--- ns-3.42/src/mesh/test/dot11s/hwmp-target-flags-regression.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/hwmp-target-flags-regression.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev  <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/hwmp-target-flags-regression.h ns-3.43/src/mesh/test/dot11s/hwmp-target-flags-regression.h
--- ns-3.42/src/mesh/test/dot11s/hwmp-target-flags-regression.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/hwmp-target-flags-regression.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev  <andreev@iitp.ru>
  */
@@ -30,41 +19,45 @@
  *
  * \brief This is a test for intermediate reply and saving routing
  * information about neighbour. 4 stations and 3 UDP ping streams are initiated.
+ */
+// clang-format off
+/**
  * \verbatim
- *  <-----------|----------->   Broadcast frame
- *              |----------->|  Unicast frame
- * (Node ID)   0           1             2            3
- * (MAC addr) 10           11           12           13
- *             |            |<-----------|----------->|             ARP request (12 asks who has 10)
- *             |            |            |<-----------|-----------> ARP request
- *             |<-----------|----------->|            |             ARP request
- * <-----------|----------->|            |            |             PREQ
- *             |<-----------|----------->|            |             PREQ
- *             |            |<-----------|            |             PREP
- *             |<-----------|            |            |             PREP
- *             |----------->|            |            |             ARP reply
- *             |            |----------->|            |             ARP REPLY
- *             |            |<-----------|            |             Data
- *             |............|............|............|
- *             |<-----------|----------->|            |             ARP request (11 asks who has 10)
- *             |............|............|............|
- *             |----------->|            |            |             ARP reply
- *                  ^ Note, that this arp reply goes without route
- *                  discovery procedure, because route is known from
- *                  previous PREQ/PREP exchange
- *             |<-----------|            |            |             DATA
- *             |............|............|............|
- * <-----------|----------->|            |            |             ARP request (10 asks who has 13)
- *             |............|............|............|
- *             |            |            |<-----------|-----------> PREQ (13 asks about 10) DO=0
- * RF=1 |            |            |----------->|             PREP (intermediate reply - 12 knows
- * about 10) |            |<-----------|----------->|             PREQ DO=1 RF=0
- *             |............|............|............|
- *             |----------->|            |            |             PREP
- *             |            |----------->|            |             PREP
- *             |            |            |----------->|             PREP
- * \endverbatim
+   <-----------|----------->   Broadcast frame
+               |----------->|  Unicast frame
+   (Node ID)   0            1            2            3
+   (MAC addr) 10           11           12           13
+               |            |<-----------|----------->|             ARP request (12 asks who has 10)
+               |            |            |<-----------|-----------> ARP request
+               |<-----------|----------->|            |             ARP request
+   <-----------|----------->|            |            |             PREQ
+               |<-----------|----------->|            |             PREQ
+               |            |<-----------|            |             PREP
+               |<-----------|            |            |             PREP
+               |----------->|            |            |             ARP reply
+               |            |----------->|            |             ARP REPLY
+               |            |<-----------|            |             Data
+               |............|............|............|
+               |<-----------|----------->|            |             ARP request (11 asks who has 10)
+               |............|............|............|
+               |----------->|            |            |             ARP reply
+                    ^ Note, that this arp reply goes without route
+                    discovery procedure, because route is known from
+                    previous PREQ/PREP exchange
+               |<-----------|            |            |             DATA
+               |............|............|............|
+   <-----------|----------->|            |            |             ARP request (10 asks who has 13)
+               |............|............|............|
+               |            |            |<-----------|-----------> PREQ (13 asks about 10) DO=0 RF=1
+               |            |            |----------->|             PREP (intermediate reply - 12 knows about 10)
+               |            |<-----------|----------->|             PREQ DO=1 RF=0
+               |............|............|............|
+               |----------->|            |            |             PREP
+               |            |----------->|            |             PREP
+               |            |            |----------->|             PREP
+   \endverbatim
  */
+// clang-format on
 class HwmpDoRfRegressionTest : public TestCase
 {
   public:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/pmp-regression.cc ns-3.43/src/mesh/test/dot11s/pmp-regression.cc
--- ns-3.42/src/mesh/test/dot11s/pmp-regression.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/pmp-regression.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/pmp-regression.h ns-3.43/src/mesh/test/dot11s/pmp-regression.h
--- ns-3.42/src/mesh/test/dot11s/pmp-regression.h	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/pmp-regression.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/dot11s/regression.cc ns-3.43/src/mesh/test/dot11s/regression.cc
--- ns-3.42/src/mesh/test/dot11s/regression.cc	2024-05-29 15:29:47.132073600 -0700
+++ ns-3.43/src/mesh/test/dot11s/regression.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/flame/flame-regression.cc ns-3.43/src/mesh/test/flame/flame-regression.cc
--- ns-3.42/src/mesh/test/flame/flame-regression.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mesh/test/flame/flame-regression.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/flame/flame-regression.h ns-3.43/src/mesh/test/flame/flame-regression.h
--- ns-3.42/src/mesh/test/flame/flame-regression.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mesh/test/flame/flame-regression.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Kirill Andreev <andreev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/flame/flame-test-suite.cc ns-3.43/src/mesh/test/flame/flame-test-suite.cc
--- ns-3.42/src/mesh/test/flame/flame-test-suite.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mesh/test/flame/flame-test-suite.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/flame/regression.cc ns-3.43/src/mesh/test/flame/regression.cc
--- ns-3.42/src/mesh/test/flame/regression.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mesh/test/flame/regression.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mesh/test/mesh-information-element-vector-test-suite.cc ns-3.43/src/mesh/test/mesh-information-element-vector-test-suite.cc
--- ns-3.42/src/mesh/test/mesh-information-element-vector-test-suite.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mesh/test/mesh-information-element-vector-test-suite.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/examples/bonnmotion-ns2-example.cc ns-3.43/src/mobility/examples/bonnmotion-ns2-example.cc
--- ns-3.42/src/mobility/examples/bonnmotion-ns2-example.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/examples/bonnmotion-ns2-example.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2012 Eric Gamess
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/examples/constant-mobility-example.cc ns-3.43/src/mobility/examples/constant-mobility-example.cc
--- ns-3.42/src/mobility/examples/constant-mobility-example.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/examples/constant-mobility-example.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024 Tokushima University, Tokushima, Japan.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/examples/main-grid-topology.cc ns-3.43/src/mobility/examples/main-grid-topology.cc
--- ns-3.42/src/mobility/examples/main-grid-topology.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/examples/main-grid-topology.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/core-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/examples/main-random-topology.cc ns-3.43/src/mobility/examples/main-random-topology.cc
--- ns-3.42/src/mobility/examples/main-random-topology.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/examples/main-random-topology.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/examples/main-random-walk.cc ns-3.43/src/mobility/examples/main-random-walk.cc
--- ns-3.42/src/mobility/examples/main-random-walk.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/examples/main-random-walk.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/core-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/examples/mobility-trace-example.cc ns-3.43/src/mobility/examples/mobility-trace-example.cc
--- ns-3.42/src/mobility/examples/mobility-trace-example.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/examples/mobility-trace-example.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Test that mobility tracing works
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/examples/ns2-mobility-trace.cc ns-3.43/src/mobility/examples/ns2-mobility-trace.cc
--- ns-3.42/src/mobility/examples/ns2-mobility-trace.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/examples/ns2-mobility-trace.cc	2024-10-09 16:41:10.056656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 INRIA
  *               2009,2010 Contributors
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Martín Giachino <martin.giachino@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/examples/reference-point-group-mobility-animate.sh ns-3.43/src/mobility/examples/reference-point-group-mobility-animate.sh
--- ns-3.42/src/mobility/examples/reference-point-group-mobility-animate.sh	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/examples/reference-point-group-mobility-animate.sh	2024-10-09 16:41:10.056656600 -0700
@@ -3,18 +3,7 @@
 # Copyright (c) 2019, University of Padova, Dep. of Information Engineering, SIGNET lab
 # Copyright (c) 2021, University of Washington: animation extensions
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Authors: Michele Polese <michele.polese@gmail.com>
 #          Tom Henderson <tomhend@uw.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/examples/reference-point-group-mobility-example.cc ns-3.43/src/mobility/examples/reference-point-group-mobility-example.cc
--- ns-3.42/src/mobility/examples/reference-point-group-mobility-example.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/examples/reference-point-group-mobility-example.cc	2024-10-09 16:41:10.056656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2020 Institute for the Wireless Internet of Things, Northeastern University,
  * Boston, MA Copyright (c) 2021 University of Washington: for HierarchicalMobilityModel
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Michele Polese <michele.polese@gmail.com>
  * Heavily edited by Tom Henderson (to reuse HierarchicalMobilityModel)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/helper/group-mobility-helper.cc ns-3.43/src/mobility/helper/group-mobility-helper.cc
--- ns-3.42/src/mobility/helper/group-mobility-helper.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/helper/group-mobility-helper.cc	2024-10-09 16:41:10.056656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2021 University of Washington: Group mobility changes
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Adapted from 'mobility-helper.cc' for group mobility by Tom Henderson
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/helper/group-mobility-helper.h ns-3.43/src/mobility/helper/group-mobility-helper.h
--- ns-3.42/src/mobility/helper/group-mobility-helper.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/helper/group-mobility-helper.h	2024-10-09 16:41:10.056656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2021 University of Washington: Group mobility changes
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Adapted from 'mobility-helper.h' for group mobility by Tom Henderson
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/helper/mobility-helper.cc ns-3.43/src/mobility/helper/mobility-helper.cc
--- ns-3.42/src/mobility/helper/mobility-helper.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/helper/mobility-helper.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/helper/mobility-helper.h ns-3.43/src/mobility/helper/mobility-helper.h
--- ns-3.42/src/mobility/helper/mobility-helper.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/helper/mobility-helper.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/helper/ns2-mobility-helper.cc ns-3.43/src/mobility/helper/ns2-mobility-helper.cc
--- ns-3.42/src/mobility/helper/ns2-mobility-helper.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/helper/ns2-mobility-helper.cc	2024-10-09 16:41:10.056656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 INRIA
  *               2009,2010 Contributors
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Contributors: Thomas Waldecker <twaldecker@rocketmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/helper/ns2-mobility-helper.h ns-3.43/src/mobility/helper/ns2-mobility-helper.h
--- ns-3.42/src/mobility/helper/ns2-mobility-helper.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/helper/ns2-mobility-helper.h	2024-10-09 16:41:10.056656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 INRIA
  *               2009,2010 Contributors
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Contributors: Thomas Waldecker <twaldecker@rocketmail.com>
@@ -66,7 +55,7 @@
  * The following tools are known to support this format:
  *  - BonnMotion http://net.cs.uni-bonn.de/wg/cs/applications/bonnmotion/
  *  - SUMO http://sourceforge.net/apps/mediawiki/sumo/index.php?title=Main_Page
- *  - TraNS http://trans.epfl.ch/
+ *  - TraNS https://web.archive.org/web/20190512111856/http://lca.epfl.ch/projects/trans/
  *
  *  See usage example in examples/mobility/ns2-mobility-trace.cc
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/box.cc ns-3.43/src/mobility/model/box.cc
--- ns-3.42/src/mobility/model/box.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/box.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Dan Broyles
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Dan Broyles <dbroyl01@ku.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/box.h ns-3.43/src/mobility/model/box.h
--- ns-3.42/src/mobility/model/box.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/box.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Dan Broyles
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Dan Broyles <dbroyl01@ku.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/constant-acceleration-mobility-model.cc ns-3.43/src/mobility/model/constant-acceleration-mobility-model.cc
--- ns-3.42/src/mobility/model/constant-acceleration-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/constant-acceleration-mobility-model.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/constant-acceleration-mobility-model.h ns-3.43/src/mobility/model/constant-acceleration-mobility-model.h
--- ns-3.42/src/mobility/model/constant-acceleration-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/constant-acceleration-mobility-model.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/constant-position-mobility-model.cc ns-3.43/src/mobility/model/constant-position-mobility-model.cc
--- ns-3.42/src/mobility/model/constant-position-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/constant-position-mobility-model.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/constant-position-mobility-model.h ns-3.43/src/mobility/model/constant-position-mobility-model.h
--- ns-3.42/src/mobility/model/constant-position-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/constant-position-mobility-model.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/constant-velocity-helper.cc ns-3.43/src/mobility/model/constant-velocity-helper.cc
--- ns-3.42/src/mobility/model/constant-velocity-helper.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/constant-velocity-helper.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/constant-velocity-helper.h ns-3.43/src/mobility/model/constant-velocity-helper.h
--- ns-3.42/src/mobility/model/constant-velocity-helper.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/constant-velocity-helper.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/constant-velocity-mobility-model.cc ns-3.43/src/mobility/model/constant-velocity-mobility-model.cc
--- ns-3.42/src/mobility/model/constant-velocity-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/constant-velocity-mobility-model.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006, 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/constant-velocity-mobility-model.h ns-3.43/src/mobility/model/constant-velocity-mobility-model.h
--- ns-3.42/src/mobility/model/constant-velocity-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/constant-velocity-mobility-model.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006, 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/gauss-markov-mobility-model.cc ns-3.43/src/mobility/model/gauss-markov-mobility-model.cc
--- ns-3.42/src/mobility/model/gauss-markov-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/gauss-markov-mobility-model.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Dan Broyles
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Dan Broyles <dbroyl01@ku.edu>
  */
@@ -103,6 +92,11 @@
     m_helper.Unpause();
 }
 
+GaussMarkovMobilityModel::~GaussMarkovMobilityModel()
+{
+    m_event.Cancel();
+}
+
 void
 GaussMarkovMobilityModel::Start()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/gauss-markov-mobility-model.h ns-3.43/src/mobility/model/gauss-markov-mobility-model.h
--- ns-3.42/src/mobility/model/gauss-markov-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/gauss-markov-mobility-model.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Dan Broyles
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Dan Broyles <dbroyl01@ku.edu>
  * Thanks to Kevin Peters, faculty advisor James P.G. Sterbenz, and the ResiliNets
@@ -87,6 +76,7 @@
      */
     static TypeId GetTypeId();
     GaussMarkovMobilityModel();
+    ~GaussMarkovMobilityModel() override;
 
   private:
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/geocentric-constant-position-mobility-model.cc ns-3.43/src/mobility/model/geocentric-constant-position-mobility-model.cc
--- ns-3.42/src/mobility/model/geocentric-constant-position-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/geocentric-constant-position-mobility-model.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mattia Sandri <mattia.sandri@unipd.it>
  */
@@ -220,7 +209,7 @@
     x = std::max(x, -1.0);
 
     // asin returns radians, we convert to degrees
-    double elevAngle = abs((180.0 * M_1_PI) * asin(x));
+    double elevAngle = std::abs((180.0 * M_1_PI) * asin(x));
 
     return elevAngle;
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/geocentric-constant-position-mobility-model.h ns-3.43/src/mobility/model/geocentric-constant-position-mobility-model.h
--- ns-3.42/src/mobility/model/geocentric-constant-position-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/geocentric-constant-position-mobility-model.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mattia Sandri <mattia.sandri@unipd.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/geographic-positions.cc ns-3.43/src/mobility/model/geographic-positions.cc
--- ns-3.42/src/mobility/model/geographic-positions.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/geographic-positions.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/geographic-positions.h ns-3.43/src/mobility/model/geographic-positions.h
--- ns-3.42/src/mobility/model/geographic-positions.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/geographic-positions.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/hierarchical-mobility-model.cc ns-3.43/src/mobility/model/hierarchical-mobility-model.cc
--- ns-3.42/src/mobility/model/hierarchical-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/hierarchical-mobility-model.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/hierarchical-mobility-model.h ns-3.43/src/mobility/model/hierarchical-mobility-model.h
--- ns-3.42/src/mobility/model/hierarchical-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/hierarchical-mobility-model.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/mobility.h ns-3.43/src/mobility/model/mobility.h
--- ns-3.42/src/mobility/model/mobility.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/mobility.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/mobility-model.cc ns-3.43/src/mobility/model/mobility-model.cc
--- ns-3.42/src/mobility/model/mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/mobility-model.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/mobility-model.h ns-3.43/src/mobility/model/mobility-model.h
--- ns-3.42/src/mobility/model/mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/mobility-model.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/position-allocator.cc ns-3.43/src/mobility/model/position-allocator.cc
--- ns-3.42/src/mobility/model/position-allocator.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/position-allocator.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/position-allocator.h ns-3.43/src/mobility/model/position-allocator.h
--- ns-3.42/src/mobility/model/position-allocator.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/position-allocator.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/random-direction-2d-mobility-model.cc ns-3.43/src/mobility/model/random-direction-2d-mobility-model.cc
--- ns-3.42/src/mobility/model/random-direction-2d-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/random-direction-2d-mobility-model.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -64,6 +53,11 @@
     m_direction = CreateObject<UniformRandomVariable>();
 }
 
+RandomDirection2dMobilityModel::~RandomDirection2dMobilityModel()
+{
+    m_event.Cancel();
+}
+
 void
 RandomDirection2dMobilityModel::DoDispose()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/random-direction-2d-mobility-model.h ns-3.43/src/mobility/model/random-direction-2d-mobility-model.h
--- ns-3.42/src/mobility/model/random-direction-2d-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/random-direction-2d-mobility-model.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -51,6 +40,7 @@
      */
     static TypeId GetTypeId();
     RandomDirection2dMobilityModel();
+    ~RandomDirection2dMobilityModel() override;
 
   private:
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/random-walk-2d-mobility-model.cc ns-3.43/src/mobility/model/random-walk-2d-mobility-model.cc
--- ns-3.42/src/mobility/model/random-walk-2d-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/random-walk-2d-mobility-model.cc	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -80,16 +69,24 @@
     return tid;
 }
 
+RandomWalk2dMobilityModel::~RandomWalk2dMobilityModel()
+{
+    m_event.Cancel();
+}
+
 void
 RandomWalk2dMobilityModel::DoInitialize()
 {
-    DoInitializePrivate();
+    NS_LOG_FUNCTION(this);
+    DrawRandomVelocityAndDistance();
     MobilityModel::DoInitialize();
 }
 
+// Set new velocity and distance to travel, and call DoWalk() to initiate movement
 void
-RandomWalk2dMobilityModel::DoInitializePrivate()
+RandomWalk2dMobilityModel::DrawRandomVelocityAndDistance()
 {
+    NS_LOG_FUNCTION(this);
     m_helper.Update();
     Vector position = m_helper.GetCurrentPosition();
 
@@ -130,6 +127,7 @@
             break;
         }
     }
+    NS_LOG_INFO("Setting new velocity to " << velocity);
     m_helper.SetVelocity(velocity);
     m_helper.Unpause();
 
@@ -142,12 +140,15 @@
     {
         delayLeft = Seconds(m_modeDistance / speed);
     }
+    NS_LOG_INFO("Setting delayLeft for DoWalk() to " << delayLeft.As(Time::S));
     DoWalk(delayLeft);
 }
 
+// Notify course change and schedule event for either a wall rebound or a new velocity
 void
 RandomWalk2dMobilityModel::DoWalk(Time delayLeft)
 {
+    NS_LOG_FUNCTION(this << delayLeft.As(Time::S));
     Vector position = m_helper.GetCurrentPosition();
     Vector velocity = m_helper.GetVelocity();
     Vector nextPosition = position;
@@ -156,8 +157,10 @@
     m_event.Cancel();
     if (m_bounds.IsInside(nextPosition))
     {
-        m_event =
-            Simulator::Schedule(delayLeft, &RandomWalk2dMobilityModel::DoInitializePrivate, this);
+        NS_LOG_INFO("Scheduling new velocity in " << delayLeft.As(Time::S));
+        m_event = Simulator::Schedule(delayLeft,
+                                      &RandomWalk2dMobilityModel::DrawRandomVelocityAndDistance,
+                                      this);
     }
     else
     {
@@ -179,6 +182,7 @@
                          "(the node is stationary).");
         }
         Time delay = Seconds(delaySeconds);
+        NS_LOG_INFO("Scheduling a rebound event in " << (delayLeft - delay).As(Time::S));
         m_event = Simulator::Schedule(delay,
                                       &RandomWalk2dMobilityModel::Rebound,
                                       this,
@@ -187,9 +191,11 @@
     NotifyCourseChange();
 }
 
+// Set a velocity from the previous velocity, and start motion with remaining time
 void
 RandomWalk2dMobilityModel::Rebound(Time delayLeft)
 {
+    NS_LOG_FUNCTION(this << delayLeft.As(Time::S));
     m_helper.UpdateWithBounds(m_bounds);
     Vector position = m_helper.GetCurrentPosition();
     Vector velocity = m_helper.GetVelocity();
@@ -213,6 +219,7 @@
     }
     m_helper.SetVelocity(velocity);
     m_helper.Unpause();
+    NS_LOG_INFO("Rebounding with new velocity " << velocity);
     DoWalk(delayLeft);
 }
 
@@ -220,6 +227,7 @@
 RandomWalk2dMobilityModel::DoDispose()
 {
     // chain up
+    NS_LOG_FUNCTION(this);
     MobilityModel::DoDispose();
 }
 
@@ -233,10 +241,12 @@
 void
 RandomWalk2dMobilityModel::DoSetPosition(const Vector& position)
 {
+    NS_LOG_FUNCTION(this << position);
     NS_ASSERT(m_bounds.IsInside(position));
     m_helper.SetPosition(position);
     m_event.Cancel();
-    m_event = Simulator::ScheduleNow(&RandomWalk2dMobilityModel::DoInitializePrivate, this);
+    m_event =
+        Simulator::ScheduleNow(&RandomWalk2dMobilityModel::DrawRandomVelocityAndDistance, this);
 }
 
 Vector
@@ -248,6 +258,7 @@
 int64_t
 RandomWalk2dMobilityModel::DoAssignStreams(int64_t stream)
 {
+    NS_LOG_FUNCTION(this << stream);
     m_speed->SetStream(stream);
     m_direction->SetStream(stream + 1);
     return 2;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/random-walk-2d-mobility-model.h ns-3.43/src/mobility/model/random-walk-2d-mobility-model.h
--- ns-3.42/src/mobility/model/random-walk-2d-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/random-walk-2d-mobility-model.h	2024-10-09 16:41:10.056656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -57,6 +46,8 @@
      */
     static TypeId GetTypeId();
 
+    ~RandomWalk2dMobilityModel() override;
+
     /** An enum representing the different working modes of this module. */
     enum Mode
     {
@@ -77,9 +68,9 @@
      */
     void DoWalk(Time timeLeft);
     /**
-     * Perform initialization of the object before MobilityModel::DoInitialize ()
+     * Draw a new random velocity and distance to travel, and call DoWalk()
      */
-    void DoInitializePrivate();
+    void DrawRandomVelocityAndDistance();
     void DoDispose() override;
     void DoInitialize() override;
     Vector DoGetPosition() const override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/random-waypoint-mobility-model.cc ns-3.43/src/mobility/model/random-waypoint-mobility-model.cc
--- ns-3.42/src/mobility/model/random-waypoint-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/random-waypoint-mobility-model.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -59,6 +48,11 @@
     return tid;
 }
 
+RandomWaypointMobilityModel::~RandomWaypointMobilityModel()
+{
+    m_event.Cancel();
+}
+
 void
 RandomWaypointMobilityModel::BeginWalk()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/random-waypoint-mobility-model.h ns-3.43/src/mobility/model/random-waypoint-mobility-model.h
--- ns-3.42/src/mobility/model/random-waypoint-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/random-waypoint-mobility-model.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -59,6 +48,8 @@
      */
     static TypeId GetTypeId();
 
+    ~RandomWaypointMobilityModel() override;
+
   protected:
     void DoInitialize() override;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/rectangle.cc ns-3.43/src/mobility/model/rectangle.cc
--- ns-3.42/src/mobility/model/rectangle.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/rectangle.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/rectangle.h ns-3.43/src/mobility/model/rectangle.h
--- ns-3.42/src/mobility/model/rectangle.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/rectangle.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/steady-state-random-waypoint-mobility-model.cc ns-3.43/src/mobility/model/steady-state-random-waypoint-mobility-model.cc
--- ns-3.42/src/mobility/model/steady-state-random-waypoint-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/steady-state-random-waypoint-mobility-model.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Denis Fakhriev <fakhriev@iitp.ru>
  */
@@ -101,6 +90,11 @@
     m_position = CreateObject<RandomBoxPositionAllocator>();
 }
 
+SteadyStateRandomWaypointMobilityModel::~SteadyStateRandomWaypointMobilityModel()
+{
+    m_event.Cancel();
+}
+
 void
 SteadyStateRandomWaypointMobilityModel::DoInitialize()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/steady-state-random-waypoint-mobility-model.h ns-3.43/src/mobility/model/steady-state-random-waypoint-mobility-model.h
--- ns-3.42/src/mobility/model/steady-state-random-waypoint-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/steady-state-random-waypoint-mobility-model.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Denis Fakhriev <fakhriev@iitp.ru>
  */
@@ -62,6 +51,7 @@
      */
     static TypeId GetTypeId();
     SteadyStateRandomWaypointMobilityModel();
+    ~SteadyStateRandomWaypointMobilityModel() override;
 
   protected:
     void DoInitialize() override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/waypoint.cc ns-3.43/src/mobility/model/waypoint.cc
--- ns-3.42/src/mobility/model/waypoint.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/waypoint.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Phillip Sitbon
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Phillip Sitbon <phillip@sitbon.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/waypoint.h ns-3.43/src/mobility/model/waypoint.h
--- ns-3.42/src/mobility/model/waypoint.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/waypoint.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Phillip Sitbon
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Phillip Sitbon <phillip@sitbon.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/waypoint-mobility-model.cc ns-3.43/src/mobility/model/waypoint-mobility-model.cc
--- ns-3.42/src/mobility/model/waypoint-mobility-model.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/waypoint-mobility-model.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Phillip Sitbon
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Phillip Sitbon <phillip@sitbon.net>
  */
@@ -77,6 +66,7 @@
 
 WaypointMobilityModel::~WaypointMobilityModel()
 {
+    m_event.Cancel();
 }
 
 void
@@ -102,7 +92,9 @@
 
     if (!m_lazyNotify)
     {
-        Simulator::Schedule(waypoint.time - Simulator::Now(), &WaypointMobilityModel::Update, this);
+        m_event = Simulator::Schedule(waypoint.time - Simulator::Now(),
+                                      &WaypointMobilityModel::Update,
+                                      this);
     }
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/model/waypoint-mobility-model.h ns-3.43/src/mobility/model/waypoint-mobility-model.h
--- ns-3.42/src/mobility/model/waypoint-mobility-model.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/model/waypoint-mobility-model.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Phillip Sitbon
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Phillip Sitbon <phillip@sitbon.net>
  */
@@ -192,6 +181,10 @@
      * \brief The current velocity vector
      */
     mutable Vector m_velocity;
+    /**
+     * \brief Update event
+     */
+    EventId m_event;
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/box-line-intersection-test.cc ns-3.43/src/mobility/test/box-line-intersection-test.cc
--- ns-3.42/src/mobility/test/box-line-intersection-test.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/box-line-intersection-test.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/box-line-intersection-test.h ns-3.43/src/mobility/test/box-line-intersection-test.h
--- ns-3.42/src/mobility/test/box-line-intersection-test.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/box-line-intersection-test.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/geocentric-topocentric-conversion-test.cc ns-3.43/src/mobility/test/geocentric-topocentric-conversion-test.cc
--- ns-3.42/src/mobility/test/geocentric-topocentric-conversion-test.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/geocentric-topocentric-conversion-test.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024 University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matteo Pagin <mattpagg@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/geo-to-cartesian-test.cc ns-3.43/src/mobility/test/geo-to-cartesian-test.cc
--- ns-3.42/src/mobility/test/geo-to-cartesian-test.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/geo-to-cartesian-test.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/mobility-test-suite.cc ns-3.43/src/mobility/test/mobility-test-suite.cc
--- ns-3.42/src/mobility/test/mobility-test-suite.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/mobility-test-suite.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/mobility-trace-test-suite.cc ns-3.43/src/mobility/test/mobility-trace-test-suite.cc
--- ns-3.42/src/mobility/test/mobility-trace-test-suite.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/mobility-trace-test-suite.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/ns2-mobility-helper-test-suite.cc ns-3.43/src/mobility/test/ns2-mobility-helper-test-suite.cc
--- ns-3.42/src/mobility/test/ns2-mobility-helper-test-suite.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/ns2-mobility-helper-test-suite.cc	2024-10-09 16:41:10.060656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 INRIA
  *               2009,2010 Contributors
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Contributors: Thomas Waldecker <twaldecker@rocketmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/rand-cart-around-geo-test.cc ns-3.43/src/mobility/test/rand-cart-around-geo-test.cc
--- ns-3.42/src/mobility/test/rand-cart-around-geo-test.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/rand-cart-around-geo-test.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/rectangle-closest-border-test.cc ns-3.43/src/mobility/test/rectangle-closest-border-test.cc
--- ns-3.42/src/mobility/test/rectangle-closest-border-test.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/rectangle-closest-border-test.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/steady-state-random-waypoint-mobility-model-test.cc ns-3.43/src/mobility/test/steady-state-random-waypoint-mobility-model-test.cc
--- ns-3.42/src/mobility/test/steady-state-random-waypoint-mobility-model-test.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/steady-state-random-waypoint-mobility-model-test.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Denis Fakhriev <fakhriev@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mobility/test/waypoint-mobility-model-test.cc ns-3.43/src/mobility/test/waypoint-mobility-model-test.cc
--- ns-3.42/src/mobility/test/waypoint-mobility-model-test.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mobility/test/waypoint-mobility-model-test.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Phillip Sitbon
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Phillip Sitbon <phillip@sitbon.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/examples/mpi-test-fixtures.cc ns-3.43/src/mpi/examples/mpi-test-fixtures.cc
--- ns-3.42/src/mpi/examples/mpi-test-fixtures.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/examples/mpi-test-fixtures.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2018. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/examples/mpi-test-fixtures.h ns-3.43/src/mpi/examples/mpi-test-fixtures.h
--- ns-3.42/src/mpi/examples/mpi-test-fixtures.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/examples/mpi-test-fixtures.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2018. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/examples/nms-p2p-nix-distributed.cc ns-3.43/src/mpi/examples/nms-p2p-nix-distributed.cc
--- ns-3.42/src/mpi/examples/nms-p2p-nix-distributed.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/examples/nms-p2p-nix-distributed.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * (c) 2009, GTech Systems, Inc. - Alfred Park <park@gtech-systems.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/examples/simple-distributed.cc ns-3.43/src/mpi/examples/simple-distributed.cc
--- ns-3.42/src/mpi/examples/simple-distributed.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/examples/simple-distributed.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/examples/simple-distributed-empty-node.cc ns-3.43/src/mpi/examples/simple-distributed-empty-node.cc
--- ns-3.42/src/mpi/examples/simple-distributed-empty-node.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/examples/simple-distributed-empty-node.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/examples/simple-distributed-mpi-comm.cc ns-3.43/src/mpi/examples/simple-distributed-mpi-comm.cc
--- ns-3.42/src/mpi/examples/simple-distributed-mpi-comm.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/examples/simple-distributed-mpi-comm.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2018. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/examples/third-distributed.cc ns-3.43/src/mpi/examples/third-distributed.cc
--- ns-3.42/src/mpi/examples/third-distributed.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/examples/third-distributed.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "mpi-test-fixtures.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/distributed-simulator-impl.cc ns-3.43/src/mpi/model/distributed-simulator-impl.cc
--- ns-3.42/src/mpi/model/distributed-simulator-impl.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/model/distributed-simulator-impl.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George Riley <riley@ece.gatech.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/distributed-simulator-impl.h ns-3.43/src/mpi/model/distributed-simulator-impl.h
--- ns-3.42/src/mpi/model/distributed-simulator-impl.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/model/distributed-simulator-impl.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George Riley <riley@ece.gatech.edu>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/granted-time-window-mpi-interface.cc ns-3.43/src/mpi/model/granted-time-window-mpi-interface.cc
--- ns-3.42/src/mpi/model/granted-time-window-mpi-interface.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/model/granted-time-window-mpi-interface.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George Riley <riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/granted-time-window-mpi-interface.h ns-3.43/src/mpi/model/granted-time-window-mpi-interface.h
--- ns-3.42/src/mpi/model/granted-time-window-mpi-interface.h	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/model/granted-time-window-mpi-interface.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George Riley <riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/mpi-interface.cc ns-3.43/src/mpi/model/mpi-interface.cc
--- ns-3.42/src/mpi/model/mpi-interface.cc	2024-05-29 15:29:47.136073600 -0700
+++ ns-3.43/src/mpi/model/mpi-interface.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/mpi-interface.h ns-3.43/src/mpi/model/mpi-interface.h
--- ns-3.42/src/mpi/model/mpi-interface.h	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/mpi-interface.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/mpi-receiver.cc ns-3.43/src/mpi/model/mpi-receiver.cc
--- ns-3.42/src/mpi/model/mpi-receiver.cc	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/mpi-receiver.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George Riley <riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/mpi-receiver.h ns-3.43/src/mpi/model/mpi-receiver.h
--- ns-3.42/src/mpi/model/mpi-receiver.h	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/mpi-receiver.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George Riley <riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/null-message-mpi-interface.cc ns-3.43/src/mpi/model/null-message-mpi-interface.cc
--- ns-3.42/src/mpi/model/null-message-mpi-interface.cc	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/null-message-mpi-interface.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/null-message-mpi-interface.h ns-3.43/src/mpi/model/null-message-mpi-interface.h
--- ns-3.42/src/mpi/model/null-message-mpi-interface.h	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/null-message-mpi-interface.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/null-message-simulator-impl.cc ns-3.43/src/mpi/model/null-message-simulator-impl.cc
--- ns-3.42/src/mpi/model/null-message-simulator-impl.cc	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/null-message-simulator-impl.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/null-message-simulator-impl.h ns-3.43/src/mpi/model/null-message-simulator-impl.h
--- ns-3.42/src/mpi/model/null-message-simulator-impl.h	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/null-message-simulator-impl.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/parallel-communication-interface.h ns-3.43/src/mpi/model/parallel-communication-interface.h
--- ns-3.42/src/mpi/model/parallel-communication-interface.h	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/parallel-communication-interface.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/remote-channel-bundle.cc ns-3.43/src/mpi/model/remote-channel-bundle.cc
--- ns-3.42/src/mpi/model/remote-channel-bundle.cc	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/remote-channel-bundle.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/remote-channel-bundle.h ns-3.43/src/mpi/model/remote-channel-bundle.h
--- ns-3.42/src/mpi/model/remote-channel-bundle.h	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/remote-channel-bundle.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/remote-channel-bundle-manager.cc ns-3.43/src/mpi/model/remote-channel-bundle-manager.cc
--- ns-3.42/src/mpi/model/remote-channel-bundle-manager.cc	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/remote-channel-bundle-manager.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/model/remote-channel-bundle-manager.h ns-3.43/src/mpi/model/remote-channel-bundle-manager.h
--- ns-3.42/src/mpi/model/remote-channel-bundle-manager.h	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/model/remote-channel-bundle-manager.h	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright 2013. Lawrence Livermore National Security, LLC.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Steven Smith <smith84@llnl.gov>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/mpi/test/mpi-test-suite.cc ns-3.43/src/mpi/test/mpi-test-suite.cc
--- ns-3.42/src/mpi/test/mpi-test-suite.cc	2024-05-29 15:29:47.140073500 -0700
+++ ns-3.43/src/mpi/test/mpi-test-suite.cc	2024-10-09 16:41:10.060656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/examples/colors-link-description.cc ns-3.43/src/netanim/examples/colors-link-description.cc
--- ns-3.42/src/netanim/examples/colors-link-description.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/examples/colors-link-description.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: John Abraham <john.abraham.in@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/examples/dumbbell-animation.cc ns-3.43/src/netanim/examples/dumbbell-animation.cc
--- ns-3.42/src/netanim/examples/dumbbell-animation.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/examples/dumbbell-animation.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/examples/grid-animation.cc ns-3.43/src/netanim/examples/grid-animation.cc
--- ns-3.42/src/netanim/examples/grid-animation.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/examples/grid-animation.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Josh Pelkey <jpelkey@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/examples/resources-counters.cc ns-3.43/src/netanim/examples/resources-counters.cc
--- ns-3.42/src/netanim/examples/resources-counters.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/examples/resources-counters.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: John Abraham <john.abraham.in@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/examples/star-animation.cc ns-3.43/src/netanim/examples/star-animation.cc
--- ns-3.42/src/netanim/examples/star-animation.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/examples/star-animation.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/examples/uan-animation.cc ns-3.43/src/netanim/examples/uan-animation.cc
--- ns-3.42/src/netanim/examples/uan-animation.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/examples/uan-animation.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/examples/uan-animation.h ns-3.43/src/netanim/examples/uan-animation.h
--- ns-3.42/src/netanim/examples/uan-animation.h	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/examples/uan-animation.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/examples/wireless-animation.cc ns-3.43/src/netanim/examples/wireless-animation.cc
--- ns-3.42/src/netanim/examples/wireless-animation.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/examples/wireless-animation.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Vikas Pushkar (Adapted from third.cc)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/model/animation-interface.cc ns-3.43/src/netanim/model/animation-interface.cc
--- ns-3.42/src/netanim/model/animation-interface.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/model/animation-interface.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  * Modified by: John Abraham <john.abraham@gatech.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/model/animation-interface.h ns-3.43/src/netanim/model/animation-interface.h
--- ns-3.42/src/netanim/model/animation-interface.h	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/model/animation-interface.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  * Author: John Abraham <john.abraham@gatech.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/netanim/test/netanim-test.cc ns-3.43/src/netanim/test/netanim-test.cc
--- ns-3.42/src/netanim/test/netanim-test.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/netanim/test/netanim-test.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: John Abraham <john.abraham@gatech.edu>
  * Contributions: Eugene Kalishenko <ydginster@gmail.com> (Open Source and Linux Laboratory
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/doc/network.h ns-3.43/src/network/doc/network.h
--- ns-3.42/src/network/doc/network.h	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/network/doc/network.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/doc/sockets-api.rst ns-3.43/src/network/doc/sockets-api.rst
--- ns-3.42/src/network/doc/sockets-api.rst	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/network/doc/sockets-api.rst	2024-10-09 16:41:10.068656400 -0700
@@ -231,12 +231,12 @@
 However, users typically do not set the type of service associated with a socket
 through :cpp:func:`ns3::Socket::SetIpTos` because sockets are normally created
 by application helpers and users cannot get a pointer to the sockets.
-Instead, users can create an address of type :cpp:class:`ns3::InetSocketAddress`
-with the desired type of service value and pass it to the application helpers::
+
+Applications have a ``Tos`` attribute to simplify the ToS setup::
 
     InetSocketAddress destAddress(ipv4Address, udpPort);
-    destAddress.SetTos(tos);
     OnOffHelper onoff("ns3::UdpSocketFactory", destAddress);
+    onoff.SetAttribute("Tos", UintegerValue(tos));
 
 For this to work, the application must eventually call the
 :cpp:func:`ns3::Socket::Connect()` method to connect to the provided
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/examples/bit-serializer.cc ns-3.43/src/network/examples/bit-serializer.cc
--- ns-3.42/src/network/examples/bit-serializer.cc	2024-05-29 15:29:47.144073700 -0700
+++ ns-3.43/src/network/examples/bit-serializer.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/examples/lollipop-comparisons.cc ns-3.43/src/network/examples/lollipop-comparisons.cc
--- ns-3.42/src/network/examples/lollipop-comparisons.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/examples/lollipop-comparisons.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/examples/main-packet-tag.cc ns-3.43/src/network/examples/main-packet-tag.cc
--- ns-3.42/src/network/examples/main-packet-tag.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/examples/main-packet-tag.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/examples/packet-socket-apps.cc ns-3.43/src/network/examples/packet-socket-apps.cc
--- ns-3.42/src/network/examples/packet-socket-apps.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/examples/packet-socket-apps.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/application-container.cc ns-3.43/src/network/helper/application-container.cc
--- ns-3.42/src/network/helper/application-container.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/application-container.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/application-container.h ns-3.43/src/network/helper/application-container.h
--- ns-3.42/src/network/helper/application-container.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/application-container.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/application-helper.cc ns-3.43/src/network/helper/application-helper.cc
--- ns-3.42/src/network/helper/application-helper.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/application-helper.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/application-helper.h ns-3.43/src/network/helper/application-helper.h
--- ns-3.42/src/network/helper/application-helper.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/application-helper.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/delay-jitter-estimation.cc ns-3.43/src/network/helper/delay-jitter-estimation.cc
--- ns-3.42/src/network/helper/delay-jitter-estimation.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/delay-jitter-estimation.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/delay-jitter-estimation.h ns-3.43/src/network/helper/delay-jitter-estimation.h
--- ns-3.42/src/network/helper/delay-jitter-estimation.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/delay-jitter-estimation.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/net-device-container.cc ns-3.43/src/network/helper/net-device-container.cc
--- ns-3.42/src/network/helper/net-device-container.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/net-device-container.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/net-device-container.h ns-3.43/src/network/helper/net-device-container.h
--- ns-3.42/src/network/helper/net-device-container.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/net-device-container.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/node-container.cc ns-3.43/src/network/helper/node-container.cc
--- ns-3.42/src/network/helper/node-container.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/node-container.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/node-container.h ns-3.43/src/network/helper/node-container.h
--- ns-3.42/src/network/helper/node-container.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/node-container.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/packet-socket-helper.cc ns-3.43/src/network/helper/packet-socket-helper.cc
--- ns-3.42/src/network/helper/packet-socket-helper.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/packet-socket-helper.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/packet-socket-helper.h ns-3.43/src/network/helper/packet-socket-helper.h
--- ns-3.42/src/network/helper/packet-socket-helper.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/packet-socket-helper.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/simple-net-device-helper.cc ns-3.43/src/network/helper/simple-net-device-helper.cc
--- ns-3.42/src/network/helper/simple-net-device-helper.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/simple-net-device-helper.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/simple-net-device-helper.h ns-3.43/src/network/helper/simple-net-device-helper.h
--- ns-3.42/src/network/helper/simple-net-device-helper.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/simple-net-device-helper.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/trace-helper.cc ns-3.43/src/network/helper/trace-helper.cc
--- ns-3.42/src/network/helper/trace-helper.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/trace-helper.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "trace-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/helper/trace-helper.h ns-3.43/src/network/helper/trace-helper.h
--- ns-3.42/src/network/helper/trace-helper.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/helper/trace-helper.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef TRACE_HELPER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/address.cc ns-3.43/src/network/model/address.cc
--- ns-3.42/src/network/model/address.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/address.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/address.h ns-3.43/src/network/model/address.h
--- ns-3.42/src/network/model/address.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/address.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/application.cc ns-3.43/src/network/model/application.cc
--- ns-3.42/src/network/model/application.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/application.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/application.h ns-3.43/src/network/model/application.h
--- ns-3.42/src/network/model/application.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/application.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 Georgia Tech Research Corporation
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/buffer.cc ns-3.43/src/network/model/buffer.cc
--- ns-3.42/src/network/model/buffer.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/buffer.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/buffer.h ns-3.43/src/network/model/buffer.h
--- ns-3.42/src/network/model/buffer.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/buffer.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/byte-tag-list.cc ns-3.43/src/network/model/byte-tag-list.cc
--- ns-3.42/src/network/model/byte-tag-list.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/byte-tag-list.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/byte-tag-list.h ns-3.43/src/network/model/byte-tag-list.h
--- ns-3.42/src/network/model/byte-tag-list.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/byte-tag-list.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/channel.cc ns-3.43/src/network/model/channel.cc
--- ns-3.42/src/network/model/channel.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/channel.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "channel.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/channel.h ns-3.43/src/network/model/channel.h
--- ns-3.42/src/network/model/channel.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/channel.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef NS3_CHANNEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/channel-list.cc ns-3.43/src/network/model/channel-list.cc
--- ns-3.42/src/network/model/channel-list.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/channel-list.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "channel-list.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/channel-list.h ns-3.43/src/network/model/channel-list.h
--- ns-3.42/src/network/model/channel-list.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/channel-list.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef CHANNEL_LIST_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/chunk.cc ns-3.43/src/network/model/chunk.cc
--- ns-3.42/src/network/model/chunk.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/chunk.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/chunk.h ns-3.43/src/network/model/chunk.h
--- ns-3.42/src/network/model/chunk.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/chunk.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/header.cc ns-3.43/src/network/model/header.cc
--- ns-3.42/src/network/model/header.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/header.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/header.h ns-3.43/src/network/model/header.h
--- ns-3.42/src/network/model/header.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/header.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/net-device.cc ns-3.43/src/network/model/net-device.cc
--- ns-3.42/src/network/model/net-device.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/net-device.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/net-device.h ns-3.43/src/network/model/net-device.h
--- ns-3.42/src/network/model/net-device.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/net-device.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Modified by Emmanuelle Laprise to remove dependence on LLC headers
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/nix-vector.cc ns-3.43/src/network/model/nix-vector.cc
--- ns-3.42/src/network/model/nix-vector.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/nix-vector.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 The Georgia Institute of Technology
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Josh Pelkey <jpelkey@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/nix-vector.h ns-3.43/src/network/model/nix-vector.h
--- ns-3.42/src/network/model/nix-vector.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/nix-vector.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 The Georgia Institute of Technology
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Josh Pelkey <jpelkey@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/node.cc ns-3.43/src/network/model/node.cc
--- ns-3.42/src/network/model/node.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/node.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 Georgia Tech Research Corporation, INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: George F. Riley<riley@ece.gatech.edu>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/node.h ns-3.43/src/network/model/node.h
--- ns-3.42/src/network/model/node.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/node.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 Georgia Tech Research Corporation, INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: George F. Riley<riley@ece.gatech.edu>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/node-list.cc ns-3.43/src/network/model/node-list.cc
--- ns-3.42/src/network/model/node-list.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/node-list.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *  Mathieu Lacage <mathieu.lacage@sophia.inria.fr>,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/node-list.h ns-3.43/src/network/model/node-list.h
--- ns-3.42/src/network/model/node-list.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/node-list.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:
  *  Mathieu Lacage <mathieu.lacage@sophia.inria.fr>,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/packet.cc ns-3.43/src/network/model/packet.cc
--- ns-3.42/src/network/model/packet.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/packet.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/packet.h ns-3.43/src/network/model/packet.h
--- ns-3.42/src/network/model/packet.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/packet.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/packet-metadata.cc ns-3.43/src/network/model/packet-metadata.cc
--- ns-3.42/src/network/model/packet-metadata.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/packet-metadata.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/packet-metadata.h ns-3.43/src/network/model/packet-metadata.h
--- ns-3.42/src/network/model/packet-metadata.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/packet-metadata.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/packet-tag-list.cc ns-3.43/src/network/model/packet-tag-list.cc
--- ns-3.42/src/network/model/packet-tag-list.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/packet-tag-list.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/packet-tag-list.h ns-3.43/src/network/model/packet-tag-list.h
--- ns-3.42/src/network/model/packet-tag-list.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/packet-tag-list.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/socket.cc ns-3.43/src/network/model/socket.cc
--- ns-3.42/src/network/model/socket.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/socket.cc	2024-10-09 16:41:10.068656400 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 Georgia Tech Research Corporation
  *               2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: George F. Riley<riley@ece.gatech.edu>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/socket-factory.cc ns-3.43/src/network/model/socket-factory.cc
--- ns-3.42/src/network/model/socket-factory.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/socket-factory.cc	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/socket-factory.h ns-3.43/src/network/model/socket-factory.h
--- ns-3.42/src/network/model/socket-factory.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/socket-factory.h	2024-10-09 16:41:10.068656400 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/socket.h ns-3.43/src/network/model/socket.h
--- ns-3.42/src/network/model/socket.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/socket.h	2024-10-09 16:41:10.072656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 Georgia Tech Research Corporation
  *               2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: George F. Riley<riley@ece.gatech.edu>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/tag-buffer.cc ns-3.43/src/network/model/tag-buffer.cc
--- ns-3.42/src/network/model/tag-buffer.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/tag-buffer.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/tag-buffer.h ns-3.43/src/network/model/tag-buffer.h
--- ns-3.42/src/network/model/tag-buffer.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/tag-buffer.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/tag.cc ns-3.43/src/network/model/tag.cc
--- ns-3.42/src/network/model/tag.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/tag.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/tag.h ns-3.43/src/network/model/tag.h
--- ns-3.42/src/network/model/tag.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/tag.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/trailer.cc ns-3.43/src/network/model/trailer.cc
--- ns-3.42/src/network/model/trailer.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/trailer.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/model/trailer.h ns-3.43/src/network/model/trailer.h
--- ns-3.42/src/network/model/trailer.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/model/trailer.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/bit-serializer-test.cc ns-3.43/src/network/test/bit-serializer-test.cc
--- ns-3.42/src/network/test/bit-serializer-test.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/bit-serializer-test.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/buffer-test.cc ns-3.43/src/network/test/buffer-test.cc
--- ns-3.42/src/network/test/buffer-test.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/buffer-test.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/drop-tail-queue-test-suite.cc ns-3.43/src/network/test/drop-tail-queue-test-suite.cc
--- ns-3.42/src/network/test/drop-tail-queue-test-suite.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/drop-tail-queue-test-suite.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/drop-tail-queue.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/error-model-test-suite.cc ns-3.43/src/network/test/error-model-test-suite.cc
--- ns-3.42/src/network/test/error-model-test-suite.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/error-model-test-suite.cc	2024-10-09 16:41:10.072656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 University of Washington
  * Copyright (c) 2013 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/header-serialization-test.h ns-3.43/src/network/test/header-serialization-test.h
--- ns-3.42/src/network/test/header-serialization-test.h	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/header-serialization-test.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Davide Magrin <magrin.davide@gmail.com>
  *          Stefano Avallone <stavallo@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/ipv6-address-test-suite.cc ns-3.43/src/network/test/ipv6-address-test-suite.cc
--- ns-3.42/src/network/test/ipv6-address-test-suite.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/ipv6-address-test-suite.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/ipv6-address.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/lollipop-counter-test.cc ns-3.43/src/network/test/lollipop-counter-test.cc
--- ns-3.42/src/network/test/lollipop-counter-test.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/lollipop-counter-test.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/packetbb-test-suite.cc ns-3.43/src/network/test/packetbb-test-suite.cc
--- ns-3.42/src/network/test/packetbb-test-suite.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/packetbb-test-suite.cc	2024-10-09 16:41:10.072656600 -0700
@@ -2,18 +2,7 @@
 /*
  * Copyright (c) 2009 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Wambold <tom5760@gmail.com>
  */
@@ -94,7 +83,7 @@
 
     int memrv = memcmp(newBuffer.PeekData(), m_refBuffer.PeekData(), newBuffer.GetSize());
 
-    NS_TEST_ASSERT_MSG_EQ(memrv, 0, "serialization faled, buffers differ");
+    NS_TEST_ASSERT_MSG_EQ(memrv, 0, "serialization failed, buffers differ");
 }
 
 void
@@ -166,16 +155,24 @@
      * | * Packet seq number: 3
      * `------------------
      * This test has the phastlv flag set to 1 with no tlvs.
-     * I'll come back to this one later.
+     *
+     * Note: it is not possible to run this test with the current test class.
+     * The bytecode of the packet should be:
+     * - pkt-header (8 bits): 0x0c (phasseqnum and phastlv)
+     * - pkt-seq-num (16 bits): 0x00, 0x03
+     * - tlvs-length (16 bits): 0x00, 0x00 (i.e., no TLVs)
+     *
+     * RFC 5444 doesn't forbid this, but it doesn't foresee it either.
+     * The packet is questionable, but it is not malformed.
      */
-#if 0
-  {
-    Ptr<PbbPacket> packet = Create<PbbPacket> ();
-    packet->SetSequenceNumber (3);
-    uint8_t buffer[] = { 0x0c, 0x00, 0x03, 0x00, 0x00};
-    AddTestCase (new PbbTestCase ("3", packet, buffer, sizeof(buffer)), TestCase::Duration::QUICK);
-  }
-#endif
+    {
+        Ptr<PbbPacket> packet = Create<PbbPacket>();
+        packet->SetSequenceNumber(3);
+        packet->ForceTlv(true);
+        uint8_t buffer[] = {0x0c, 0x00, 0x03, 0x00, 0x00};
+        AddTestCase(new PbbTestCase("3", packet, buffer, sizeof(buffer)),
+                    TestCase::Duration::QUICK);
+    }
 
     /* Test 4
      * ,------------------
@@ -732,64 +729,9 @@
     }
 
     /* Test 13
-     * ,------------------
-     * |  PACKET
-     * |------------------
-     * | * Packet version:    0
-     * | * Packet flags:  12
-     * | * Packet seq number: 13
-     * |    | * Packet TLV Block
-     * |    |     - TLV
-     * |    |         Flags = 0
-     * |    |         Type = 1; Value = (warning: parameter is NULL)
-     * |    ,-------------------
-     * |    |  MESSAGE
-     * |    |-------------------
-     * |    | * Message type:       1
-     * |    | * Message flags:  0
-     * |    `-------------------
-     * |
-     * |    ,-------------------
-     * |    |  MESSAGE
-     * |    |-------------------
-     * |    | * Message type:       2
-     * |    | * Message flags:  240
-     * |    | * Originator address: 10.0.0.1
-     * |    | * Hop limit:          255
-     * |    | * Hop count:          1
-     * |    | * Message seq number: 12345
-     * |    `-------------------
-     * |
-     * `------------------
+     * Test 13 has been removed because it was identical to test 12
+     * The following tests have not been renumbered
      */
-    {
-        Ptr<PbbPacket> packet = Create<PbbPacket>();
-        packet->SetSequenceNumber(13);
-
-        Ptr<PbbTlv> tlv1 = Create<PbbTlv>();
-        tlv1->SetType(1);
-        packet->TlvPushBack(tlv1);
-
-        Ptr<PbbMessageIpv4> msg1 = Create<PbbMessageIpv4>();
-        msg1->SetType(1);
-        packet->MessagePushBack(msg1);
-
-        Ptr<PbbMessageIpv4> msg2 = Create<PbbMessageIpv4>();
-        msg2->SetType(2);
-        msg2->SetOriginatorAddress(Ipv4Address("10.0.0.1"));
-        msg2->SetHopLimit(255);
-        msg2->SetHopCount(1);
-        msg2->SetSequenceNumber(12345);
-        packet->MessagePushBack(msg2);
-
-        uint8_t buffer[] = {
-            0x0c, 0x00, 0x0d, 0x00, 0x02, 0x01, 0x00, 0x01, 0x03, 0x00, 0x06,
-            0x00, 0x00, 0x02, 0xf3, 0x00, /* [14] - 0xf0 */
-            0x0e, 0x0a, 0x00, 0x00, 0x01, 0xff, 0x01, 0x30, 0x39, 0x00, 0x00,
-        };
-        AddTestCase(new PbbTestCase("13", packet, buffer, sizeof(buffer)),
-                    TestCase::Duration::QUICK);
-    }
 
     /* Test 14
      * ,------------------
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/packet-metadata-test.cc ns-3.43/src/network/test/packet-metadata-test.cc
--- ns-3.42/src/network/test/packet-metadata-test.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/packet-metadata-test.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/packet-socket-apps-test-suite.cc ns-3.43/src/network/test/packet-socket-apps-test-suite.cc
--- ns-3.42/src/network/test/packet-socket-apps-test-suite.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/packet-socket-apps-test-suite.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/packet-test-suite.cc ns-3.43/src/network/test/packet-test-suite.cc
--- ns-3.42/src/network/test/packet-test-suite.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/packet-test-suite.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/pcap-file-test-suite.cc ns-3.43/src/network/test/pcap-file-test-suite.cc
--- ns-3.42/src/network/test/pcap-file-test-suite.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/pcap-file-test-suite.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Craig Dowell (craigdo@ee.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/sequence-number-test-suite.cc ns-3.43/src/network/test/sequence-number-test-suite.cc
--- ns-3.42/src/network/test/sequence-number-test-suite.cc	2024-05-29 15:29:47.148073700 -0700
+++ ns-3.43/src/network/test/sequence-number-test-suite.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2008-2010 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/test/test-data-rate.cc ns-3.43/src/network/test/test-data-rate.cc
--- ns-3.42/src/network/test/test-data-rate.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/test/test-data-rate.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) Facebook, Inc. and its affiliates.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Greg Steinbrecher <grs@fb.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/address-utils.cc ns-3.43/src/network/utils/address-utils.cc
--- ns-3.42/src/network/utils/address-utils.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/address-utils.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/address-utils.h ns-3.43/src/network/utils/address-utils.h
--- ns-3.42/src/network/utils/address-utils.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/address-utils.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/bit-deserializer.cc ns-3.43/src/network/utils/bit-deserializer.cc
--- ns-3.42/src/network/utils/bit-deserializer.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/bit-deserializer.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/bit-deserializer.h ns-3.43/src/network/utils/bit-deserializer.h
--- ns-3.42/src/network/utils/bit-deserializer.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/bit-deserializer.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/bit-serializer.cc ns-3.43/src/network/utils/bit-serializer.cc
--- ns-3.42/src/network/utils/bit-serializer.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/bit-serializer.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/bit-serializer.h ns-3.43/src/network/utils/bit-serializer.h
--- ns-3.42/src/network/utils/bit-serializer.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/bit-serializer.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/crc32.cc ns-3.43/src/network/utils/crc32.cc
--- ns-3.42/src/network/utils/crc32.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/crc32.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 PIOTR JURKIEWICZ
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Jurkiewicz <piotr.jerzy.jurkiewicz@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/crc32.h ns-3.43/src/network/utils/crc32.h
--- ns-3.42/src/network/utils/crc32.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/crc32.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 PIOTR JURKIEWICZ
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Piotr Jurkiewicz <piotr.jerzy.jurkiewicz@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/data-rate.cc ns-3.43/src/network/utils/data-rate.cc
--- ns-3.42/src/network/utils/data-rate.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/data-rate.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Rajib Bhattacharjea<raj.b@gatech.edu>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/data-rate.h ns-3.43/src/network/utils/data-rate.h
--- ns-3.42/src/network/utils/data-rate.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/data-rate.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2006 Georgia Tech Research Corporation
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Rajib Bhattacharjea<raj.b@gatech.edu>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/drop-tail-queue.cc ns-3.43/src/network/utils/drop-tail-queue.cc
--- ns-3.42/src/network/utils/drop-tail-queue.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/drop-tail-queue.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "drop-tail-queue.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/drop-tail-queue.h ns-3.43/src/network/utils/drop-tail-queue.h
--- ns-3.42/src/network/utils/drop-tail-queue.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/drop-tail-queue.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef DROPTAIL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/dynamic-queue-limits.cc ns-3.43/src/network/utils/dynamic-queue-limits.cc
--- ns-3.42/src/network/utils/dynamic-queue-limits.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/dynamic-queue-limits.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/dynamic-queue-limits.h ns-3.43/src/network/utils/dynamic-queue-limits.h
--- ns-3.42/src/network/utils/dynamic-queue-limits.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/dynamic-queue-limits.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/error-channel.cc ns-3.43/src/network/utils/error-channel.cc
--- ns-3.42/src/network/utils/error-channel.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/error-channel.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/error-channel.h ns-3.43/src/network/utils/error-channel.h
--- ns-3.42/src/network/utils/error-channel.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/error-channel.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/error-model.cc ns-3.43/src/network/utils/error-model.cc
--- ns-3.42/src/network/utils/error-model.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/error-model.cc	2024-10-09 16:41:10.072656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 University of Washington
  * Copyright (c) 2013 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *
  * This file incorporates work covered by the following copyright and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/error-model.h ns-3.43/src/network/utils/error-model.h
--- ns-3.42/src/network/utils/error-model.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/error-model.h	2024-10-09 16:41:10.072656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 University of Washington
  * Copyright (c) 2013 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *
  * This file incorporates work covered by the following copyright and
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/ethernet-header.cc ns-3.43/src/network/utils/ethernet-header.cc
--- ns-3.42/src/network/utils/ethernet-header.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/ethernet-header.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/ethernet-header.h ns-3.43/src/network/utils/ethernet-header.h
--- ns-3.42/src/network/utils/ethernet-header.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/ethernet-header.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/ethernet-trailer.cc ns-3.43/src/network/utils/ethernet-trailer.cc
--- ns-3.42/src/network/utils/ethernet-trailer.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/ethernet-trailer.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/ethernet-trailer.h ns-3.43/src/network/utils/ethernet-trailer.h
--- ns-3.42/src/network/utils/ethernet-trailer.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/ethernet-trailer.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
@@ -86,7 +75,7 @@
     bool CheckFcs(Ptr<const Packet> p) const;
 
     /**
-     *\return Returns the size of the trailer
+     * \return Returns the size of the trailer
      */
     uint32_t GetTrailerSize() const;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/flow-id-tag.cc ns-3.43/src/network/utils/flow-id-tag.cc
--- ns-3.42/src/network/utils/flow-id-tag.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/flow-id-tag.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/flow-id-tag.h ns-3.43/src/network/utils/flow-id-tag.h
--- ns-3.42/src/network/utils/flow-id-tag.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/flow-id-tag.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/generic-phy.h ns-3.43/src/network/utils/generic-phy.h
--- ns-3.42/src/network/utils/generic-phy.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/generic-phy.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c)  2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/inet6-socket-address.cc ns-3.43/src/network/utils/inet6-socket-address.cc
--- ns-3.42/src/network/utils/inet6-socket-address.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/inet6-socket-address.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2008 Louis Pasteur University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/inet6-socket-address.h ns-3.43/src/network/utils/inet6-socket-address.h
--- ns-3.42/src/network/utils/inet6-socket-address.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/inet6-socket-address.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2008 Louis Pasteur University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/inet-socket-address.cc ns-3.43/src/network/utils/inet-socket-address.cc
--- ns-3.42/src/network/utils/inet-socket-address.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/inet-socket-address.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/inet-socket-address.h ns-3.43/src/network/utils/inet-socket-address.h
--- ns-3.42/src/network/utils/inet-socket-address.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/inet-socket-address.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/ipv4-address.cc ns-3.43/src/network/utils/ipv4-address.cc
--- ns-3.42/src/network/utils/ipv4-address.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/ipv4-address.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -28,6 +17,7 @@
 #include <WS2tcpip.h>
 #else
 #include <arpa/inet.h>
+#include <sys/socket.h>
 #endif
 
 namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/ipv4-address.h ns-3.43/src/network/utils/ipv4-address.h
--- ns-3.42/src/network/utils/ipv4-address.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/ipv4-address.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/ipv6-address.cc ns-3.43/src/network/utils/ipv6-address.cc
--- ns-3.42/src/network/utils/ipv6-address.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/ipv6-address.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2008 Louis Pasteur University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
@@ -33,6 +22,7 @@
 #include <WS2tcpip.h>
 #else
 #include <arpa/inet.h>
+#include <sys/socket.h>
 #endif
 
 namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/ipv6-address.h ns-3.43/src/network/utils/ipv6-address.h
--- ns-3.42/src/network/utils/ipv6-address.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/ipv6-address.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007-2008 Louis Pasteur University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sebastien Vincent <vincent@clarinet.u-strasbg.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/llc-snap-header.cc ns-3.43/src/network/utils/llc-snap-header.cc
--- ns-3.42/src/network/utils/llc-snap-header.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/llc-snap-header.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/llc-snap-header.h ns-3.43/src/network/utils/llc-snap-header.h
--- ns-3.42/src/network/utils/llc-snap-header.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/llc-snap-header.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/lollipop-counter.h ns-3.43/src/network/utils/lollipop-counter.h
--- ns-3.42/src/network/utils/lollipop-counter.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/lollipop-counter.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/mac16-address.cc ns-3.43/src/network/utils/mac16-address.cc
--- ns-3.42/src/network/utils/mac16-address.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/mac16-address.cc	2024-10-09 16:41:10.072656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 INRIA
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/mac16-address.h ns-3.43/src/network/utils/mac16-address.h
--- ns-3.42/src/network/utils/mac16-address.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/mac16-address.h	2024-10-09 16:41:10.072656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007 INRIA
  * Copyright (c) 2011 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef MAC16_ADDRESS_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/mac48-address.cc ns-3.43/src/network/utils/mac48-address.cc
--- ns-3.42/src/network/utils/mac48-address.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/mac48-address.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/mac48-address.h ns-3.43/src/network/utils/mac48-address.h
--- ns-3.42/src/network/utils/mac48-address.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/mac48-address.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/mac64-address.cc ns-3.43/src/network/utils/mac64-address.cc
--- ns-3.42/src/network/utils/mac64-address.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/mac64-address.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/mac64-address.h ns-3.43/src/network/utils/mac64-address.h
--- ns-3.42/src/network/utils/mac64-address.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/mac64-address.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/mac8-address.cc ns-3.43/src/network/utils/mac8-address.cc
--- ns-3.42/src/network/utils/mac8-address.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/mac8-address.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/mac8-address.h ns-3.43/src/network/utils/mac8-address.h
--- ns-3.42/src/network/utils/mac8-address.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/mac8-address.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/net-device-queue-interface.cc ns-3.43/src/network/utils/net-device-queue-interface.cc
--- ns-3.42/src/network/utils/net-device-queue-interface.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/net-device-queue-interface.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stefano.avallone@.unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/net-device-queue-interface.h ns-3.43/src/network/utils/net-device-queue-interface.h
--- ns-3.42/src/network/utils/net-device-queue-interface.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/net-device-queue-interface.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stefano.avallone@.unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/output-stream-wrapper.cc ns-3.43/src/network/utils/output-stream-wrapper.cc
--- ns-3.42/src/network/utils/output-stream-wrapper.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/output-stream-wrapper.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "output-stream-wrapper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/output-stream-wrapper.h ns-3.43/src/network/utils/output-stream-wrapper.h
--- ns-3.42/src/network/utils/output-stream-wrapper.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/output-stream-wrapper.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef OUTPUT_STREAM_WRAPPER_H
@@ -55,14 +44,14 @@
  * the Ptr<>, we don't bother and just expect the user to Get a saved pointer
  * to an ostream and dereference it him or herself.  As in:
  *
- * \verbatim
- *   void
- *   TraceSink (Ptr<OutputStreamWrapper> streamWrapper, Ptr<const Packet> packet)
- *   {
- *     std::ostream *stream = streamWrapper->GetStream ();
+ * \code{.cpp}
+ * void
+ * TraceSink(Ptr<OutputStreamWrapper> streamWrapper, Ptr<const Packet> packet)
+ * {
+ *     std::ostream *stream = streamWrapper->GetStream();
  *     *stream << "got packet" << std::endl;
- *   }
- * \endverbatim
+ * }
+ * \endcode
  *
  *
  * This class uses a basic ns-3 reference counting base class but is not
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packetbb.cc ns-3.43/src/network/utils/packetbb.cc
--- ns-3.42/src/network/utils/packetbb.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packetbb.cc	2024-10-09 16:41:10.072656600 -0700
@@ -2,18 +2,7 @@
 /*
  * Copyright (c) 2009 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Wambold <tom5760@gmail.com>
  */
@@ -545,6 +534,7 @@
     NS_LOG_FUNCTION(this);
     m_version = VERSION;
     m_hasseqnum = false;
+    m_forceTlv = false;
 }
 
 PbbPacket::~PbbPacket()
@@ -583,6 +573,13 @@
     return m_hasseqnum;
 }
 
+void
+PbbPacket::ForceTlv(bool forceTlv)
+{
+    NS_LOG_FUNCTION(this);
+    m_forceTlv = forceTlv;
+}
+
 /* Manipulating Packet TLVs */
 
 PbbPacket::TlvIterator
@@ -857,7 +854,7 @@
         size += 2;
     }
 
-    if (!TlvEmpty())
+    if (!TlvEmpty() || m_forceTlv)
     {
         size += m_tlvList.GetSerializedSize();
     }
@@ -889,7 +886,7 @@
         start.WriteHtonU16(GetSequenceNumber());
     }
 
-    if (!TlvEmpty())
+    if (!TlvEmpty() || m_forceTlv)
     {
         flags |= PHAS_TLV;
         m_tlvList.Serialize(start);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packetbb.h ns-3.43/src/network/utils/packetbb.h
--- ns-3.42/src/network/utils/packetbb.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packetbb.h	2024-10-09 16:41:10.072656600 -0700
@@ -2,18 +2,7 @@
 /*
  * Copyright (c) 2009 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Wambold <tom5760@gmail.com>
  */
@@ -432,6 +421,17 @@
      */
     bool HasSequenceNumber() const;
 
+    /**
+     * \brief Forces a packet to write a TLV list even if it's empty, ignoring
+     * the phastlv bit.
+     *
+     * This is mainly used to check the Deserialization of a questionable
+     * but correct packet (see test 3).
+     *
+     * \param forceTlv true will force TLV to be written even if no TLV is set.
+     */
+    void ForceTlv(bool forceTlv);
+
     /* Manipulating Packet TLVs */
 
     /**
@@ -683,6 +683,7 @@
 
     bool m_hasseqnum;  //!< Sequence number present
     uint16_t m_seqnum; //!< Sequence number
+    bool m_forceTlv;   //!< Force writing a TLV list (even if it's empty)
 };
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-burst.cc ns-3.43/src/network/utils/packet-burst.cc
--- ns-3.42/src/network/utils/packet-burst.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-burst.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-burst.h ns-3.43/src/network/utils/packet-burst.h
--- ns-3.42/src/network/utils/packet-burst.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-burst.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-data-calculators.cc ns-3.43/src/network/utils/packet-data-calculators.cc
--- ns-3.42/src/network/utils/packet-data-calculators.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-data-calculators.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-data-calculators.h ns-3.43/src/network/utils/packet-data-calculators.h
--- ns-3.42/src/network/utils/packet-data-calculators.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-data-calculators.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-probe.cc ns-3.43/src/network/utils/packet-probe.cc
--- ns-3.42/src/network/utils/packet-probe.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-probe.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-probe.h ns-3.43/src/network/utils/packet-probe.h
--- ns-3.42/src/network/utils/packet-probe.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-probe.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket-address.cc ns-3.43/src/network/utils/packet-socket-address.cc
--- ns-3.42/src/network/utils/packet-socket-address.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket-address.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket-address.h ns-3.43/src/network/utils/packet-socket-address.h
--- ns-3.42/src/network/utils/packet-socket-address.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket-address.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket.cc ns-3.43/src/network/utils/packet-socket.cc
--- ns-3.42/src/network/utils/packet-socket.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise, INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
@@ -221,7 +210,7 @@
 PacketSocket::Connect(const Address& ad)
 {
     NS_LOG_FUNCTION(this << ad);
-    PacketSocketAddress address;
+
     if (m_state == STATE_CLOSED)
     {
         m_errno = ERROR_BADF;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket-client.cc ns-3.43/src/network/utils/packet-socket-client.cc
--- ns-3.42/src/network/utils/packet-socket-client.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket-client.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket-client.h ns-3.43/src/network/utils/packet-socket-client.h
--- ns-3.42/src/network/utils/packet-socket-client.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket-client.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket-factory.cc ns-3.43/src/network/utils/packet-socket-factory.cc
--- ns-3.42/src/network/utils/packet-socket-factory.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket-factory.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket-factory.h ns-3.43/src/network/utils/packet-socket-factory.h
--- ns-3.42/src/network/utils/packet-socket-factory.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket-factory.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket.h ns-3.43/src/network/utils/packet-socket.h
--- ns-3.42/src/network/utils/packet-socket.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 Emmanuelle Laprise, INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Emmanuelle Laprise <emmanuelle.laprise@bluekazoo.ca>,
  *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket-server.cc ns-3.43/src/network/utils/packet-socket-server.cc
--- ns-3.42/src/network/utils/packet-socket-server.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket-server.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/packet-socket-server.h ns-3.43/src/network/utils/packet-socket-server.h
--- ns-3.42/src/network/utils/packet-socket-server.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/packet-socket-server.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/pcap-file.cc ns-3.43/src/network/utils/pcap-file.cc
--- ns-3.42/src/network/utils/pcap-file.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/pcap-file.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Craig Dowell (craigdo@ee.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/pcap-file.h ns-3.43/src/network/utils/pcap-file.h
--- ns-3.42/src/network/utils/pcap-file.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/pcap-file.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Craig Dowell (craigdo@ee.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/pcap-file-wrapper.cc ns-3.43/src/network/utils/pcap-file-wrapper.cc
--- ns-3.42/src/network/utils/pcap-file-wrapper.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/pcap-file-wrapper.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "pcap-file-wrapper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/pcap-file-wrapper.h ns-3.43/src/network/utils/pcap-file-wrapper.h
--- ns-3.42/src/network/utils/pcap-file-wrapper.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/pcap-file-wrapper.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef PCAP_FILE_WRAPPER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/pcap-test.h ns-3.43/src/network/utils/pcap-test.h
--- ns-3.42/src/network/utils/pcap-test.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/pcap-test.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@cutebugs.net>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/queue.cc ns-3.43/src/network/utils/queue.cc
--- ns-3.42/src/network/utils/queue.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/queue.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "queue.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/queue-fwd.h ns-3.43/src/network/utils/queue-fwd.h
--- ns-3.42/src/network/utils/queue-fwd.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/queue-fwd.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef QUEUE_FWD_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/queue.h ns-3.43/src/network/utils/queue.h
--- ns-3.42/src/network/utils/queue.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/queue.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // The queue base class has a limit on its size, in terms of number of
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/queue-item.cc ns-3.43/src/network/utils/queue-item.cc
--- ns-3.42/src/network/utils/queue-item.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/queue-item.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stefano.avallone@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/queue-item.h ns-3.43/src/network/utils/queue-item.h
--- ns-3.42/src/network/utils/queue-item.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/queue-item.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stefano.avallone@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/queue-limits.cc ns-3.43/src/network/utils/queue-limits.cc
--- ns-3.42/src/network/utils/queue-limits.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/queue-limits.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/queue-limits.h ns-3.43/src/network/utils/queue-limits.h
--- ns-3.42/src/network/utils/queue-limits.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/queue-limits.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/queue-size.cc ns-3.43/src/network/utils/queue-size.cc
--- ns-3.42/src/network/utils/queue-size.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/queue-size.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/queue-size.h ns-3.43/src/network/utils/queue-size.h
--- ns-3.42/src/network/utils/queue-size.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/queue-size.h	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/radiotap-header.cc ns-3.43/src/network/utils/radiotap-header.cc
--- ns-3.42/src/network/utils/radiotap-header.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/radiotap-header.cc	2024-10-09 16:41:10.072656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Include., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/radiotap-header.h ns-3.43/src/network/utils/radiotap-header.h
--- ns-3.42/src/network/utils/radiotap-header.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/radiotap-header.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Include., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/sequence-number.h ns-3.43/src/network/utils/sequence-number.h
--- ns-3.42/src/network/utils/sequence-number.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/sequence-number.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2008-2010 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt> <gjcarneiro@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/simple-channel.cc ns-3.43/src/network/utils/simple-channel.cc
--- ns-3.42/src/network/utils/simple-channel.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/simple-channel.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/simple-channel.h ns-3.43/src/network/utils/simple-channel.h
--- ns-3.42/src/network/utils/simple-channel.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/simple-channel.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/simple-net-device.cc ns-3.43/src/network/utils/simple-net-device.cc
--- ns-3.42/src/network/utils/simple-net-device.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/simple-net-device.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/simple-net-device.h ns-3.43/src/network/utils/simple-net-device.h
--- ns-3.42/src/network/utils/simple-net-device.h	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/simple-net-device.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/sll-header.cc ns-3.43/src/network/utils/sll-header.cc
--- ns-3.42/src/network/utils/sll-header.cc	2024-05-29 15:29:47.152073600 -0700
+++ ns-3.43/src/network/utils/sll-header.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Université Pierre et Marie Curie
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matthieu Coudron <matthieu.coudron@lip6.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/sll-header.h ns-3.43/src/network/utils/sll-header.h
--- ns-3.42/src/network/utils/sll-header.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/network/utils/sll-header.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Université Pierre et Marie Curie
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matthieu Coudron <matthieu.coudron@lip6.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/timestamp-tag.cc ns-3.43/src/network/utils/timestamp-tag.cc
--- ns-3.42/src/network/utils/timestamp-tag.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/network/utils/timestamp-tag.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Joe Kopena <tjkopena@cs.drexel.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/network/utils/timestamp-tag.h ns-3.43/src/network/utils/timestamp-tag.h
--- ns-3.42/src/network/utils/timestamp-tag.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/network/utils/timestamp-tag.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Joe Kopena <tjkopena@cs.drexel.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/nix-vector-routing/examples/nix-double-wifi.cc ns-3.43/src/nix-vector-routing/examples/nix-double-wifi.cc
--- ns-3.42/src/nix-vector-routing/examples/nix-double-wifi.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/nix-vector-routing/examples/nix-double-wifi.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * This example is inspired from examples/tutorial/third.cc by
  * substituting the CSMA network with another WiFi network.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/nix-vector-routing/examples/nix-simple.cc ns-3.43/src/nix-vector-routing/examples/nix-simple.cc
--- ns-3.42/src/nix-vector-routing/examples/nix-simple.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/nix-vector-routing/examples/nix-simple.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Modified By: Ameya Deshpande <ameyanrd@outlook.com>
  *              Tommaso Pecorella <tommaso.pecorella@unifi.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/nix-vector-routing/examples/nix-simple-multi-address.cc ns-3.43/src/nix-vector-routing/examples/nix-simple-multi-address.cc
--- ns-3.42/src/nix-vector-routing/examples/nix-simple-multi-address.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/nix-vector-routing/examples/nix-simple-multi-address.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Ameya Deshpande <ameyanrd@outlook.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/nix-vector-routing/examples/nms-p2p-nix.cc ns-3.43/src/nix-vector-routing/examples/nms-p2p-nix.cc
--- ns-3.42/src/nix-vector-routing/examples/nms-p2p-nix.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/nix-vector-routing/examples/nms-p2p-nix.cc	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009, GTech Systems, Inc.
  * Copyright (c) 2021 NITK Surathkal: Extended to handle IPv6
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alfred Park <park@gtech-systems.com>
  * Modified By: Josh Pelkey <jpelkey@gatech.edu> (ported to ns-3)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/nix-vector-routing/helper/nix-vector-helper.cc ns-3.43/src/nix-vector-routing/helper/nix-vector-helper.cc
--- ns-3.42/src/nix-vector-routing/helper/nix-vector-helper.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/nix-vector-routing/helper/nix-vector-helper.cc	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 The Georgia Institute of Technology
  * Copyright (c) 2021 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * This file is adapted from the old ipv4-nix-vector-helper.cc.
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/nix-vector-routing/helper/nix-vector-helper.h ns-3.43/src/nix-vector-routing/helper/nix-vector-helper.h
--- ns-3.42/src/nix-vector-routing/helper/nix-vector-helper.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/nix-vector-routing/helper/nix-vector-helper.h	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 The Georgia Institute of Technology
  * Copyright (c) 2021 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * This file is adapted from the old ipv4-nix-vector-helper.h.
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/nix-vector-routing/model/nix-vector-routing.cc ns-3.43/src/nix-vector-routing/model/nix-vector-routing.cc
--- ns-3.42/src/nix-vector-routing/model/nix-vector-routing.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/nix-vector-routing/model/nix-vector-routing.cc	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 The Georgia Institute of Technology
  * Copyright (c) 2021 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * This file is adapted from the old ipv4-nix-vector-routing.cc.
  *
@@ -1009,9 +998,8 @@
 
     *os << std::resetiosflags(std::ios::adjustfield) << std::setiosflags(std::ios::left);
 
-    *os << "Node: " << m_ip->template GetObject<Node>()->GetId() << ", Time: " << Now().As(unit)
-        << ", Local time: " << m_ip->template GetObject<Node>()->GetLocalTime().As(unit)
-        << ", Nix Routing" << std::endl;
+    *os << "Node: " << m_node->GetId() << ", Time: " << Now().As(unit)
+        << ", Local time: " << m_node->GetLocalTime().As(unit) << ", Nix Routing" << std::endl;
 
     *os << "NixCache:" << std::endl;
     if (m_nixCache.size() > 0)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/nix-vector-routing/model/nix-vector-routing.h ns-3.43/src/nix-vector-routing/model/nix-vector-routing.h
--- ns-3.42/src/nix-vector-routing/model/nix-vector-routing.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/nix-vector-routing/model/nix-vector-routing.h	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 The Georgia Institute of Technology
  * Copyright (c) 2021 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * This file is adapted from the old ipv4-nix-vector-routing.h.
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/nix-vector-routing/test/nix-test.cc ns-3.43/src/nix-vector-routing/test/nix-test.cc
--- ns-3.42/src/nix-vector-routing/test/nix-test.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/nix-vector-routing/test/nix-test.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Ameya Deshpande <ameyanrd@outlook.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/examples/olsr-hna.cc ns-3.43/src/olsr/examples/olsr-hna.cc
--- ns-3.42/src/olsr/examples/olsr-hna.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/examples/olsr-hna.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,17 +1,6 @@
 /*
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Lalith Suresh <suresh.lalith@gmail.com>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/examples/simple-point-to-point-olsr.cc ns-3.43/src/olsr/examples/simple-point-to-point-olsr.cc
--- ns-3.42/src/olsr/examples/simple-point-to-point-olsr.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/examples/simple-point-to-point-olsr.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/helper/olsr-helper.cc ns-3.43/src/olsr/helper/olsr-helper.cc
--- ns-3.42/src/olsr/helper/olsr-helper.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/helper/olsr-helper.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/helper/olsr-helper.h ns-3.43/src/olsr/helper/olsr-helper.h
--- ns-3.42/src/olsr/helper/olsr-helper.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/helper/olsr-helper.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/model/olsr-header.cc ns-3.43/src/olsr/model/olsr-header.cc
--- ns-3.42/src/olsr/model/olsr-header.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/model/olsr-header.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/model/olsr-header.h ns-3.43/src/olsr/model/olsr-header.h
--- ns-3.42/src/olsr/model/olsr-header.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/model/olsr-header.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/model/olsr-repositories.h ns-3.43/src/olsr/model/olsr-repositories.h
--- ns-3.42/src/olsr/model/olsr-repositories.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/model/olsr-repositories.h	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Francisco J. Ros  <fjrm@dif.um.es>
  *          Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/model/olsr-routing-protocol.cc ns-3.43/src/olsr/model/olsr-routing-protocol.cc
--- ns-3.42/src/olsr/model/olsr-routing-protocol.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/model/olsr-routing-protocol.cc	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Francisco J. Ros  <fjrm@dif.um.es>
  *          Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/model/olsr-routing-protocol.h ns-3.43/src/olsr/model/olsr-routing-protocol.h
--- ns-3.42/src/olsr/model/olsr-routing-protocol.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/model/olsr-routing-protocol.h	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Francisco J. Ros  <fjrm@dif.um.es>
  *          Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/model/olsr-state.cc ns-3.43/src/olsr/model/olsr-state.cc
--- ns-3.42/src/olsr/model/olsr-state.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/model/olsr-state.cc	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Francisco J. Ros  <fjrm@dif.um.es>
  *          Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/model/olsr-state.h ns-3.43/src/olsr/model/olsr-state.h
--- ns-3.42/src/olsr/model/olsr-state.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/model/olsr-state.h	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Francisco J. Ros  <fjrm@dif.um.es>
  *          Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/test/bug780-test.cc ns-3.43/src/olsr/test/bug780-test.cc
--- ns-3.42/src/olsr/test/bug780-test.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/test/bug780-test.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,17 +1,5 @@
-/* This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
- * USA
- *
+/*
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // OLSR was observed to not converge in simple 3-nodes varying topology.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/test/bug780-test.h ns-3.43/src/olsr/test/bug780-test.h
--- ns-3.42/src/olsr/test/bug780-test.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/test/bug780-test.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/test/hello-regression-test.cc ns-3.43/src/olsr/test/hello-regression-test.cc
--- ns-3.42/src/olsr/test/hello-regression-test.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/test/hello-regression-test.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/test/hello-regression-test.h ns-3.43/src/olsr/test/hello-regression-test.h
--- ns-3.42/src/olsr/test/hello-regression-test.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/test/hello-regression-test.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/test/olsr-header-test-suite.cc ns-3.43/src/olsr/test/olsr-header-test-suite.cc
--- ns-3.42/src/olsr/test/olsr-header-test-suite.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/test/olsr-header-test-suite.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/test/olsr-routing-protocol-test-suite.cc ns-3.43/src/olsr/test/olsr-routing-protocol-test-suite.cc
--- ns-3.42/src/olsr/test/olsr-routing-protocol-test-suite.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/test/olsr-routing-protocol-test-suite.cc	2024-10-09 16:41:10.076656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2004 Francisco J. Ros
  * Copyright (c) 2007 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Francisco J. Ros  <fjrm@dif.um.es>
  *          Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/test/regression-test-suite.cc ns-3.43/src/olsr/test/regression-test-suite.cc
--- ns-3.42/src/olsr/test/regression-test-suite.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/test/regression-test-suite.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/test/tc-regression-test.cc ns-3.43/src/olsr/test/tc-regression-test.cc
--- ns-3.42/src/olsr/test/tc-regression-test.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/test/tc-regression-test.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/olsr/test/tc-regression-test.h ns-3.43/src/olsr/test/tc-regression-test.h
--- ns-3.42/src/olsr/test/tc-regression-test.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/olsr/test/tc-regression-test.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  */
@@ -40,59 +29,45 @@
  * It is expected that only second station will send TC messages.
  *
  * Expected trace (20 seconds, note random b-cast jitter):
-   \verbatim
-         1       2       3
-         |<------|------>|              HELLO (empty) src = 10.1.1.2
-         |       |<------|------>       HELLO (empty) src = 10.1.1.3
-  <------|------>|       |              HELLO (empty) src = 10.1.1.1
-  <------|------>|       |              HELLO (Link Type: Asymmetric, Neighbor: 10.1.1.2) src
- = 10.1.1.1 |       |<------|------>       HELLO (Link Type: Asymmetric, Neighbor: 10.1.1.2) src
- = 10.1.1.3
-         |<------|------>|              HELLO (Link Type: Asymmetric, Neighbor: 10.1.1.3; Link Type:
- Asymmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
-         |<------|------>|              HELLO (Link Type: Asymmetric, Neighbor: 10.1.1.3; Link Type:
- Asymmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
-  <------|------>|       |              HELLO (Link Type: Symmetric, Neighbor: 10.1.1.2) src
- = 10.1.1.1 |       |<------|------>       HELLO (Link Type: Symmetric, Neighbor: 10.1.1.2) src
- = 10.1.1.3
-         |<------|------>|              HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type:
- Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
-  <------|------>|       |              HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.1 |       |<------|------>       HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.3
-         |<------|------>|              HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type:
- Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
-  <------|------>|       |              HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.1 |       |<------|------>       HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.3
-         |<======|======>|              TC (10.1.1.3; 10.1.1.1) + HELLO (Link Type: Symmetric,
- Neighbor: 10.1.1.3; Link Type: Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2 | |<------|------>
- HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.3
-  <------|------>|       |              HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.1
-         |<------|------>|              HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type:
- Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
-  <------|------>|       |              HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.1 |       |<------|------>       HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.3
-  <------|------>|       |              HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.1 |       |<------|------>       HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.3
-         |<------|------>|              HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type:
- Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
-         |<======|======>|              TC (10.1.1.3; 10.1.1.1) src = 10.1.1.2
-         |       |<------|------>       HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.3
-  <------|------>|       |              HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.1
-         |<------|------>|              HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type:
- Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
-  <------|------>|       |              HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.1 |       |<------|------>       HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src
- = 10.1.1.3
-         |<------|------>|              HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type:
- Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2 \endverbatim
  */
+// clang-format off
+/**
+ * \verbatim
+          1       2       3
+          |<------|------>|         HELLO (empty) src = 10.1.1.2
+          |       |<------|------>  HELLO (empty) src = 10.1.1.3
+   <------|------>|       |         HELLO (empty) src = 10.1.1.1
+   <------|------>|       |         HELLO (Link Type: Asymmetric, Neighbor: 10.1.1.2) src = 10.1.1.1
+          |       |<------|------>  HELLO (Link Type: Asymmetric, Neighbor: 10.1.1.2) src = 10.1.1.3
+          |<------|------>|         HELLO (Link Type: Asymmetric, Neighbor: 10.1.1.3; Link Type: Asymmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
+          |<------|------>|         HELLO (Link Type: Asymmetric, Neighbor: 10.1.1.3; Link Type: Asymmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
+   <------|------>|       |         HELLO (Link Type: Symmetric, Neighbor: 10.1.1.2) src = 10.1.1.1
+          |       |<------|------>  HELLO (Link Type: Symmetric, Neighbor: 10.1.1.2) src = 10.1.1.3
+          |<------|------>|         HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type: Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
+   <------|------>|       |         HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.1
+          |       |<------|------>  HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.3
+          |<------|------>|         HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type: Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
+   <------|------>|       |         HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.1
+          |       |<------|------>  HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.3
+          |<======|======>|         TC (10.1.1.3; 10.1.1.1) + HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type: Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
+          |       |<------|------>  HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.3
+   <------|------>|       |         HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.1
+          |<------|------>|         HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type: Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
+   <------|------>|       |         HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.1
+          |       |<------|------>  HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.3
+   <------|------>|       |         HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.1
+          |       |<------|------>  HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.3
+          |<------|------>|         HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type: Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
+          |<======|======>|         TC (10.1.1.3; 10.1.1.1) src = 10.1.1.2
+          |       |<------|------>  HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.3
+   <------|------>|       |         HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.1
+          |<------|------>|         HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type: Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
+   <------|------>|       |         HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.1
+          |       |<------|------>  HELLO (Link Type: MPR Link, Neighbor: 10.1.1.2) src = 10.1.1.3
+          |<------|------>|         HELLO (Link Type: Symmetric, Neighbor: 10.1.1.3; Link Type: Symmetric, Neighbor: 10.1.1.1) src = 10.1.1.2
+   \endverbatim
+ */
+// clang-format on
 class TcRegressionTest : public TestCase
 {
   public:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/openflow/examples/openflow-switch.cc ns-3.43/src/openflow/examples/openflow-switch.cc
--- ns-3.42/src/openflow/examples/openflow-switch.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/openflow/examples/openflow-switch.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,17 +1,6 @@
 /*
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Blake Hurd <naimorai@gmail.com>
  * Modified by: Josh Pelkey <joshpelkey@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/openflow/examples/openflow-switch.py ns-3.43/src/openflow/examples/openflow-switch.py
--- ns-3.42/src/openflow/examples/openflow-switch.py	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/openflow/examples/openflow-switch.py	2024-10-09 16:41:10.076656600 -0700
@@ -1,17 +1,6 @@
 #
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Blake Hurd <naimorai@gmail.com>
 # Modified by: Josh Pelkey <joshpelkey@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/openflow/helper/openflow-switch-helper.cc ns-3.43/src/openflow/helper/openflow-switch-helper.cc
--- ns-3.42/src/openflow/helper/openflow-switch-helper.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/openflow/helper/openflow-switch-helper.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Blake Hurd
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Blake Hurd  <naimorai@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/openflow/helper/openflow-switch-helper.h ns-3.43/src/openflow/helper/openflow-switch-helper.h
--- ns-3.42/src/openflow/helper/openflow-switch-helper.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/openflow/helper/openflow-switch-helper.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Blake Hurd
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Blake Hurd  <naimorai@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/openflow/model/openflow-interface.cc ns-3.43/src/openflow/model/openflow-interface.cc
--- ns-3.42/src/openflow/model/openflow-interface.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/openflow/model/openflow-interface.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Blake Hurd  <naimorai@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/openflow/model/openflow-interface.h ns-3.43/src/openflow/model/openflow-interface.h
--- ns-3.42/src/openflow/model/openflow-interface.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/openflow/model/openflow-interface.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Blake Hurd  <naimorai@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/openflow/model/openflow-switch-net-device.cc ns-3.43/src/openflow/model/openflow-switch-net-device.cc
--- ns-3.42/src/openflow/model/openflow-switch-net-device.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/openflow/model/openflow-switch-net-device.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Blake Hurd  <naimorai@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/openflow/model/openflow-switch-net-device.h ns-3.43/src/openflow/model/openflow-switch-net-device.h
--- ns-3.42/src/openflow/model/openflow-switch-net-device.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/openflow/model/openflow-switch-net-device.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Blake Hurd  <naimorai@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/openflow/test/openflow-switch-test-suite.cc ns-3.43/src/openflow/test/openflow-switch-test-suite.cc
--- ns-3.42/src/openflow/test/openflow-switch-test-suite.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/openflow/test/openflow-switch-test-suite.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,19 +1,7 @@
 /*
  * Copyright (c) 2011 Blake Hurd
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
- * 02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Blake Hurd  <naimorai@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/examples/main-attribute-value.cc ns-3.43/src/point-to-point/examples/main-attribute-value.cc
--- ns-3.42/src/point-to-point/examples/main-attribute-value.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point/examples/main-attribute-value.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Henderson <tomh@tomh.org>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/helper/point-to-point-helper.cc ns-3.43/src/point-to-point/helper/point-to-point-helper.cc
--- ns-3.42/src/point-to-point/helper/point-to-point-helper.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point/helper/point-to-point-helper.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/helper/point-to-point-helper.h ns-3.43/src/point-to-point/helper/point-to-point-helper.h
--- ns-3.42/src/point-to-point/helper/point-to-point-helper.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point/helper/point-to-point-helper.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/model/point-to-point-channel.cc ns-3.43/src/point-to-point/model/point-to-point-channel.cc
--- ns-3.42/src/point-to-point/model/point-to-point-channel.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point/model/point-to-point-channel.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007, 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "point-to-point-channel.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/model/point-to-point-channel.h ns-3.43/src/point-to-point/model/point-to-point-channel.h
--- ns-3.42/src/point-to-point/model/point-to-point-channel.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point/model/point-to-point-channel.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef POINT_TO_POINT_CHANNEL_H
@@ -141,6 +130,7 @@
      * \deprecated The non-const \c Ptr<NetDevice> argument is deprecated
      * and will be changed to \c Ptr<const NetDevice> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*TxRxAnimationCallback)(Ptr<const Packet> packet,
                                           Ptr<NetDevice> txDevice,
                                           Ptr<NetDevice> rxDevice,
@@ -165,6 +155,7 @@
      * \deprecated The non-const \c Ptr<NetDevice> argument is deprecated
      * and will be changed to \c Ptr<const NetDevice> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<const Packet>, // Packet being transmitted
                    Ptr<NetDevice>,    // Transmitting NetDevice
                    Ptr<NetDevice>,    // Receiving NetDevice
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/model/point-to-point-net-device.cc ns-3.43/src/point-to-point/model/point-to-point-net-device.cc
--- ns-3.42/src/point-to-point/model/point-to-point-net-device.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/point-to-point/model/point-to-point-net-device.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007, 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "point-to-point-net-device.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/model/point-to-point-net-device.h ns-3.43/src/point-to-point/model/point-to-point-net-device.h
--- ns-3.42/src/point-to-point/model/point-to-point-net-device.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/point-to-point/model/point-to-point-net-device.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007, 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef POINT_TO_POINT_NET_DEVICE_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/model/point-to-point-remote-channel.cc ns-3.43/src/point-to-point/model/point-to-point-remote-channel.cc
--- ns-3.42/src/point-to-point/model/point-to-point-remote-channel.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/point-to-point/model/point-to-point-remote-channel.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007, 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George Riley <riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/model/point-to-point-remote-channel.h ns-3.43/src/point-to-point/model/point-to-point-remote-channel.h
--- ns-3.42/src/point-to-point/model/point-to-point-remote-channel.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/point-to-point/model/point-to-point-remote-channel.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George Riley <riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/model/ppp-header.cc ns-3.43/src/point-to-point/model/ppp-header.cc
--- ns-3.42/src/point-to-point/model/ppp-header.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/point-to-point/model/ppp-header.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ppp-header.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/model/ppp-header.h ns-3.43/src/point-to-point/model/ppp-header.h
--- ns-3.42/src/point-to-point/model/ppp-header.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/point-to-point/model/ppp-header.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef PPP_HEADER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point/test/point-to-point-test.cc ns-3.43/src/point-to-point/test/point-to-point-test.cc
--- ns-3.42/src/point-to-point/test/point-to-point-test.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/point-to-point/test/point-to-point-test.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point-layout/model/point-to-point-dumbbell.cc ns-3.43/src/point-to-point-layout/model/point-to-point-dumbbell.cc
--- ns-3.42/src/point-to-point-layout/model/point-to-point-dumbbell.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point-layout/model/point-to-point-dumbbell.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point-layout/model/point-to-point-dumbbell.h ns-3.43/src/point-to-point-layout/model/point-to-point-dumbbell.h
--- ns-3.42/src/point-to-point-layout/model/point-to-point-dumbbell.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point-layout/model/point-to-point-dumbbell.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: George F. Riley<riley@ece.gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point-layout/model/point-to-point-grid.cc ns-3.43/src/point-to-point-layout/model/point-to-point-grid.cc
--- ns-3.42/src/point-to-point-layout/model/point-to-point-grid.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point-layout/model/point-to-point-grid.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Josh Pelkey <jpelkey@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point-layout/model/point-to-point-grid.h ns-3.43/src/point-to-point-layout/model/point-to-point-grid.h
--- ns-3.42/src/point-to-point-layout/model/point-to-point-grid.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point-layout/model/point-to-point-grid.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Josh Pelkey <jpelkey@gatech.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point-layout/model/point-to-point-star.cc ns-3.43/src/point-to-point-layout/model/point-to-point-star.cc
--- ns-3.42/src/point-to-point-layout/model/point-to-point-star.cc	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point-layout/model/point-to-point-star.cc	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Implement an object to create a star topology.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/point-to-point-layout/model/point-to-point-star.h ns-3.43/src/point-to-point-layout/model/point-to-point-star.h
--- ns-3.42/src/point-to-point-layout/model/point-to-point-star.h	2024-05-29 15:29:47.156073600 -0700
+++ ns-3.43/src/point-to-point-layout/model/point-to-point-star.h	2024-10-09 16:41:10.076656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Define an object to create a star topology.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/examples/jakes-propagation-model-example.cc ns-3.43/src/propagation/examples/jakes-propagation-model-example.cc
--- ns-3.42/src/propagation/examples/jakes-propagation-model-example.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/examples/jakes-propagation-model-example.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Telum (www.telum.ru)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@telum.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/examples/main-propagation-loss.cc ns-3.43/src/propagation/examples/main-propagation-loss.cc
--- ns-3.42/src/propagation/examples/main-propagation-loss.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/examples/main-propagation-loss.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Timo Bingmann
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Timo Bingmann <timo.bingmann@student.kit.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/channel-condition-model.cc ns-3.43/src/propagation/model/channel-condition-model.cc
--- ns-3.42/src/propagation/model/channel-condition-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/channel-condition-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "channel-condition-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/channel-condition-model.h ns-3.43/src/propagation/model/channel-condition-model.h
--- ns-3.42/src/propagation/model/channel-condition-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/channel-condition-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef CHANNEL_CONDITION_MODEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/cost231-propagation-loss-model.cc ns-3.43/src/propagation/model/cost231-propagation-loss-model.cc
--- ns-3.42/src/propagation/model/cost231-propagation-loss-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/cost231-propagation-loss-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/cost231-propagation-loss-model.h ns-3.43/src/propagation/model/cost231-propagation-loss-model.h
--- ns-3.42/src/propagation/model/cost231-propagation-loss-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/cost231-propagation-loss-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc ns-3.43/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc
--- ns-3.42/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/itu-r-1411-los-propagation-loss-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/itu-r-1411-los-propagation-loss-model.h ns-3.43/src/propagation/model/itu-r-1411-los-propagation-loss-model.h
--- ns-3.42/src/propagation/model/itu-r-1411-los-propagation-loss-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/itu-r-1411-los-propagation-loss-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc ns-3.43/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc
--- ns-3.42/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h ns-3.43/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h
--- ns-3.42/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/itu-r-1411-nlos-over-rooftop-propagation-loss-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/jakes-process.cc ns-3.43/src/propagation/model/jakes-process.cc
--- ns-3.42/src/propagation/model/jakes-process.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/jakes-process.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Telum (www.telum.ru)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@telum.ru>, Alexander Sofronov <sofronov@telum.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/jakes-process.h ns-3.43/src/propagation/model/jakes-process.h
--- ns-3.42/src/propagation/model/jakes-process.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/jakes-process.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Telum (www.telum.ru)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@telum.ru>, Alexander Sofronov <sofronov@telum.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/jakes-propagation-loss-model.cc ns-3.43/src/propagation/model/jakes-propagation-loss-model.cc
--- ns-3.42/src/propagation/model/jakes-propagation-loss-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/jakes-propagation-loss-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Telum (www.telum.ru)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@telum.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/jakes-propagation-loss-model.h ns-3.43/src/propagation/model/jakes-propagation-loss-model.h
--- ns-3.42/src/propagation/model/jakes-propagation-loss-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/jakes-propagation-loss-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Telum (www.telum.ru)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@telum.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc ns-3.43/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc
--- ns-3.42/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/kun-2600-mhz-propagation-loss-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/kun-2600-mhz-propagation-loss-model.h ns-3.43/src/propagation/model/kun-2600-mhz-propagation-loss-model.h
--- ns-3.42/src/propagation/model/kun-2600-mhz-propagation-loss-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/kun-2600-mhz-propagation-loss-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/okumura-hata-propagation-loss-model.cc ns-3.43/src/propagation/model/okumura-hata-propagation-loss-model.cc
--- ns-3.42/src/propagation/model/okumura-hata-propagation-loss-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/okumura-hata-propagation-loss-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>,
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/okumura-hata-propagation-loss-model.h ns-3.43/src/propagation/model/okumura-hata-propagation-loss-model.h
--- ns-3.42/src/propagation/model/okumura-hata-propagation-loss-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/okumura-hata-propagation-loss-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/probabilistic-v2v-channel-condition-model.cc ns-3.43/src/propagation/model/probabilistic-v2v-channel-condition-model.cc
--- ns-3.42/src/propagation/model/probabilistic-v2v-channel-condition-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/probabilistic-v2v-channel-condition-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2020 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "probabilistic-v2v-channel-condition-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/probabilistic-v2v-channel-condition-model.h ns-3.43/src/propagation/model/probabilistic-v2v-channel-condition-model.h
--- ns-3.42/src/propagation/model/probabilistic-v2v-channel-condition-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/probabilistic-v2v-channel-condition-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2020 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef PROBABILISTIC_V2V_CHANNEL_CONDITION_MODEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/propagation-cache.h ns-3.43/src/propagation/model/propagation-cache.h
--- ns-3.42/src/propagation/model/propagation-cache.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/propagation-cache.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Telum (www.telum.ru)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Kirill Andreev <andreev@telum.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/propagation-delay-model.cc ns-3.43/src/propagation/model/propagation-delay-model.cc
--- ns-3.42/src/propagation/model/propagation-delay-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/propagation-delay-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/propagation-delay-model.h ns-3.43/src/propagation/model/propagation-delay-model.h
--- ns-3.42/src/propagation/model/propagation-delay-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/propagation-delay-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/propagation-environment.h ns-3.43/src/propagation/model/propagation-environment.h
--- ns-3.42/src/propagation/model/propagation-environment.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/propagation-environment.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011, 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo  <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/propagation-loss-model.cc ns-3.43/src/propagation/model/propagation-loss-model.cc
--- ns-3.42/src/propagation/model/propagation-loss-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/propagation-loss-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Contributions: Timo Bingmann <timo.bingmann@student.kit.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/propagation-loss-model.h ns-3.43/src/propagation/model/propagation-loss-model.h
--- ns-3.42/src/propagation/model/propagation-loss-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/propagation-loss-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Contributions: Timo Bingmann <timo.bingmann@student.kit.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/three-gpp-propagation-loss-model.cc ns-3.43/src/propagation/model/three-gpp-propagation-loss-model.cc
--- ns-3.42/src/propagation/model/three-gpp-propagation-loss-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/three-gpp-propagation-loss-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "three-gpp-propagation-loss-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/three-gpp-propagation-loss-model.h ns-3.43/src/propagation/model/three-gpp-propagation-loss-model.h
--- ns-3.42/src/propagation/model/three-gpp-propagation-loss-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/three-gpp-propagation-loss-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef THREE_GPP_PROPAGATION_LOSS_MODEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/three-gpp-v2v-propagation-loss-model.cc ns-3.43/src/propagation/model/three-gpp-v2v-propagation-loss-model.cc
--- ns-3.42/src/propagation/model/three-gpp-v2v-propagation-loss-model.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/three-gpp-v2v-propagation-loss-model.cc	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2020 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "three-gpp-v2v-propagation-loss-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/model/three-gpp-v2v-propagation-loss-model.h ns-3.43/src/propagation/model/three-gpp-v2v-propagation-loss-model.h
--- ns-3.42/src/propagation/model/three-gpp-v2v-propagation-loss-model.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/model/three-gpp-v2v-propagation-loss-model.h	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2020 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef THREE_GPP_V2V_PROPAGATION_LOSS_MODEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/test/channel-condition-model-test-suite.cc ns-3.43/src/propagation/test/channel-condition-model-test-suite.cc
--- ns-3.42/src/propagation/test/channel-condition-model-test-suite.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/test/channel-condition-model-test-suite.cc	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
@@ -86,7 +75,7 @@
 ThreeGppChannelConditionModelTestCase::ThreeGppChannelConditionModelTestCase()
     : TestCase("Test case for the child classes of ThreeGppChannelConditionModel"),
       m_testVectors(),
-      m_tolerance(2e-3)
+      m_tolerance(2.5e-3)
 {
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/test/itu-r-1411-los-test-suite.cc ns-3.43/src/propagation/test/itu-r-1411-los-test-suite.cc
--- ns-3.42/src/propagation/test/itu-r-1411-los-test-suite.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/test/itu-r-1411-los-test-suite.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc ns-3.43/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc
--- ns-3.42/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/test/itu-r-1411-nlos-over-rooftop-test-suite.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/test/kun-2600-mhz-test-suite.cc ns-3.43/src/propagation/test/kun-2600-mhz-test-suite.cc
--- ns-3.42/src/propagation/test/kun-2600-mhz-test-suite.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/test/kun-2600-mhz-test-suite.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/test/okumura-hata-test-suite.cc ns-3.43/src/propagation/test/okumura-hata-test-suite.cc
--- ns-3.42/src/propagation/test/okumura-hata-test-suite.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/test/okumura-hata-test-suite.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011,2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marco Miozzo <marco.miozzo@cttc.es>
  *         Nicola Baldo <nbaldo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/test/probabilistic-v2v-channel-condition-model-test.cc ns-3.43/src/propagation/test/probabilistic-v2v-channel-condition-model-test.cc
--- ns-3.42/src/propagation/test/probabilistic-v2v-channel-condition-model-test.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/test/probabilistic-v2v-channel-condition-model-test.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/test/propagation-loss-model-test-suite.cc ns-3.43/src/propagation/test/propagation-loss-model-test-suite.cc
--- ns-3.42/src/propagation/test/propagation-loss-model-test-suite.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/test/propagation-loss-model-test-suite.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/test/three-gpp-ntn-propagation-loss-model-test-suite.cc ns-3.43/src/propagation/test/three-gpp-ntn-propagation-loss-model-test-suite.cc
--- ns-3.42/src/propagation/test/three-gpp-ntn-propagation-loss-model-test-suite.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/test/three-gpp-ntn-propagation-loss-model-test-suite.cc	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2023 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/propagation/test/three-gpp-propagation-loss-model-test-suite.cc ns-3.43/src/propagation/test/three-gpp-propagation-loss-model-test-suite.cc
--- ns-3.42/src/propagation/test/three-gpp-propagation-loss-model-test-suite.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/propagation/test/three-gpp-propagation-loss-model-test-suite.cc	2024-10-09 16:41:10.080656500 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/examples/example-ping-lr-wpan-beacon.cc ns-3.43/src/sixlowpan/examples/example-ping-lr-wpan-beacon.cc
--- ns-3.42/src/sixlowpan/examples/example-ping-lr-wpan-beacon.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/examples/example-ping-lr-wpan-beacon.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Ritsumeikan University, Shiga, Japan
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alberto Gallegos Ramonet <ramonet@fc.ritsumei.ac.jp>
  */
@@ -83,6 +72,8 @@
     mobility.Install(nodes);
 
     LrWpanHelper lrWpanHelper;
+    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
     // Add and install the LrWpanNetDevice for each node
     NetDeviceContainer lrwpanDevices = lrWpanHelper.Install(nodes);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/examples/example-ping-lr-wpan.cc ns-3.43/src/sixlowpan/examples/example-ping-lr-wpan.cc
--- ns-3.42/src/sixlowpan/examples/example-ping-lr-wpan.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/examples/example-ping-lr-wpan.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
@@ -78,6 +67,8 @@
     mobility.Install(nodes);
 
     LrWpanHelper lrWpanHelper;
+    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
     // Add and install the LrWpanNetDevice for each node
     NetDeviceContainer lrwpanDevices = lrWpanHelper.Install(nodes);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/examples/example-ping-lr-wpan-mesh-under.cc ns-3.43/src/sixlowpan/examples/example-ping-lr-wpan-mesh-under.cc
--- ns-3.42/src/sixlowpan/examples/example-ping-lr-wpan-mesh-under.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/examples/example-ping-lr-wpan-mesh-under.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
@@ -78,6 +67,8 @@
     mobility.Install(wsnNodes);
 
     LrWpanHelper lrWpanHelper;
+    lrWpanHelper.SetPropagationDelayModel("ns3::ConstantSpeedPropagationDelayModel");
+    lrWpanHelper.AddPropagationLossModel("ns3::LogDistancePropagationLossModel");
     // Add and install the LrWpanNetDevice for each node
     NetDeviceContainer lrwpanDevices = lrWpanHelper.Install(wsnNodes);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/examples/example-sixlowpan.cc ns-3.43/src/sixlowpan/examples/example-sixlowpan.cc
--- ns-3.42/src/sixlowpan/examples/example-sixlowpan.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/examples/example-sixlowpan.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/helper/sixlowpan-helper.cc ns-3.43/src/sixlowpan/helper/sixlowpan-helper.cc
--- ns-3.42/src/sixlowpan/helper/sixlowpan-helper.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/helper/sixlowpan-helper.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/helper/sixlowpan-helper.h ns-3.43/src/sixlowpan/helper/sixlowpan-helper.h
--- ns-3.42/src/sixlowpan/helper/sixlowpan-helper.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/helper/sixlowpan-helper.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/model/sixlowpan-header.cc ns-3.43/src/sixlowpan/model/sixlowpan-header.cc
--- ns-3.42/src/sixlowpan/model/sixlowpan-header.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/model/sixlowpan-header.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  *         Michele Muccio <michelemuccio@virgilio.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/model/sixlowpan-header.h ns-3.43/src/sixlowpan/model/sixlowpan-header.h
--- ns-3.42/src/sixlowpan/model/sixlowpan-header.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/model/sixlowpan-header.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  *         Michele Muccio <michelemuccio@virgilio.it>
@@ -46,8 +35,8 @@
 {
   public:
     /**
-     *  \brief Dispatch values, as defined in \RFC{4944} and \RFC{6282}
-    \verbatim
+     * \brief Dispatch values, as defined in \RFC{4944} and \RFC{6282}
+     \verbatim
        Pattern    Header Type
      +------------+------------------------------------------------+
      | 00  xxxxxx | NALP        - Not a LoWPAN frame               |
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/model/sixlowpan-net-device.cc ns-3.43/src/sixlowpan/model/sixlowpan-net-device.cc
--- ns-3.42/src/sixlowpan/model/sixlowpan-net-device.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/model/sixlowpan-net-device.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  *         Michele Muccio <michelemuccio@virgilio.it>
@@ -149,7 +138,7 @@
     NS_LOG_DEBUG("RegisterProtocolHandler for " << device->GetInstanceTypeId().GetName());
 
     uint16_t protocolType = PROT_NUMBER;
-    if (device->GetInstanceTypeId().GetName() == "ns3::LrWpanNetDevice")
+    if (device->GetInstanceTypeId().GetName().find("LrWpanNetDevice") != std::string::npos)
     {
         // LrWpanNetDevice does not have a protocol number in the frame.
         // Hence, we must register for any protocol, and assume that any
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/model/sixlowpan-net-device.h ns-3.43/src/sixlowpan/model/sixlowpan-net-device.h
--- ns-3.42/src/sixlowpan/model/sixlowpan-net-device.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/model/sixlowpan-net-device.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  *         Michele Muccio <michelemuccio@virgilio.it>
@@ -178,6 +167,7 @@
      * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
      * in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*RxTxTracedCallback)(Ptr<const Packet> packet,
                                        Ptr<SixLowPanNetDevice> sixNetDevice,
                                        uint32_t ifindex);
@@ -193,6 +183,7 @@
      * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
      * in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*DropTracedCallback)(DropReason reason,
                                        Ptr<const Packet> packet,
                                        Ptr<SixLowPanNetDevice> sixNetDevice,
@@ -320,6 +311,7 @@
      * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
      * in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_txTrace;
 
     /**
@@ -333,6 +325,7 @@
      * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
      * in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_rxTrace;
 
     /**
@@ -347,6 +340,7 @@
      * is deprecated and will be changed to \c Ptr<const SixLowPanNetDevice>
      * in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<DropReason, Ptr<const Packet>, Ptr<SixLowPanNetDevice>, uint32_t> m_dropTrace;
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/test/mock-net-device.cc ns-3.43/src/sixlowpan/test/mock-net-device.cc
--- ns-3.42/src/sixlowpan/test/mock-net-device.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/test/mock-net-device.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/test/mock-net-device.h ns-3.43/src/sixlowpan/test/mock-net-device.h
--- ns-3.42/src/sixlowpan/test/mock-net-device.h	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/test/mock-net-device.h	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/test/sixlowpan-fragmentation-test.cc ns-3.43/src/sixlowpan/test/sixlowpan-fragmentation-test.cc
--- ns-3.42/src/sixlowpan/test/sixlowpan-fragmentation-test.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/test/sixlowpan-fragmentation-test.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/test/sixlowpan-hc1-test.cc ns-3.43/src/sixlowpan/test/sixlowpan-hc1-test.cc
--- ns-3.42/src/sixlowpan/test/sixlowpan-hc1-test.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/test/sixlowpan-hc1-test.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/test/sixlowpan-iphc-stateful-test.cc ns-3.43/src/sixlowpan/test/sixlowpan-iphc-stateful-test.cc
--- ns-3.42/src/sixlowpan/test/sixlowpan-iphc-stateful-test.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/test/sixlowpan-iphc-stateful-test.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/sixlowpan/test/sixlowpan-iphc-test.cc ns-3.43/src/sixlowpan/test/sixlowpan-iphc-test.cc
--- ns-3.42/src/sixlowpan/test/sixlowpan-iphc-test.cc	2024-05-29 15:29:47.160073800 -0700
+++ ns-3.43/src/sixlowpan/test/sixlowpan-iphc-test.cc	2024-10-09 16:41:10.080656500 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/examples/adhoc-aloha-ideal-phy.cc ns-3.43/src/spectrum/examples/adhoc-aloha-ideal-phy.cc
--- ns-3.42/src/spectrum/examples/adhoc-aloha-ideal-phy.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/examples/adhoc-aloha-ideal-phy.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc ns-3.43/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc
--- ns-3.42/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/examples/adhoc-aloha-ideal-phy-matrix-propagation-loss-model.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/examples/adhoc-aloha-ideal-phy-with-microwave-oven.cc ns-3.43/src/spectrum/examples/adhoc-aloha-ideal-phy-with-microwave-oven.cc
--- ns-3.42/src/spectrum/examples/adhoc-aloha-ideal-phy-with-microwave-oven.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/examples/adhoc-aloha-ideal-phy-with-microwave-oven.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/examples/three-gpp-channel-example.cc ns-3.43/src/spectrum/examples/three-gpp-channel-example.cc
--- ns-3.42/src/spectrum/examples/three-gpp-channel-example.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/examples/three-gpp-channel-example.cc	2024-10-09 16:41:10.088656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/examples/three-gpp-ntn-channel-example.cc ns-3.43/src/spectrum/examples/three-gpp-ntn-channel-example.cc
--- ns-3.42/src/spectrum/examples/three-gpp-ntn-channel-example.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/examples/three-gpp-ntn-channel-example.cc	2024-10-09 16:41:10.088656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2023 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 /**
@@ -58,7 +47,8 @@
 static Ptr<ThreeGppPropagationLossModel>
     m_propagationLossModel; //!< the PropagationLossModel object
 static Ptr<ThreeGppSpectrumPropagationLossModel>
-    m_spectrumLossModel; //!< the SpectrumPropagationLossModel object
+    m_spectrumLossModel;          //!< the SpectrumPropagationLossModel object
+static std::ofstream resultsFile; //!< The results file
 
 /**
  * @brief Create the PSD for the TX
@@ -298,12 +288,10 @@
     // compute the SNR
     NS_LOG_DEBUG("Average SNR " << 10 * log10(Sum(*rxSsp->psd) / Sum(*noisePsd)) << " dB");
 
-    // print the SNR and pathloss values in the ntn-snr-trace.txt file
-    std::ofstream f;
-    f.open("ntn-snr-trace.txt", std::ios::out | std::ios::app);
-    f << Simulator::Now().GetSeconds() << " " << 10 * log10(Sum(*rxSsp->psd) / Sum(*noisePsd))
-      << " " << propagationGainDb << std::endl;
-    f.close();
+    // print the SNR and pathloss values in the output file
+    resultsFile << Simulator::Now().GetSeconds() << " "
+                << 10 * log10(Sum(*rxSsp->psd) / Sum(*noisePsd)) << " " << propagationGainDb
+                << std::endl;
 }
 
 int
@@ -482,6 +470,10 @@
     DoBeamforming(rxDev, rxAntenna, txDev);
     DoBeamforming(txDev, txAntenna, rxDev);
 
+    // Open the output results file
+    resultsFile.open("ntn-snr-trace.txt", std::ios::out);
+    NS_ASSERT_MSG(resultsFile.is_open(), "Results file could not be created");
+
     for (int i = 0; i < floor(simTimeMs / timeResMs); i++)
     {
         Simulator::Schedule(MilliSeconds(timeResMs * i),
@@ -499,5 +491,8 @@
 
     Simulator::Run();
     Simulator::Destroy();
+
+    resultsFile.close();
+
     return 0;
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/examples/three-gpp-two-ray-channel-calibration.cc ns-3.43/src/spectrum/examples/three-gpp-two-ray-channel-calibration.cc
--- ns-3.42/src/spectrum/examples/three-gpp-two-ray-channel-calibration.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/examples/three-gpp-two-ray-channel-calibration.cc	2024-10-09 16:41:10.088656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2022 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/examples/tv-trans-example.cc ns-3.43/src/spectrum/examples/tv-trans-example.cc
--- ns-3.42/src/spectrum/examples/tv-trans-example.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/examples/tv-trans-example.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/examples/tv-trans-regional-example.cc ns-3.43/src/spectrum/examples/tv-trans-regional-example.cc
--- ns-3.42/src/spectrum/examples/tv-trans-regional-example.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/examples/tv-trans-regional-example.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.cc ns-3.43/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.cc
--- ns-3.42/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.h ns-3.43/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.h
--- ns-3.42/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/adhoc-aloha-noack-ideal-phy-helper.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/spectrum-analyzer-helper.cc ns-3.43/src/spectrum/helper/spectrum-analyzer-helper.cc
--- ns-3.42/src/spectrum/helper/spectrum-analyzer-helper.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/spectrum-analyzer-helper.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/spectrum-analyzer-helper.h ns-3.43/src/spectrum/helper/spectrum-analyzer-helper.h
--- ns-3.42/src/spectrum/helper/spectrum-analyzer-helper.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/spectrum-analyzer-helper.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/spectrum-helper.cc ns-3.43/src/spectrum/helper/spectrum-helper.cc
--- ns-3.42/src/spectrum/helper/spectrum-helper.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/spectrum-helper.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/spectrum-helper.h ns-3.43/src/spectrum/helper/spectrum-helper.h
--- ns-3.42/src/spectrum/helper/spectrum-helper.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/spectrum-helper.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/tv-spectrum-transmitter-helper.cc ns-3.43/src/spectrum/helper/tv-spectrum-transmitter-helper.cc
--- ns-3.42/src/spectrum/helper/tv-spectrum-transmitter-helper.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/tv-spectrum-transmitter-helper.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/tv-spectrum-transmitter-helper.h ns-3.43/src/spectrum/helper/tv-spectrum-transmitter-helper.h
--- ns-3.42/src/spectrum/helper/tv-spectrum-transmitter-helper.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/tv-spectrum-transmitter-helper.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/waveform-generator-helper.cc ns-3.43/src/spectrum/helper/waveform-generator-helper.cc
--- ns-3.42/src/spectrum/helper/waveform-generator-helper.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/waveform-generator-helper.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/helper/waveform-generator-helper.h ns-3.43/src/spectrum/helper/waveform-generator-helper.h
--- ns-3.42/src/spectrum/helper/waveform-generator-helper.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/helper/waveform-generator-helper.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/aloha-noack-mac-header.cc ns-3.43/src/spectrum/model/aloha-noack-mac-header.cc
--- ns-3.42/src/spectrum/model/aloha-noack-mac-header.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/aloha-noack-mac-header.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/aloha-noack-mac-header.h ns-3.43/src/spectrum/model/aloha-noack-mac-header.h
--- ns-3.42/src/spectrum/model/aloha-noack-mac-header.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/aloha-noack-mac-header.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/aloha-noack-net-device.cc ns-3.43/src/spectrum/model/aloha-noack-net-device.cc
--- ns-3.42/src/spectrum/model/aloha-noack-net-device.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/aloha-noack-net-device.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/aloha-noack-net-device.h ns-3.43/src/spectrum/model/aloha-noack-net-device.h
--- ns-3.42/src/spectrum/model/aloha-noack-net-device.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/aloha-noack-net-device.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/constant-spectrum-propagation-loss.cc ns-3.43/src/spectrum/model/constant-spectrum-propagation-loss.cc
--- ns-3.42/src/spectrum/model/constant-spectrum-propagation-loss.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/constant-spectrum-propagation-loss.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/constant-spectrum-propagation-loss.h ns-3.43/src/spectrum/model/constant-spectrum-propagation-loss.h
--- ns-3.42/src/spectrum/model/constant-spectrum-propagation-loss.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/constant-spectrum-propagation-loss.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Manuel Requena <manuel.requena@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/friis-spectrum-propagation-loss.cc ns-3.43/src/spectrum/model/friis-spectrum-propagation-loss.cc
--- ns-3.42/src/spectrum/model/friis-spectrum-propagation-loss.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/friis-spectrum-propagation-loss.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/friis-spectrum-propagation-loss.h ns-3.43/src/spectrum/model/friis-spectrum-propagation-loss.h
--- ns-3.42/src/spectrum/model/friis-spectrum-propagation-loss.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/friis-spectrum-propagation-loss.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/half-duplex-ideal-phy.cc ns-3.43/src/spectrum/model/half-duplex-ideal-phy.cc
--- ns-3.42/src/spectrum/model/half-duplex-ideal-phy.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/half-duplex-ideal-phy.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/half-duplex-ideal-phy.h ns-3.43/src/spectrum/model/half-duplex-ideal-phy.h
--- ns-3.42/src/spectrum/model/half-duplex-ideal-phy.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/half-duplex-ideal-phy.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.cc ns-3.43/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.cc
--- ns-3.42/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.h ns-3.43/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.h
--- ns-3.42/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/half-duplex-ideal-phy-signal-parameters.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/ism-spectrum-value-helper.cc ns-3.43/src/spectrum/model/ism-spectrum-value-helper.cc
--- ns-3.42/src/spectrum/model/ism-spectrum-value-helper.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/ism-spectrum-value-helper.cc	2024-10-09 16:41:10.088656700 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  * Copyright (c) 2017 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Giuseppe Piro <g.piro@poliba.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/ism-spectrum-value-helper.h ns-3.43/src/spectrum/model/ism-spectrum-value-helper.h
--- ns-3.42/src/spectrum/model/ism-spectrum-value-helper.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/ism-spectrum-value-helper.h	2024-10-09 16:41:10.088656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 CTTC
  * Copyright (c) 2017 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Giuseppe Piro <g.piro@poliba.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/matrix-based-channel-model.cc ns-3.43/src/spectrum/model/matrix-based-channel-model.cc
--- ns-3.42/src/spectrum/model/matrix-based-channel-model.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/matrix-based-channel-model.cc	2024-10-09 16:41:10.088656700 -0700
@@ -4,18 +4,7 @@
  * Copyright (c) 2020 Institute for the Wireless Internet of Things,
  * Northeastern University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "matrix-based-channel-model.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/matrix-based-channel-model.h ns-3.43/src/spectrum/model/matrix-based-channel-model.h
--- ns-3.42/src/spectrum/model/matrix-based-channel-model.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/matrix-based-channel-model.h	2024-10-09 16:41:10.088656700 -0700
@@ -4,18 +4,7 @@
  * Copyright (c) 2020 Institute for the Wireless Internet of Things,
  * Northeastern University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef MATRIX_BASED_CHANNEL_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/microwave-oven-spectrum-value-helper.cc ns-3.43/src/spectrum/model/microwave-oven-spectrum-value-helper.cc
--- ns-3.42/src/spectrum/model/microwave-oven-spectrum-value-helper.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/microwave-oven-spectrum-value-helper.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/microwave-oven-spectrum-value-helper.h ns-3.43/src/spectrum/model/microwave-oven-spectrum-value-helper.h
--- ns-3.42/src/spectrum/model/microwave-oven-spectrum-value-helper.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/microwave-oven-spectrum-value-helper.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/multi-model-spectrum-channel.cc ns-3.43/src/spectrum/model/multi-model-spectrum-channel.cc
--- ns-3.42/src/spectrum/model/multi-model-spectrum-channel.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/multi-model-spectrum-channel.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
@@ -307,8 +296,15 @@
                     }
                     if (m_propagationLoss)
                     {
-                        propagationGainDb =
-                            m_propagationLoss->CalcRxPower(0, txMobility, receiverMobility);
+                        if (txMobility->GetPosition() == receiverMobility->GetPosition())
+                        {
+                            propagationGainDb = 0; // Assume no propagation loss when co-located
+                        }
+                        else
+                        {
+                            propagationGainDb =
+                                m_propagationLoss->CalcRxPower(0, txMobility, receiverMobility);
+                        }
                         NS_LOG_LOGIC("propagationGainDb = " << propagationGainDb << " dB");
                         pathLossDb -= propagationGainDb;
                     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/multi-model-spectrum-channel.h ns-3.43/src/spectrum/model/multi-model-spectrum-channel.h
--- ns-3.42/src/spectrum/model/multi-model-spectrum-channel.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/multi-model-spectrum-channel.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/non-communicating-net-device.cc ns-3.43/src/spectrum/model/non-communicating-net-device.cc
--- ns-3.42/src/spectrum/model/non-communicating-net-device.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/non-communicating-net-device.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/non-communicating-net-device.h ns-3.43/src/spectrum/model/non-communicating-net-device.h
--- ns-3.42/src/spectrum/model/non-communicating-net-device.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/non-communicating-net-device.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/phased-array-spectrum-propagation-loss-model.cc ns-3.43/src/spectrum/model/phased-array-spectrum-propagation-loss-model.cc
--- ns-3.42/src/spectrum/model/phased-array-spectrum-propagation-loss-model.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/phased-array-spectrum-propagation-loss-model.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/phased-array-spectrum-propagation-loss-model.h ns-3.43/src/spectrum/model/phased-array-spectrum-propagation-loss-model.h
--- ns-3.42/src/spectrum/model/phased-array-spectrum-propagation-loss-model.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/phased-array-spectrum-propagation-loss-model.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/single-model-spectrum-channel.cc ns-3.43/src/spectrum/model/single-model-spectrum-channel.cc
--- ns-3.42/src/spectrum/model/single-model-spectrum-channel.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/single-model-spectrum-channel.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/single-model-spectrum-channel.h ns-3.43/src/spectrum/model/single-model-spectrum-channel.h
--- ns-3.42/src/spectrum/model/single-model-spectrum-channel.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/single-model-spectrum-channel.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-analyzer.cc ns-3.43/src/spectrum/model/spectrum-analyzer.cc
--- ns-3.42/src/spectrum/model/spectrum-analyzer.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-analyzer.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-analyzer.h ns-3.43/src/spectrum/model/spectrum-analyzer.h
--- ns-3.42/src/spectrum/model/spectrum-analyzer.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-analyzer.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-channel.cc ns-3.43/src/spectrum/model/spectrum-channel.cc
--- ns-3.42/src/spectrum/model/spectrum-channel.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-channel.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-channel.h ns-3.43/src/spectrum/model/spectrum-channel.h
--- ns-3.42/src/spectrum/model/spectrum-channel.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-channel.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-converter.cc ns-3.43/src/spectrum/model/spectrum-converter.cc
--- ns-3.42/src/spectrum/model/spectrum-converter.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-converter.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-converter.h ns-3.43/src/spectrum/model/spectrum-converter.h
--- ns-3.42/src/spectrum/model/spectrum-converter.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-converter.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-error-model.cc ns-3.43/src/spectrum/model/spectrum-error-model.cc
--- ns-3.42/src/spectrum/model/spectrum-error-model.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-error-model.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-error-model.h ns-3.43/src/spectrum/model/spectrum-error-model.h
--- ns-3.42/src/spectrum/model/spectrum-error-model.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-error-model.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-interference.cc ns-3.43/src/spectrum/model/spectrum-interference.cc
--- ns-3.42/src/spectrum/model/spectrum-interference.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-interference.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-interference.h ns-3.43/src/spectrum/model/spectrum-interference.h
--- ns-3.42/src/spectrum/model/spectrum-interference.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-interference.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-model-300kHz-300GHz-log.cc ns-3.43/src/spectrum/model/spectrum-model-300kHz-300GHz-log.cc
--- ns-3.42/src/spectrum/model/spectrum-model-300kHz-300GHz-log.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-model-300kHz-300GHz-log.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-model-300kHz-300GHz-log.h ns-3.43/src/spectrum/model/spectrum-model-300kHz-300GHz-log.h
--- ns-3.42/src/spectrum/model/spectrum-model-300kHz-300GHz-log.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-model-300kHz-300GHz-log.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-model.cc ns-3.43/src/spectrum/model/spectrum-model.cc
--- ns-3.42/src/spectrum/model/spectrum-model.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-model.cc	2024-10-09 16:41:10.088656700 -0700
@@ -2,18 +2,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-model.h ns-3.43/src/spectrum/model/spectrum-model.h
--- ns-3.42/src/spectrum/model/spectrum-model.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-model.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-model-ism2400MHz-res1MHz.cc ns-3.43/src/spectrum/model/spectrum-model-ism2400MHz-res1MHz.cc
--- ns-3.42/src/spectrum/model/spectrum-model-ism2400MHz-res1MHz.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-model-ism2400MHz-res1MHz.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-model-ism2400MHz-res1MHz.h ns-3.43/src/spectrum/model/spectrum-model-ism2400MHz-res1MHz.h
--- ns-3.42/src/spectrum/model/spectrum-model-ism2400MHz-res1MHz.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-model-ism2400MHz-res1MHz.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-phy.cc ns-3.43/src/spectrum/model/spectrum-phy.cc
--- ns-3.42/src/spectrum/model/spectrum-phy.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-phy.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-phy.h ns-3.43/src/spectrum/model/spectrum-phy.h
--- ns-3.42/src/spectrum/model/spectrum-phy.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-phy.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-propagation-loss-model.cc ns-3.43/src/spectrum/model/spectrum-propagation-loss-model.cc
--- ns-3.42/src/spectrum/model/spectrum-propagation-loss-model.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-propagation-loss-model.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-propagation-loss-model.h ns-3.43/src/spectrum/model/spectrum-propagation-loss-model.h
--- ns-3.42/src/spectrum/model/spectrum-propagation-loss-model.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-propagation-loss-model.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-signal-parameters.cc ns-3.43/src/spectrum/model/spectrum-signal-parameters.cc
--- ns-3.42/src/spectrum/model/spectrum-signal-parameters.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-signal-parameters.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-signal-parameters.h ns-3.43/src/spectrum/model/spectrum-signal-parameters.h
--- ns-3.42/src/spectrum/model/spectrum-signal-parameters.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-signal-parameters.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-transmit-filter.cc ns-3.43/src/spectrum/model/spectrum-transmit-filter.cc
--- ns-3.42/src/spectrum/model/spectrum-transmit-filter.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-transmit-filter.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-transmit-filter.h ns-3.43/src/spectrum/model/spectrum-transmit-filter.h
--- ns-3.42/src/spectrum/model/spectrum-transmit-filter.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-transmit-filter.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef SPECTRUM_TRANSMIT_FILTER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-value.cc ns-3.43/src/spectrum/model/spectrum-value.cc
--- ns-3.42/src/spectrum/model/spectrum-value.cc	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-value.cc	2024-10-09 16:41:10.088656700 -0700
@@ -2,18 +2,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/spectrum-value.h ns-3.43/src/spectrum/model/spectrum-value.h
--- ns-3.42/src/spectrum/model/spectrum-value.h	2024-05-29 15:29:47.168073700 -0700
+++ ns-3.43/src/spectrum/model/spectrum-value.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
@@ -569,6 +558,7 @@
      * is deprecated and will be changed to \c Ptr<const SpectrumPhy>
      * in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*TracedCallback)(Ptr<SpectrumValue> value);
 
   private:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/three-gpp-channel-model.cc ns-3.43/src/spectrum/model/three-gpp-channel-model.cc
--- ns-3.42/src/spectrum/model/three-gpp-channel-model.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/three-gpp-channel-model.cc	2024-10-09 16:41:10.088656700 -0700
@@ -4,18 +4,7 @@
  * Copyright (c) 2015, NYU WIRELESS, Tandon School of Engineering,
  * New York University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -33,6 +22,7 @@
 #include <ns3/simulator.h>
 
 #include <algorithm>
+#include <array>
 #include <map>
 #include <random>
 
@@ -48,7 +38,7 @@
 
 /// The ray offset angles within a cluster, given for rms angle spread normalized to 1.
 /// (Table 7.5-3)
-static const double offSetAlpha[20] = {
+static constexpr std::array<double, 20> offSetAlpha = {
     0.0447, -0.0447, 0.1413, -0.1413, 0.2492, -0.2492, 0.3715, -0.3715, 0.5129, -0.5129,
     0.6797, -0.6797, 0.8844, -0.8844, 1.1481, -1.1481, 1.5195, -1.5195, 2.1551, -2.1551,
 };
@@ -61,7 +51,7 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_RMa_LOS[7][7] = {
+static constexpr std::array<std::array<double, 7>, 7> sqrtC_RMa_LOS = {{
     {1, 0, 0, 0, 0, 0, 0},
     {0, 1, 0, 0, 0, 0, 0},
     {-0.5, 0, 0.866025, 0, 0, 0, 0},
@@ -69,7 +59,7 @@
     {0, 0, 0, 0, 1, 0, 0},
     {0.01, 0, -0.0519615, 0.73, -0.2, 0.651383, 0},
     {-0.17, -0.02, 0.21362, -0.14, 0.24, 0.142773, 0.909661},
-};
+}};
 
 /**
  * The square root matrix for <em>RMa NLOS</em>, which is generated using the
@@ -80,14 +70,14 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_RMa_NLOS[6][6] = {
+static constexpr std::array<std::array<double, 6>, 6> sqrtC_RMa_NLOS = {{
     {1, 0, 0, 0, 0, 0},
     {-0.5, 0.866025, 0, 0, 0, 0},
     {0.6, -0.11547, 0.791623, 0, 0, 0},
     {0, 0, 0, 1, 0, 0},
     {-0.04, -0.138564, 0.540662, -0.18, 0.809003, 0},
     {-0.25, -0.606218, -0.240013, 0.26, -0.231685, 0.625392},
-};
+}};
 
 /**
  * The square root matrix for <em>RMa O2I</em>, which is generated using the
@@ -97,14 +87,14 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_RMa_O2I[6][6] = {
+static constexpr std::array<std::array<double, 6>, 6> sqrtC_RMa_O2I = {{
     {1, 0, 0, 0, 0, 0},
     {0, 1, 0, 0, 0, 0},
     {0, 0, 1, 0, 0, 0},
     {0, 0, -0.7, 0.714143, 0, 0},
     {0, 0, 0.66, -0.123225, 0.741091, 0},
     {0, 0, 0.47, 0.152631, -0.393194, 0.775373},
-};
+}};
 
 /**
  * The square root matrix for <em>UMa LOS</em>, which is generated using the
@@ -114,7 +104,7 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_UMa_LOS[7][7] = {
+static constexpr std::array<std::array<double, 7>, 7> sqrtC_UMa_LOS = {{
     {1, 0, 0, 0, 0, 0, 0},
     {0, 1, 0, 0, 0, 0, 0},
     {-0.4, -0.4, 0.824621, 0, 0, 0, 0},
@@ -122,7 +112,7 @@
     {-0.5, -0.2, 0.630593, -0.484671, 0.278293, 0, 0},
     {0, 0, -0.242536, 0.672172, 0.642214, 0.27735, 0},
     {-0.8, 0, -0.388057, -0.367926, 0.238537, -3.58949e-15, 0.130931},
-};
+}};
 
 /**
  * The square root matrix for <em>UMa NLOS</em>, which is generated using the
@@ -133,14 +123,14 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_UMa_NLOS[6][6] = {
+static constexpr std::array<std::array<double, 6>, 6> sqrtC_UMa_NLOS = {{
     {1, 0, 0, 0, 0, 0},
     {-0.4, 0.916515, 0, 0, 0, 0},
     {-0.6, 0.174574, 0.78072, 0, 0, 0},
     {0, 0.654654, 0.365963, 0.661438, 0, 0},
     {0, -0.545545, 0.762422, 0.118114, 0.327327, 0},
     {-0.4, -0.174574, -0.396459, 0.392138, 0.49099, 0.507445},
-};
+}};
 
 /**
  * The square root matrix for <em>UMa O2I</em>, which is generated using the
@@ -150,15 +140,14 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_UMa_O2I[6][6] = {
+static constexpr std::array<std::array<double, 6>, 6> sqrtC_UMa_O2I = {{
     {1, 0, 0, 0, 0, 0},
     {-0.5, 0.866025, 0, 0, 0, 0},
     {0.2, 0.57735, 0.791623, 0, 0, 0},
     {0, 0.46188, -0.336861, 0.820482, 0, 0},
     {0, -0.69282, 0.252646, 0.493742, 0.460857, 0},
     {0, -0.23094, 0.16843, 0.808554, -0.220827, 0.464515},
-
-};
+}};
 
 /**
  * The square root matrix for <em>UMi LOS</em>, which is generated using the
@@ -168,7 +157,7 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_UMi_LOS[7][7] = {
+static constexpr std::array<std::array<double, 7>, 7> sqrtC_UMi_LOS = {{
     {1, 0, 0, 0, 0, 0, 0},
     {0.5, 0.866025, 0, 0, 0, 0, 0},
     {-0.4, -0.57735, 0.711805, 0, 0, 0, 0},
@@ -176,7 +165,7 @@
     {-0.4, -0.11547, 0.805464, -0.23482, 0.350363, 0, 0},
     {0, 0, 0, 0.688514, 0.461454, 0.559471, 0},
     {0, 0, 0.280976, 0.231921, -0.490509, 0.11916, 0.782603},
-};
+}};
 
 /**
  * The square root matrix for <em>UMi NLOS</em>, which is generated using the
@@ -187,14 +176,14 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_UMi_NLOS[6][6] = {
+static constexpr std::array<std::array<double, 6>, 6> sqrtC_UMi_NLOS = {{
     {1, 0, 0, 0, 0, 0},
     {-0.7, 0.714143, 0, 0, 0, 0},
     {0, 0, 1, 0, 0, 0},
     {-0.4, 0.168034, 0, 0.90098, 0, 0},
     {0, -0.70014, 0.5, 0.130577, 0.4927, 0},
     {0, 0, 0.5, 0.221981, -0.566238, 0.616522},
-};
+}};
 
 /**
  * The square root matrix for <em>UMi O2I</em>, which is generated using the
@@ -204,14 +193,14 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_UMi_O2I[6][6] = {
+static constexpr std::array<std::array<double, 6>, 6> sqrtC_UMi_O2I = {{
     {1, 0, 0, 0, 0, 0},
     {-0.5, 0.866025, 0, 0, 0, 0},
     {0.2, 0.57735, 0.791623, 0, 0, 0},
     {0, 0.46188, -0.336861, 0.820482, 0, 0},
     {0, -0.69282, 0.252646, 0.493742, 0.460857, 0},
     {0, -0.23094, 0.16843, 0.808554, -0.220827, 0.464515},
-};
+}};
 
 /**
  * The square root matrix for <em>Indoor-Office LOS</em>, which is generated
@@ -221,7 +210,7 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_office_LOS[7][7] = {
+static constexpr std::array<std::array<double, 7>, 7> sqrtC_office_LOS = {{
     {1, 0, 0, 0, 0, 0, 0},
     {0.5, 0.866025, 0, 0, 0, 0, 0},
     {-0.8, -0.11547, 0.588784, 0, 0, 0, 0},
@@ -229,7 +218,7 @@
     {-0.5, 0.288675, 0.73598, -0.348236, 0.0610847, 0, 0},
     {0.2, -0.11547, 0.418943, 0.541106, 0.219905, 0.655744, 0},
     {0.3, -0.057735, 0.73598, -0.348236, 0.0610847, -0.304997, 0.383375},
-};
+}};
 
 /**
  * The square root matrix for <em>Indoor-Office NLOS</em>, which is generated
@@ -240,14 +229,14 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_office_NLOS[6][6] = {
+static constexpr std::array<std::array<double, 6>, 6> sqrtC_office_NLOS = {{
     {1, 0, 0, 0, 0, 0},
     {-0.5, 0.866025, 0, 0, 0, 0},
     {0, 0.46188, 0.886942, 0, 0, 0},
     {-0.4, -0.23094, 0.120263, 0.878751, 0, 0},
     {0, -0.311769, 0.55697, -0.249198, 0.728344, 0},
     {0, -0.069282, 0.295397, 0.430696, 0.468462, 0.709214},
-};
+}};
 
 /**
  * The square root matrix for <em>NTN Dense Urban LOS</em>, which is generated
@@ -257,7 +246,7 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_NTN_DenseUrban_LOS[7][7] = {
+static constexpr std::array<std::array<double, 7>, 7> sqrtC_NTN_DenseUrban_LOS = {{
     {1, 0, 0, 0, 0, 0, 0},
     {0, 1, 0, 0, 0, 0, 0},
     {-0.4, -0.4, 0.824621, 0, 0, 0, 0},
@@ -265,7 +254,7 @@
     {-0.5, -0.2, 0.630593, -0.484671, 0.278293, 0, 0},
     {0, 0, -0.242536, 0.672172, 0.642214, 0.27735, 0},
     {-0.8, 0, -0.388057, -0.367926, 0.238537, -4.09997e-15, 0.130931},
-};
+}};
 
 /**
  * The square root matrix for <em>NTN Dense Urban NLOS</em>, which is generated
@@ -275,14 +264,14 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_NTN_DenseUrban_NLOS[6][6] = {
+static constexpr std::array<std::array<double, 6>, 6> sqrtC_NTN_DenseUrban_NLOS = {{
     {1, 0, 0, 0, 0, 0},
     {-0.4, 0.916515, 0, 0, 0, 0},
     {-0.6, 0.174574, 0.78072, 0, 0, 0},
     {0, 0.654654, 0.365963, 0.661438, 0, 0},
     {0, -0.545545, 0.762422, 0.118114, 0.327327, 0},
     {-0.4, -0.174574, -0.396459, 0.392138, 0.49099, 0.507445},
-};
+}};
 
 /**
  * The square root matrix for <em>NTN Urban LOS</em>, which is generated
@@ -292,7 +281,7 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_NTN_Urban_LOS[7][7] = {
+static constexpr std::array<std::array<double, 7>, 7> sqrtC_NTN_Urban_LOS = {{
     {1, 0, 0, 0, 0, 0, 0},
     {0, 1, 0, 0, 0, 0, 0},
     {-0.4, -0.4, 0.824621, 0, 0, 0, 0},
@@ -300,7 +289,7 @@
     {-0.5, -0.2, 0.630593, -0.484671, 0.278293, 0, 0},
     {0, 0, -0.242536, 0.672172, 0.642214, 0.27735, 0},
     {-0.8, 0, -0.388057, -0.367926, 0.238537, -4.09997e-15, 0.130931},
-};
+}};
 
 /**
  * The square root matrix for <em>NTN Urban NLOS</em>, which is generated
@@ -312,88 +301,88 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const std::map<int, std::vector<std::vector<double>>> sqrtC_NTN_Urban_NLOS{
+static const std::map<int, std::array<std::array<double, 6>, 6>> sqrtC_NTN_Urban_NLOS{
     {10,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.21, 0.977701, 0, 0, 0, 0},
          {-0.48, 0.459445, 0.747335, 0, 0, 0},
          {-0.05, 0.377927, 0.28416, 0.879729, 0, 0},
          {-0.02, 0.691213, 0.258017, 0.073265, 0.670734, 0},
          {-0.31, -0.00521632, -0.115615, 0.0788023, 0.00218104, 0.940368},
-     }},
+     }}},
     {20,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.25, 0.968246, 0, 0, 0, 0},
          {-0.52, 0.35115, 0.778648, 0, 0, 0},
          {-0.04, 0.371806, 0.345008, 0.860889, 0, 0},
          {0, 0.743613, 0.281102, 0.0424415, 0.605161, 0},
          {-0.32, 0.0206559, -0.0689057, 0.154832, 0.061865, 0.929852},
-     }},
+     }}},
     {30,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.21, 0.977701, 0, 0, 0, 0},
          {-0.52, 0.450853, 0.725487, 0, 0, 0},
          {-0.04, 0.288023, 0.260989, 0.920504, 0, 0},
          {0.01, 0.697657, 0.386856, 0.0418183, 0.601472, 0},
          {-0.33, 0.0416283, -0.0694268, 0.166137, 0.139937, 0.915075},
-     }},
+     }}},
     {40,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.26, 0.965609, 0, 0, 0, 0},
          {-0.53, 0.395813, 0.749955, 0, 0, 0},
          {-0.04, 0.299914, 0.320139, 0.897754, 0, 0},
          {0.01, 0.696556, 0.372815, 0.0580784, 0.610202, 0},
          {-0.33, 0.0457742, -0.0173584, 0.154417, 0.129332, 0.920941},
-     }},
+     }}},
     {50,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.25, 0.968246, 0, 0, 0, 0},
          {-0.57, 0.420864, 0.705672, 0, 0, 0},
          {-0.03, 0.229797, 0.235501, 0.943839, 0, 0},
          {0.03, 0.679063, 0.384466, 0.0681379, 0.6209, 0},
          {-0.41, -0.147173, -0.229228, 0.270707, 0.293002, 0.773668},
-     }},
+     }}},
     {60,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.2, 0.979796, 0, 0, 0, 0},
          {-0.53, 0.473568, 0.703444, 0, 0, 0},
          {-0.05, 0.204124, 0.109225, 0.971547, 0, 0},
          {0.03, 0.68994, 0.411073, 0.0676935, 0.591202, 0},
          {-0.4, -0.224537, -0.292371, 0.275609, 0.301835, 0.732828},
-     }},
+     }}},
     {70,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.19, 0.981784, 0, 0, 0, 0},
          {-0.5, 0.524555, 0.689088, 0, 0, 0},
          {-0.03, 0.228462, 0.18163, 0.955989, 0, 0},
          {-0.02, 0.637818, 0.428725, 0.00608114, 0.639489, 0},
          {-0.36, -0.18171, -0.282523, 0.106726, 0.123808, 0.854894},
-     }},
+     }}},
     {80,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.2, 0.979796, 0, 0, 0, 0},
          {-0.49, 0.502145, 0.712566, 0, 0, 0},
          {-0.01, 0.232702, 0.151916, 0.960558, 0, 0},
          {-0.05, 0.612372, 0.376106, 0.0206792, 0.693265, 0},
          {-0.37, -0.320475, -0.365405, -0.00376264, 0.0364343, 0.790907},
-     }},
+     }}},
     {90,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.19, 0.981784, 0, 0, 0, 0},
          {-0.38, 0.58852, 0.713613, 0, 0, 0},
          {-0.03, 0.360874, 0.12082, 0.924269, 0, 0},
          {-0.12, 0.526796, 0.34244, 0.0594196, 0.766348, 0},
          {-0.33, -0.257389, -0.24372, -0.257035, -0.176521, 0.817451},
-     }},
+     }}},
 };
 
 /**
@@ -404,7 +393,7 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_NTN_Suburban_LOS[7][7] = {
+static constexpr std::array<std::array<double, 7>, 7> sqrtC_NTN_Suburban_LOS = {{
     {1, 0, 0, 0, 0, 0, 0},
     {0, 1, 0, 0, 0, 0, 0},
     {-0.4, -0.4, 0.824621, 0, 0, 0, 0},
@@ -412,7 +401,7 @@
     {-0.5, -0.2, 0.630593, -0.484671, 0.278293, 0, 0},
     {0, 0, -0.242536, 0.672172, 0.642214, 0.27735, 0},
     {-0.8, 0, -0.388057, -0.367926, 0.238537, -4.09997e-15, 0.130931},
-};
+}};
 
 /**
  * The square root matrix for <em>NTN Suburban NLOS</em>, which is generated
@@ -422,14 +411,14 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_NTN_Suburban_NLOS[6][6] = {
+static constexpr std::array<std::array<double, 6>, 6> sqrtC_NTN_Suburban_NLOS = {{
     {1, 0, 0, 0, 0, 0},
     {-0.4, 0.916515, 0, 0, 0, 0},
     {-0.6, 0.174574, 0.78072, 0, 0, 0},
     {0, 0.654654, 0.365963, 0.661438, 0, 0},
     {0, -0.545545, 0.762422, 0.118114, 0.327327, 0},
     {-0.4, -0.174574, -0.396459, 0.392138, 0.49099, 0.507445},
-};
+}};
 
 /**
  * The square root matrix for <em>NTN Rural LOS</em>, which is generated
@@ -439,7 +428,7 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const double sqrtC_NTN_Rural_LOS[7][7] = {
+static constexpr std::array<std::array<double, 7>, 7> sqrtC_NTN_Rural_LOS = {{
     {1, 0, 0, 0, 0, 0, 0},
     {0, 1, 0, 0, 0, 0, 0},
     {-0.5, 0, 0.866025, 0, 0, 0, 0},
@@ -447,7 +436,7 @@
     {0, 0, 0, 0, 1, 0, 0},
     {0.01, 0, -0.0519615, 0.73, -0.2, 0.651383, 0},
     {-0.17, -0.02, 0.21362, -0.14, 0.24, 0.142773, 0.909661},
-};
+}};
 
 /**
  * The square root matrix for <em>NTN Rural NLOS S Band</em>, which is generated
@@ -459,88 +448,88 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const std::map<int, std::vector<std::vector<double>>> sqrtC_NTN_Rural_NLOS_S{
+static const std::map<int, std::array<std::array<double, 6>, 6>> sqrtC_NTN_Rural_NLOS_S{
     {10,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.36, 0.932952, 0, 0, 0, 0},
          {0.45, 0.516639, 0.728412, 0, 0, 0},
          {0.02, 0.329277, 0.371881, 0.867687, 0, 0},
          {-0.06, 0.59853, 0.436258, -0.0324062, 0.668424, 0},
          {-0.07, 0.0373009, 0.305087, -0.0280496, -0.225204, 0.921481},
-     }},
+     }}},
     {20,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.39, 0.920815, 0, 0, 0, 0},
          {0.52, 0.426579, 0.740021, 0, 0, 0},
          {0, 0.347518, -0.0381664, 0.936896, 0, 0},
          {-0.04, 0.710675, 0.172483, 0.116993, 0.670748, 0},
          {-0.17, -0.0394216, 0.115154, 0.243458, -0.0702635, 0.944498},
-     }},
+     }}},
     {30,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.41, 0.912086, 0, 0, 0, 0},
          {0.54, 0.49491, 0.680782, 0, 0, 0},
          {0, 0.350844, -0.152231, 0.923977, 0, 0},
          {-0.04, 0.694672, 0.0702137, 0.0832998, 0.709903, 0},
          {-0.19, -0.0854087, 0.0805978, 0.283811, -0.137441, 0.922318},
-     }},
+     }}},
     {40,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.37, 0.929032, 0, 0, 0, 0},
          {0.53, 0.480177, 0.698949, 0, 0, 0},
          {0.01, 0.434538, 0.00864797, 0.900556, 0, 0},
          {-0.05, 0.765851, -0.0303947, 0.0421641, 0.63896, 0},
          {-0.17, -0.16458, 0.0989022, 0.158081, -0.150425, 0.941602},
-     }},
+     }}},
     {50,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.4, 0.916515, 0, 0, 0, 0},
          {0.55, 0.403703, 0.731111, 0, 0, 0},
          {0.02, 0.499719, -0.0721341, 0.862947, 0, 0},
          {-0.06, 0.835775, -0.156481, 0.0373835, 0.521534, 0},
          {-0.19, -0.301141, 0.145082, 0.144564, -0.0238067, 0.911427},
-     }},
+     }}},
     {60,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.41, 0.912086, 0, 0, 0, 0},
          {0.56, 0.339442, 0.755764, 0, 0, 0},
          {0.02, 0.436582, -0.0256617, 0.899076, 0, 0},
          {-0.07, 0.856608, -0.12116, 0.0715303, 0.491453, 0},
          {-0.2, -0.331109, 0.15136, 0.036082, 0.031313, 0.908391},
-     }},
+     }}},
     {70,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.4, 0.916515, 0, 0, 0, 0},
          {0.56, 0.386246, 0.732949, 0, 0, 0},
          {0.04, 0.573913, -0.0601289, 0.815726, 0, 0},
          {-0.11, 0.813953, -0.0720183, 0.0281118, 0.565158, 0},
          {-0.19, -0.432071, 0.236423, -0.0247788, -0.0557206, 0.847113},
-     }},
+     }}},
     {80,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.46, 0.887919, 0, 0, 0, 0},
          {0.58, 0.469412, 0.665772, 0, 0, 0},
          {0.01, 0.309262, -0.286842, 0.90663, 0, 0},
          {-0.05, 0.762457, -0.268721, -0.0467443, 0.584605, 0},
          {-0.23, -0.580909, 0.399665, 0.0403629, 0.326208, 0.584698},
-     }},
+     }}},
     {90,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.3, 0.953939, 0, 0, 0, 0},
          {0.47, 0.81871, 0.329868, 0, 0, 0},
          {0.06, 0.0712834, -0.595875, 0.797654, 0, 0},
          {-0.1, 0.408831, -0.0233859, 0.0412736, 0.905873, 0},
          {-0.13, -0.407783, 0.439436, -0.0768289, -0.212875, 0.756631},
-     }},
+     }}},
 };
 
 /**
@@ -554,88 +543,88 @@
  * The Matlab file to generate the matrices can be found in
  * https://github.com/nyuwireless-unipd/ns3-mmwave/blob/master/src/mmwave/model/BeamFormingMatrix/SqrtMatrix.m
  */
-static const std::map<int, std::vector<std::vector<double>>> sqrtC_NTN_Rural_NLOS_Ka{
+static const std::map<int, std::array<std::array<double, 6>, 6>> sqrtC_NTN_Rural_NLOS_Ka{
     {10,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.36, 0.932952, 0, 0, 0, 0},
          {0.45, 0.527358, 0.72069, 0, 0, 0},
          {0.02, 0.350715, 0.355282, 0.866241, 0, 0},
          {-0.07, 0.562515, 0.478504, 0.0162932, 0.670406, 0},
          {-0.06, 0.0411597, 0.270982, 0.0121094, -0.159927, 0.946336},
-     }},
+     }}},
     {20,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.38, 0.924986, 0, 0, 0, 0},
          {0.52, 0.473088, 0.711188, 0, 0, 0},
          {0, 0.367573, -0.0617198, 0.927944, 0, 0},
          {-0.04, 0.68628, 0.149228, 0.115257, 0.701332, 0},
          {-0.16, -0.0441088, 0.118207, 0.251641, -0.0752458, 0.943131},
-     }},
+     }}},
     {30,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.42, 0.907524, 0, 0, 0, 0},
          {0.54, 0.48131, 0.690464, 0, 0, 0},
          {0, 0.363627, -0.137613, 0.921324, 0, 0},
          {-0.04, 0.686704, 0.117433, 0.104693, 0.708581, 0},
          {-0.19, -0.0438556, 0.0922685, 0.269877, -0.136292, 0.928469},
-     }},
+     }}},
     {40,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.36, 0.932952, 0, 0, 0, 0},
          {0.53, 0.483197, 0.696865, 0, 0, 0},
          {0.01, 0.464761, -0.0285153, 0.88492, 0, 0},
          {-0.05, 0.763169, 0.140255, 0.0562856, 0.626286, 0},
          {-0.16, -0.126051, 0.0942905, 0.195354, -0.217188, 0.92967},
-     }},
+     }}},
     {50,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.39, 0.920815, 0, 0, 0, 0},
          {0.55, 0.406705, 0.729446, 0, 0, 0},
          {0.01, 0.503793, -0.123923, 0.854831, 0, 0},
          {-0.06, 0.821664, -0.207246, 0.0245302, 0.526988, 0},
          {-0.19, -0.254231, 0.10679, 0.190931, -0.0665276, 0.920316},
-     }},
+     }}},
     {60,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.42, 0.907524, 0, 0, 0, 0},
          {0.56, 0.391395, 0.730213, 0, 0, 0},
          {0.02, 0.427978, -0.0393147, 0.902712, 0, 0},
          {-0.06, 0.820694, -0.119986, 0.105509, 0.545281, 0},
          {-0.2, -0.279882, 0.180145, 0.0563477, -0.0121631, 0.919723},
-     }},
+     }}},
     {70,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.36, 0.932952, 0, 0, 0, 0},
          {0.54, 0.519212, 0.662434, 0, 0, 0},
          {0.04, 0.412025, -0.0234416, 0.909992, 0, 0},
          {-0.09, 0.758452, -0.0682296, 0.0214276, 0.64151, 0},
          {-0.17, -0.387158, 0.306169, -0.0291255, -0.109344, 0.845378},
-     }},
+     }}},
     {80,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.44, 0.897998, 0, 0, 0, 0},
          {0.57, 0.43519, 0.696928, 0, 0, 0},
          {0.01, 0.316705, -0.248988, 0.915207, 0, 0},
          {-0.06, 0.805793, -0.296262, -0.0419182, 0.507514, 0},
          {-0.22, -0.497551, 0.289742, 0.0785823, 0.328773, 0.711214},
-     }},
+     }}},
     {90,
-     {
+     {{
          {1, 0, 0, 0, 0, 0},
          {-0.27, 0.96286, 0, 0, 0, 0},
          {0.46, 0.741748, 0.488067, 0, 0, 0},
          {0.04, 0.0735309, -0.374828, 0.923308, 0, 0},
          {-0.08, 0.517624, 0.128779, 0.0795063, 0.838308, 0},
          {-0.11, -0.321646, 0.0802763, -0.131981, -0.193429, 0.907285},
-     }},
+     }}},
 };
 
 /**
@@ -673,7 +662,7 @@
  * the quantized elevation angle.
  * The inner vector collects the table3gpp values.
  */
-static const std::map<std::string, std::map<int, std::vector<float>>> NTNDenseUrbanLOS{
+static const std::map<std::string, std::map<int, std::array<float, 22>>> NTNDenseUrbanLOS{
     {"S",
      {
          {10, {-7.12, 0.8, -3.06, 0.48, 0.94, 0.7,  0.82, 0.03, -2.52, 0.5, 4.4,
@@ -724,7 +713,7 @@
  * the quantized elevation angle.
  * The inner vector collects the table3gpp values.
  */
-static const std::map<std::string, std::map<int, std::vector<float>>> NTNDenseUrbanNLOS{
+static const std::map<std::string, std::map<int, std::array<float, 20>>> NTNDenseUrbanNLOS{
     {"S",
      {
          {10, {-6.84, 0.82, -2.08, 0.87, 1.0,  1.6, 1.0, 0.63, -2.08, 0.58,
@@ -775,7 +764,7 @@
  * the quantized elevation angle.
  * The inner vector collects the table3gpp values.
  */
-static const std::map<std::string, std::map<int, std::vector<float>>> NTNUrbanLOS{
+static const std::map<std::string, std::map<int, std::array<float, 22>>> NTNUrbanLOS{
     {"S",
      {
          {10, {-7.97, 1.0, -2.6, 0.79, 0.18, 0.74, -0.63, 2.6,  -2.54, 2.62, 31.83,
@@ -826,7 +815,7 @@
  * the quantized elevation angle.
  * The inner vector collects the table3gpp values.
  */
-static const std::map<std::string, std::map<int, std::vector<float>>> NTNUrbanNLOS{
+static const std::map<std::string, std::map<int, std::array<float, 22>>> NTNUrbanNLOS{
     {"S",
      {
          {10, {-7.24, 1.26, -1.58, 0.89, 0.13, 2.99, -1.13, 2.66, -2.87, 2.76, 0.0,
@@ -877,7 +866,7 @@
  * the quantized elevation angle.
  * The inner vector collects the table3gpp values.
  */
-static const std::map<std::string, std::map<int, std::vector<float>>> NTNSuburbanLOS{
+static const std::map<std::string, std::map<int, std::array<float, 22>>> NTNSuburbanLOS{
     {"S",
      {
          {10, {-8.16, 0.99, -3.57, 1.62, 0.05, 1.84, -1.78, 0.62, -1.06, 0.96, 11.4,
@@ -928,7 +917,7 @@
  * the quantized elevation angle.
  * The inner vector collects the table3gpp values.
  */
-static const std::map<std::string, std::map<int, std::vector<float>>> NTNSuburbanNLOS{
+static const std::map<std::string, std::map<int, std::array<float, 22>>> NTNSuburbanNLOS{
     {"S",
      {
          {10, {-7.43, 0.5, -2.89, 0.41, 1.49, 0.4,  0.81, 0.36, -3.09, 0.32, 0.0,
@@ -979,7 +968,7 @@
  * the quantized elevation angle.
  * The inner vector collects the table3gpp values.
  */
-static const std::map<std::string, std::map<int, std::vector<float>>> NTNRuralLOS{
+static const std::map<std::string, std::map<int, std::array<float, 22>>> NTNRuralLOS{
     {"S",
      {
          {10, {-9.55, 0.66, -3.42, 0.89, -9.45, 7.83, -4.2, 6.3,  -6.03, 5.19, 24.72,
@@ -1030,7 +1019,7 @@
  * the quantized elevation angle.
  * The inner vector collects the table3gpp values.
  */
-static const std::map<std::string, std::map<int, std::vector<float>>> NTNRuralNLOS{
+static const std::map<std::string, std::map<int, std::array<float, 22>>> NTNRuralNLOS{
     {"S",
      {
          {10, {-9.01, 1.59, -2.9, 1.34, -3.33, 6.22, -0.88, 3.26, -4.92, 3.96, 0.0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/three-gpp-channel-model.h ns-3.43/src/spectrum/model/three-gpp-channel-model.h
--- ns-3.42/src/spectrum/model/three-gpp-channel-model.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/three-gpp-channel-model.h	2024-10-09 16:41:10.088656700 -0700
@@ -4,18 +4,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef THREE_GPP_CHANNEL_H
@@ -251,8 +240,6 @@
      * \param hUT the height of the UT
      * \param distance2D the 2D distance between tx and rx
      * \return the parameters table
-     * \deprecated Use GetThreeGppTable(const Ptr<const MobilityModel> aMob, const Ptr<const
-     *  MobilityModel> bMob, Ptr<const ChannelCondition> channelCondition) instead
      */
     NS_DEPRECATED_3_41("Use GetThreeGppTable(const Ptr<const MobilityModel>, const Ptr<const "
                        "MobilityModel>, Ptr<const ChannelCondition>) instead")
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/three-gpp-spectrum-propagation-loss-model.cc ns-3.43/src/spectrum/model/three-gpp-spectrum-propagation-loss-model.cc
--- ns-3.42/src/spectrum/model/three-gpp-spectrum-propagation-loss-model.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/three-gpp-spectrum-propagation-loss-model.cc	2024-10-09 16:41:10.088656700 -0700
@@ -4,18 +4,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/three-gpp-spectrum-propagation-loss-model.h ns-3.43/src/spectrum/model/three-gpp-spectrum-propagation-loss-model.h
--- ns-3.42/src/spectrum/model/three-gpp-spectrum-propagation-loss-model.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/three-gpp-spectrum-propagation-loss-model.h	2024-10-09 16:41:10.088656700 -0700
@@ -4,18 +4,7 @@
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef THREE_GPP_SPECTRUM_PROPAGATION_LOSS_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/trace-fading-loss-model.cc ns-3.43/src/spectrum/model/trace-fading-loss-model.cc
--- ns-3.42/src/spectrum/model/trace-fading-loss-model.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/trace-fading-loss-model.cc	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/trace-fading-loss-model.h ns-3.43/src/spectrum/model/trace-fading-loss-model.h
--- ns-3.42/src/spectrum/model/trace-fading-loss-model.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/trace-fading-loss-model.h	2024-10-09 16:41:10.088656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro  <g.piro@poliba.it>
  *         Marco Miozzo <mmiozzo@cttc.es>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/tv-spectrum-transmitter.cc ns-3.43/src/spectrum/model/tv-spectrum-transmitter.cc
--- ns-3.42/src/spectrum/model/tv-spectrum-transmitter.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/tv-spectrum-transmitter.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/tv-spectrum-transmitter.h ns-3.43/src/spectrum/model/tv-spectrum-transmitter.h
--- ns-3.42/src/spectrum/model/tv-spectrum-transmitter.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/tv-spectrum-transmitter.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/two-ray-spectrum-propagation-loss-model.cc ns-3.43/src/spectrum/model/two-ray-spectrum-propagation-loss-model.cc
--- ns-3.42/src/spectrum/model/two-ray-spectrum-propagation-loss-model.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/two-ray-spectrum-propagation-loss-model.cc	2024-10-09 16:41:10.092656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2022 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/two-ray-spectrum-propagation-loss-model.h ns-3.43/src/spectrum/model/two-ray-spectrum-propagation-loss-model.h
--- ns-3.42/src/spectrum/model/two-ray-spectrum-propagation-loss-model.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/two-ray-spectrum-propagation-loss-model.h	2024-10-09 16:41:10.092656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2022 SIGNET Lab, Department of Information Engineering,
  * University of Padova
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef TWO_RAY_SPECTRUM_PROPAGATION_LOSS_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/waveform-generator.cc ns-3.43/src/spectrum/model/waveform-generator.cc
--- ns-3.42/src/spectrum/model/waveform-generator.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/waveform-generator.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/model/waveform-generator.h ns-3.43/src/spectrum/model/waveform-generator.h
--- ns-3.42/src/spectrum/model/waveform-generator.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/model/waveform-generator.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/test/spectrum-ideal-phy-test.cc ns-3.43/src/spectrum/test/spectrum-ideal-phy-test.cc
--- ns-3.42/src/spectrum/test/spectrum-ideal-phy-test.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/test/spectrum-ideal-phy-test.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/test/spectrum-interference-test.cc ns-3.43/src/spectrum/test/spectrum-interference-test.cc
--- ns-3.42/src/spectrum/test/spectrum-interference-test.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/test/spectrum-interference-test.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/test/spectrum-test.h ns-3.43/src/spectrum/test/spectrum-test.h
--- ns-3.42/src/spectrum/test/spectrum-test.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/test/spectrum-test.h	2024-10-09 16:41:10.092656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 University of Washington
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  * part of the code copied from test.h
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/test/spectrum-value-test.cc ns-3.43/src/spectrum/test/spectrum-value-test.cc
--- ns-3.42/src/spectrum/test/spectrum-value-test.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/test/spectrum-value-test.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/test/spectrum-waveform-generator-test.cc ns-3.43/src/spectrum/test/spectrum-waveform-generator-test.cc
--- ns-3.42/src/spectrum/test/spectrum-waveform-generator-test.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/test/spectrum-waveform-generator-test.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Luis Pacheco <luisbelem@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/test/three-gpp-channel-test-suite.cc ns-3.43/src/spectrum/test/three-gpp-channel-test-suite.cc
--- ns-3.42/src/spectrum/test/three-gpp-channel-test-suite.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/test/three-gpp-channel-test-suite.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 SIGNET Lab, Department of Information Engineering,
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/abort.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/test/tv-helper-distribution-test.cc ns-3.43/src/spectrum/test/tv-helper-distribution-test.cc
--- ns-3.42/src/spectrum/test/tv-helper-distribution-test.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/test/tv-helper-distribution-test.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/test/tv-spectrum-transmitter-test.cc ns-3.43/src/spectrum/test/tv-spectrum-transmitter-test.cc
--- ns-3.42/src/spectrum/test/tv-spectrum-transmitter-test.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/test/tv-spectrum-transmitter-test.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Benjamin Cizdziel <ben.cizdziel@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/test/two-ray-splm-test-suite.cc ns-3.43/src/spectrum/test/two-ray-splm-test-suite.cc
--- ns-3.42/src/spectrum/test/two-ray-splm-test-suite.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/test/two-ray-splm-test-suite.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 SIGNET Lab, Department of Information Engineering,
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include <ns3/abort.h>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/spectrum/utils/two-ray-to-three-gpp-ch-calibration.py ns-3.43/src/spectrum/utils/two-ray-to-three-gpp-ch-calibration.py
--- ns-3.42/src/spectrum/utils/two-ray-to-three-gpp-ch-calibration.py	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/spectrum/utils/two-ray-to-three-gpp-ch-calibration.py	2024-10-09 16:41:10.092656600 -0700
@@ -6,17 +6,7 @@
 Copyright (c) 2022 SIGNET Lab, Department of Information Engineering,
 University of Padova
 
-This program is free software: you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free Software
-Foundation, either version 3 of the License, or (at your option) any later
-version.
-
-This program is distributed in the hope that it will be useful, but WITHOUT
-ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License along with
-this program. If not, see <http://www.gnu.org/licenses/>.
+SPDX-License-Identifier: GPL-2.0-only
 """
 
 import argparse as argp
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/examples/double-probe-example.cc ns-3.43/src/stats/examples/double-probe-example.cc
--- ns-3.42/src/stats/examples/double-probe-example.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/examples/double-probe-example.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/examples/file-aggregator-example.cc ns-3.43/src/stats/examples/file-aggregator-example.cc
--- ns-3.42/src/stats/examples/file-aggregator-example.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/examples/file-aggregator-example.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/examples/file-helper-example.cc ns-3.43/src/stats/examples/file-helper-example.cc
--- ns-3.42/src/stats/examples/file-helper-example.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/examples/file-helper-example.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * This is based on double-probe-example.cc.
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/examples/gnuplot-aggregator-example.cc ns-3.43/src/stats/examples/gnuplot-aggregator-example.cc
--- ns-3.42/src/stats/examples/gnuplot-aggregator-example.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/examples/gnuplot-aggregator-example.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/examples/gnuplot-example.cc ns-3.43/src/stats/examples/gnuplot-example.cc
--- ns-3.42/src/stats/examples/gnuplot-example.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/examples/gnuplot-example.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/examples/gnuplot-helper-example.cc ns-3.43/src/stats/examples/gnuplot-helper-example.cc
--- ns-3.42/src/stats/examples/gnuplot-helper-example.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/examples/gnuplot-helper-example.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * This is based on double-probe-example.cc.
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/examples/time-probe-example.cc ns-3.43/src/stats/examples/time-probe-example.cc
--- ns-3.42/src/stats/examples/time-probe-example.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/examples/time-probe-example.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/helper/file-helper.cc ns-3.43/src/stats/helper/file-helper.cc
--- ns-3.42/src/stats/helper/file-helper.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/helper/file-helper.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/helper/file-helper.h ns-3.43/src/stats/helper/file-helper.h
--- ns-3.42/src/stats/helper/file-helper.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/helper/file-helper.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/helper/gnuplot-helper.cc ns-3.43/src/stats/helper/gnuplot-helper.cc
--- ns-3.42/src/stats/helper/gnuplot-helper.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/helper/gnuplot-helper.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/helper/gnuplot-helper.h ns-3.43/src/stats/helper/gnuplot-helper.h
--- ns-3.42/src/stats/helper/gnuplot-helper.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/helper/gnuplot-helper.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/average.h ns-3.43/src/stats/model/average.h
--- ns-3.42/src/stats/model/average.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/average.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pavel Boyko <boyko@iitp.ru>
  * Corrections and extensions: Timo Bingmann <tbns@idlebox.net>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/basic-data-calculators.h ns-3.43/src/stats/model/basic-data-calculators.h
--- ns-3.42/src/stats/model/basic-data-calculators.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/basic-data-calculators.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/boolean-probe.cc ns-3.43/src/stats/model/boolean-probe.cc
--- ns-3.42/src/stats/model/boolean-probe.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/boolean-probe.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/boolean-probe.h ns-3.43/src/stats/model/boolean-probe.h
--- ns-3.42/src/stats/model/boolean-probe.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/boolean-probe.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/data-calculator.cc ns-3.43/src/stats/model/data-calculator.cc
--- ns-3.42/src/stats/model/data-calculator.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/data-calculator.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/data-calculator.h ns-3.43/src/stats/model/data-calculator.h
--- ns-3.42/src/stats/model/data-calculator.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/data-calculator.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/data-collection-object.cc ns-3.43/src/stats/model/data-collection-object.cc
--- ns-3.42/src/stats/model/data-collection-object.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/data-collection-object.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Tiago G. Rodrigues (tgr002@bucknell.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/data-collection-object.h ns-3.43/src/stats/model/data-collection-object.h
--- ns-3.42/src/stats/model/data-collection-object.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/data-collection-object.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Tiago G. Rodrigues (tgr002@bucknell.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/data-collector.cc ns-3.43/src/stats/model/data-collector.cc
--- ns-3.42/src/stats/model/data-collector.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/data-collector.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/data-collector.h ns-3.43/src/stats/model/data-collector.h
--- ns-3.42/src/stats/model/data-collector.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/data-collector.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/data-output-interface.cc ns-3.43/src/stats/model/data-output-interface.cc
--- ns-3.42/src/stats/model/data-output-interface.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/data-output-interface.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/data-output-interface.h ns-3.43/src/stats/model/data-output-interface.h
--- ns-3.42/src/stats/model/data-output-interface.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/data-output-interface.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/double-probe.cc ns-3.43/src/stats/model/double-probe.cc
--- ns-3.42/src/stats/model/double-probe.cc	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/double-probe.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/double-probe.h ns-3.43/src/stats/model/double-probe.h
--- ns-3.42/src/stats/model/double-probe.h	2024-05-29 15:29:47.172073600 -0700
+++ ns-3.43/src/stats/model/double-probe.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/file-aggregator.cc ns-3.43/src/stats/model/file-aggregator.cc
--- ns-3.42/src/stats/model/file-aggregator.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/file-aggregator.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/file-aggregator.h ns-3.43/src/stats/model/file-aggregator.h
--- ns-3.42/src/stats/model/file-aggregator.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/file-aggregator.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: L. Felipe Perrone (perrone@bucknell.edu)
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/get-wildcard-matches.cc ns-3.43/src/stats/model/get-wildcard-matches.cc
--- ns-3.42/src/stats/model/get-wildcard-matches.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/get-wildcard-matches.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/get-wildcard-matches.h ns-3.43/src/stats/model/get-wildcard-matches.h
--- ns-3.42/src/stats/model/get-wildcard-matches.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/get-wildcard-matches.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/gnuplot-aggregator.cc ns-3.43/src/stats/model/gnuplot-aggregator.cc
--- ns-3.42/src/stats/model/gnuplot-aggregator.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/gnuplot-aggregator.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/gnuplot-aggregator.h ns-3.43/src/stats/model/gnuplot-aggregator.h
--- ns-3.42/src/stats/model/gnuplot-aggregator.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/gnuplot-aggregator.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: L. Felipe Perrone (perrone@bucknell.edu)
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/gnuplot.cc ns-3.43/src/stats/model/gnuplot.cc
--- ns-3.42/src/stats/model/gnuplot.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/gnuplot.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA, 2008 Timo Bingmann
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Enhancements: Timo Bingmann <timo.bingmann@student.kit.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/gnuplot.h ns-3.43/src/stats/model/gnuplot.h
--- ns-3.42/src/stats/model/gnuplot.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/gnuplot.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA, 2008 Timo Bingmann
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Original Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Enhancements: Timo Bingmann <timo.bingmann@student.kit.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/histogram.cc ns-3.43/src/stats/model/histogram.cc
--- ns-3.42/src/stats/model/histogram.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/histogram.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Pedro Fortuna  <pedro.fortuna@inescporto.pt> <pedro.fortuna@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/histogram.h ns-3.43/src/stats/model/histogram.h
--- ns-3.42/src/stats/model/histogram.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/histogram.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Pedro Fortuna  <pedro.fortuna@inescporto.pt> <pedro.fortuna@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/omnet-data-output.cc ns-3.43/src/stats/model/omnet-data-output.cc
--- ns-3.42/src/stats/model/omnet-data-output.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/omnet-data-output.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/omnet-data-output.h ns-3.43/src/stats/model/omnet-data-output.h
--- ns-3.42/src/stats/model/omnet-data-output.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/omnet-data-output.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/probe.cc ns-3.43/src/stats/model/probe.cc
--- ns-3.42/src/stats/model/probe.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/probe.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/probe.h ns-3.43/src/stats/model/probe.h
--- ns-3.42/src/stats/model/probe.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/probe.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/sqlite-data-output.cc ns-3.43/src/stats/model/sqlite-data-output.cc
--- ns-3.42/src/stats/model/sqlite-data-output.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/sqlite-data-output.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/sqlite-data-output.h ns-3.43/src/stats/model/sqlite-data-output.h
--- ns-3.42/src/stats/model/sqlite-data-output.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/sqlite-data-output.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/sqlite-output.cc ns-3.43/src/stats/model/sqlite-output.cc
--- ns-3.42/src/stats/model/sqlite-output.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/sqlite-output.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #include "sqlite-output.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/sqlite-output.h ns-3.43/src/stats/model/sqlite-output.h
--- ns-3.42/src/stats/model/sqlite-output.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/sqlite-output.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Natale Patriciello <natale.patriciello@gmail.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 #ifndef SQLITE_OUTPUT_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/stats.h ns-3.43/src/stats/model/stats.h
--- ns-3.42/src/stats/model/stats.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/stats.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 Universita' di Firenze
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/time-data-calculators.cc ns-3.43/src/stats/model/time-data-calculators.cc
--- ns-3.42/src/stats/model/time-data-calculators.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/time-data-calculators.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/time-data-calculators.h ns-3.43/src/stats/model/time-data-calculators.h
--- ns-3.42/src/stats/model/time-data-calculators.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/time-data-calculators.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 Drexel University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Joe Kopena (tjkopena@cs.drexel.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/time-probe.cc ns-3.43/src/stats/model/time-probe.cc
--- ns-3.42/src/stats/model/time-probe.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/time-probe.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/time-probe.h ns-3.43/src/stats/model/time-probe.h
--- ns-3.42/src/stats/model/time-probe.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/time-probe.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/time-series-adaptor.cc ns-3.43/src/stats/model/time-series-adaptor.cc
--- ns-3.42/src/stats/model/time-series-adaptor.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/time-series-adaptor.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/time-series-adaptor.h ns-3.43/src/stats/model/time-series-adaptor.h
--- ns-3.42/src/stats/model/time-series-adaptor.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/time-series-adaptor.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/uinteger-16-probe.cc ns-3.43/src/stats/model/uinteger-16-probe.cc
--- ns-3.42/src/stats/model/uinteger-16-probe.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/uinteger-16-probe.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/uinteger-16-probe.h ns-3.43/src/stats/model/uinteger-16-probe.h
--- ns-3.42/src/stats/model/uinteger-16-probe.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/uinteger-16-probe.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/uinteger-32-probe.cc ns-3.43/src/stats/model/uinteger-32-probe.cc
--- ns-3.42/src/stats/model/uinteger-32-probe.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/uinteger-32-probe.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/uinteger-32-probe.h ns-3.43/src/stats/model/uinteger-32-probe.h
--- ns-3.42/src/stats/model/uinteger-32-probe.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/uinteger-32-probe.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/uinteger-8-probe.cc ns-3.43/src/stats/model/uinteger-8-probe.cc
--- ns-3.42/src/stats/model/uinteger-8-probe.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/uinteger-8-probe.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/model/uinteger-8-probe.h ns-3.43/src/stats/model/uinteger-8-probe.h
--- ns-3.42/src/stats/model/uinteger-8-probe.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/model/uinteger-8-probe.h	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 Bucknell University
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: L. Felipe Perrone (perrone@bucknell.edu)
  *          Tiago G. Rodrigues (tgr002@bucknell.edu)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/test/average-test-suite.cc ns-3.43/src/stats/test/average-test-suite.cc
--- ns-3.42/src/stats/test/average-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/test/average-test-suite.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/test/basic-data-calculators-test-suite.cc ns-3.43/src/stats/test/basic-data-calculators-test-suite.cc
--- ns-3.42/src/stats/test/basic-data-calculators-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/test/basic-data-calculators-test-suite.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous (watrous@u.washington.edu)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/stats/test/histogram-test-suite.cc ns-3.43/src/stats/test/histogram-test-suite.cc
--- ns-3.42/src/stats/test/histogram-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/stats/test/histogram-test-suite.cc	2024-10-09 16:41:10.092656600 -0700
@@ -1,18 +1,7 @@
 //
 // Copyright (c) 2009 INESC Porto
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License version 2 as
-// published by the Free Software Foundation;
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+// SPDX-License-Identifier: GPL-2.0-only
 //
 // Author: Pedro Fortuna  <pedro.fortuna@inescporto.pt> <pedro.fortuna@gmail.com>
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/CMakeLists.txt ns-3.43/src/tap-bridge/CMakeLists.txt
--- ns-3.42/src/tap-bridge/CMakeLists.txt	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/CMakeLists.txt	2024-10-09 16:41:10.092656600 -0700
@@ -18,6 +18,10 @@
   return()
 endif()
 
+add_definitions(
+  -DTAP_CREATOR="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/src/tap-bridge/ns${NS3_VER}-tap-creator${build_profile_suffix}"
+)
+
 build_lib(
   LIBNAME tap-bridge
   SOURCE_FILES
@@ -31,9 +35,6 @@
   LIBRARIES_TO_LINK ${libinternet}
 )
 
-add_definitions(
-  -DTAP_CREATOR="${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/src/tap-bridge/ns${NS3_VER}-tap-creator${build_profile_suffix}"
-)
 build_exec(
   EXECNAME tap-creator
   SOURCE_FILES model/tap-creator.cc
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/examples/tap-csma.cc ns-3.43/src/tap-bridge/examples/tap-csma.cc
--- ns-3.42/src/tap-bridge/examples/tap-csma.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/examples/tap-csma.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/examples/tap-csma-virtual-machine.cc ns-3.43/src/tap-bridge/examples/tap-csma-virtual-machine.cc
--- ns-3.42/src/tap-bridge/examples/tap-csma-virtual-machine.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/examples/tap-csma-virtual-machine.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/examples/tap-csma-virtual-machine.py ns-3.43/src/tap-bridge/examples/tap-csma-virtual-machine.py
--- ns-3.42/src/tap-bridge/examples/tap-csma-virtual-machine.py	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/examples/tap-csma-virtual-machine.py	2024-10-09 16:41:10.096656600 -0700
@@ -2,18 +2,7 @@
 #
 # Copyright 2010 University of Washington
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 
 import sys
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/examples/tap-wifi-dumbbell.cc ns-3.43/src/tap-bridge/examples/tap-wifi-dumbbell.cc
--- ns-3.42/src/tap-bridge/examples/tap-wifi-dumbbell.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/examples/tap-wifi-dumbbell.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Network topology
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/examples/tap-wifi-virtual-machine.cc ns-3.43/src/tap-bridge/examples/tap-wifi-virtual-machine.cc
--- ns-3.42/src/tap-bridge/examples/tap-wifi-virtual-machine.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/examples/tap-wifi-virtual-machine.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 //
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/examples/tap-wifi-virtual-machine.py ns-3.43/src/tap-bridge/examples/tap-wifi-virtual-machine.py
--- ns-3.42/src/tap-bridge/examples/tap-wifi-virtual-machine.py	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/examples/tap-wifi-virtual-machine.py	2024-10-09 16:41:10.096656600 -0700
@@ -2,18 +2,7 @@
 #
 # Copyright 2010 University of Washington
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 
 import sys
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/helper/tap-bridge-helper.cc ns-3.43/src/tap-bridge/helper/tap-bridge-helper.cc
--- ns-3.42/src/tap-bridge/helper/tap-bridge-helper.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/helper/tap-bridge-helper.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "tap-bridge-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/helper/tap-bridge-helper.h ns-3.43/src/tap-bridge/helper/tap-bridge-helper.h
--- ns-3.42/src/tap-bridge/helper/tap-bridge-helper.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/helper/tap-bridge-helper.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef TAP_BRIDGE_HELPER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/model/tap-bridge.cc ns-3.43/src/tap-bridge/model/tap-bridge.cc
--- ns-3.42/src/tap-bridge/model/tap-bridge.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/model/tap-bridge.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "tap-bridge.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/model/tap-bridge.h ns-3.43/src/tap-bridge/model/tap-bridge.h
--- ns-3.42/src/tap-bridge/model/tap-bridge.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/model/tap-bridge.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef TAP_BRIDGE_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/model/tap-creator.cc ns-3.43/src/tap-bridge/model/tap-creator.cc
--- ns-3.42/src/tap-bridge/model/tap-creator.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/model/tap-creator.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "tap-encode-decode.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/model/tap-encode-decode.cc ns-3.43/src/tap-bridge/model/tap-encode-decode.cc
--- ns-3.42/src/tap-bridge/model/tap-encode-decode.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/model/tap-encode-decode.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include <iomanip>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/tap-bridge/model/tap-encode-decode.h ns-3.43/src/tap-bridge/model/tap-encode-decode.h
--- ns-3.42/src/tap-bridge/model/tap-encode-decode.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/tap-bridge/model/tap-encode-decode.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef TAP_ENCODE_DECODE_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/CMakeLists.txt ns-3.43/src/test/CMakeLists.txt
--- ns-3.42/src/test/CMakeLists.txt	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/CMakeLists.txt	2024-10-09 16:41:10.096656600 -0700
@@ -89,7 +89,7 @@
 endif()
 
 add_library(
-  ${libtest}
+  test
   OBJECT
   ${PROJECT_SOURCE_DIR}/build-support/empty.cc # empty source file if only
   # libcore is enabled
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/csma-system-test-suite.cc ns-3.43/src/test/csma-system-test-suite.cc
--- ns-3.42/src/test/csma-system-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/csma-system-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // This is not a test of CsmaNetDevice model behavior per-se, but
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/doc/tests.h ns-3.43/src/test/doc/tests.h
--- ns-3.42/src/test/doc/tests.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/doc/tests.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tc/fq-cobalt-queue-disc-test-suite.cc ns-3.43/src/test/ns3tc/fq-cobalt-queue-disc-test-suite.cc
--- ns-3.42/src/test/ns3tc/fq-cobalt-queue-disc-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tc/fq-cobalt-queue-disc-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  * Copyright (c) 2020 NITK Surathkal (adapted for COBALT)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tc/fq-codel-queue-disc-test-suite.cc ns-3.43/src/test/ns3tc/fq-codel-queue-disc-test-suite.cc
--- ns-3.42/src/test/ns3tc/fq-codel-queue-disc-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tc/fq-codel-queue-disc-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tc/fq-pie-queue-disc-test-suite.cc ns-3.43/src/test/ns3tc/fq-pie-queue-disc-test-suite.cc
--- ns-3.42/src/test/ns3tc/fq-pie-queue-disc-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tc/fq-pie-queue-disc-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  * Copyright (c) 2020 NITK Surathkal (modified for FQ-PIE)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tc/pfifo-fast-queue-disc-test-suite.cc ns-3.43/src/test/ns3tc/pfifo-fast-queue-disc-test-suite.cc
--- ns-3.42/src/test/ns3tc/pfifo-fast-queue-disc-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tc/pfifo-fast-queue-disc-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tcp/ns3tcp-cubic-test-suite.cc ns-3.43/src/test/ns3tcp/ns3tcp-cubic-test-suite.cc
--- ns-3.42/src/test/ns3tcp/ns3tcp-cubic-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tcp/ns3tcp-cubic-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2018-20 NITK Surathkal (topology setup)
  * Copyright (c) 2024 Tom Henderson (test definition)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 // Test suite based on tcp-bbr-example.cc modified topology setup:
@@ -359,7 +348,7 @@
     if (m_prefix == "ns3-tcp-cubic-no-heuristic")
     {
         // Check overall min and max
-        NS_TEST_ASSERT_MSG_EQ(CheckValues(Seconds(1), Seconds(19), 50, 90),
+        NS_TEST_ASSERT_MSG_EQ(CheckValues(Seconds(1), Seconds(19), 60, 98),
                               true,
                               "cwnd outside range");
         // Time just before a reduction does not have much variation
@@ -370,7 +359,7 @@
     else if (m_prefix == "ns3-tcp-cubic-fast-conv")
     {
         // Check overall min and max
-        NS_TEST_ASSERT_MSG_EQ(CheckValues(Seconds(1), Seconds(19), 50, 90),
+        NS_TEST_ASSERT_MSG_EQ(CheckValues(Seconds(1), Seconds(19), 60, 98),
                               true,
                               "cwnd outside range");
         // Initial convex region does not have much variation
@@ -386,7 +375,7 @@
                               true,
                               "cwnd outside range");
         // After time 17.5, cwnd should have grown much higher
-        NS_TEST_ASSERT_MSG_EQ(CheckValues(Seconds(17.5), Seconds(18.5), 170, 215),
+        NS_TEST_ASSERT_MSG_EQ(CheckValues(Seconds(17.5), Seconds(18.5), 169, 215),
                               true,
                               "cwnd outside range");
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tcp/ns3tcp-loss-test-suite.cc ns-3.43/src/test/ns3tcp/ns3tcp-loss-test-suite.cc
--- ns-3.42/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tcp/ns3tcp-loss-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3tcp-socket-writer.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tcp/ns3tcp-no-delay-test-suite.cc ns-3.43/src/test/ns3tcp/ns3tcp-no-delay-test-suite.cc
--- ns-3.42/src/test/ns3tcp/ns3tcp-no-delay-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tcp/ns3tcp-no-delay-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3tcp-socket-writer.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tcp/ns3tcp-socket-test-suite.cc ns-3.43/src/test/ns3tcp/ns3tcp-socket-test-suite.cc
--- ns-3.42/src/test/ns3tcp/ns3tcp-socket-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tcp/ns3tcp-socket-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3tcp-socket-writer.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tcp/ns3tcp-socket-writer.cc ns-3.43/src/test/ns3tcp/ns3tcp-socket-writer.cc
--- ns-3.42/src/test/ns3tcp/ns3tcp-socket-writer.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tcp/ns3tcp-socket-writer.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3tcp-socket-writer.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tcp/ns3tcp-socket-writer.h ns-3.43/src/test/ns3tcp/ns3tcp-socket-writer.h
--- ns-3.42/src/test/ns3tcp/ns3tcp-socket-writer.h	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tcp/ns3tcp-socket-writer.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/address.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tcp/ns3tcp-state-test-suite.cc ns-3.43/src/test/ns3tcp/ns3tcp-state-test-suite.cc
--- ns-3.42/src/test/ns3tcp/ns3tcp-state-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tcp/ns3tcp-state-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3tcp-socket-writer.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tcp/plot.gp ns-3.43/src/test/ns3tcp/plot.gp
--- ns-3.42/src/test/ns3tcp/plot.gp	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tcp/plot.gp	2024-10-09 16:41:10.096656600 -0700
@@ -2,20 +2,7 @@
 # *
 # * Copyright (c) 2010 Adrian Sai-wah Tam
 # *
-# * This program is free software; you can redistribute it and/or modify
-# * it under the terms of the GNU General Public License version 2 as
-# * published by the Free Software Foundation;
-# *
-# * This program is distributed in the hope that it will be useful,
-# * but WITHOUT ANY WARRANTY; without even the implied warranty of
-# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# * GNU General Public License for more details.
-# *
-# * You should have received a copy of the GNU General Public
-# * License
-# * along with this program; if not, write to the Free Software
-# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-# * 02111-1307  USA
+# * SPDX-License-Identifier: GPL-2.0-only
 # *
 # * This gnuplot file is used to plot a number of graphs from the
 # * Ns3TcpLossTestCases. In order to run this properly, the
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3tcp/trTidy.pl ns-3.43/src/test/ns3tcp/trTidy.pl
--- ns-3.42/src/test/ns3tcp/trTidy.pl	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3tcp/trTidy.pl	2024-10-09 16:41:10.096656600 -0700
@@ -3,20 +3,7 @@
 # *
 # * Copyright (c) 2010 Adrian Sai-wah Tam
 # *
-# * This program is free software; you can redistribute it and/or modify
-# * it under the terms of the GNU General Public License version 2 as
-# * published by the Free Software Foundation;
-# *
-# * This program is distributed in the hope that it will be useful,
-# * but WITHOUT ANY WARRANTY; without even the implied warranty of
-# * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# * GNU General Public License for more details.
-# *
-# * You should have received a copy of the GNU General Public
-# * License
-# * along with this program; if not, write to the Free Software
-# * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
-# * 02111-1307  USA
+# * SPDX-License-Identifier: GPL-2.0-only
 # *
 # * This perl script is used within plot.gp, a gnuplot file also
 # * in this directory, for parsing the Ns3TcpLossTest logging output.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3wifi/wifi-ac-mapping-test-suite.cc ns-3.43/src/test/ns3wifi/wifi-ac-mapping-test-suite.cc
--- ns-3.42/src/test/ns3wifi/wifi-ac-mapping-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3wifi/wifi-ac-mapping-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3wifi/wifi-issue-211-test-suite.cc ns-3.43/src/test/ns3wifi/wifi-issue-211-test-suite.cc
--- ns-3.42/src/test/ns3wifi/wifi-issue-211-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3wifi/wifi-issue-211-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Stefano Avallone <stavallo@unina.it>
  *          Rémy Grünblatt <remy@grunblatt.org>
@@ -153,7 +142,7 @@
     NetDeviceContainer apDevices = wifi.Install(phy, mac, wifiApNode);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(apDevices, streamNumber);
+    WifiHelper::AssignStreams(apDevices, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc ns-3.43/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc
--- ns-3.42/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/ns3wifi/wifi-msdu-aggregator-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Dean Armstrong
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Dean Armstrong <deanarm@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/traced/traced-callback-typedef-test-suite.cc ns-3.43/src/test/traced/traced-callback-typedef-test-suite.cc
--- ns-3.42/src/test/traced/traced-callback-typedef-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/traced/traced-callback-typedef-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
@@ -26,6 +15,7 @@
 #include <set>
 #include <sstream>
 #include <string>
+#include <type_traits>
 // Ipv6L3Protocol, Ipv6PacketProbe
 #include "ns3/lr-wpan-mac.h"      // LrWpanMac
 #include "ns3/lte-module.h"       // PhyReceptionStatParameters,
@@ -282,7 +272,7 @@
     ~Checker() override{};
 
     /// Arguments of the TracedCallback.
-    std::tuple<typename TypeTraits<Ts>::BaseType...> m_items;
+    std::tuple<std::remove_pointer_t<std::remove_cvref_t<Ts>>...> m_items;
 
     /// Number of arguments of the TracedCallback.
     const std::size_t m_nItems = sizeof...(Ts);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/test/traced/traced-value-callback-typedef-test-suite.cc ns-3.43/src/test/traced/traced-value-callback-typedef-test-suite.cc
--- ns-3.42/src/test/traced/traced-value-callback-typedef-test-suite.cc	2024-05-29 15:29:47.176073800 -0700
+++ ns-3.43/src/test/traced/traced-value-callback-typedef-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Lawrence Livermore National Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/examples/topology-example-sim.cc ns-3.43/src/topology-read/examples/topology-example-sim.cc
--- ns-3.42/src/topology-read/examples/topology-example-sim.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/examples/topology-example-sim.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
  * Author: Valerio Sartini <valesar@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/helper/topology-reader-helper.cc ns-3.43/src/topology-read/helper/topology-reader-helper.cc
--- ns-3.42/src/topology-read/helper/topology-reader-helper.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/helper/topology-reader-helper.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella (tommaso.pecorella@unifi.it)
  * Author: Valerio Sartini (valesar@gmail.com)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/helper/topology-reader-helper.h ns-3.43/src/topology-read/helper/topology-reader-helper.h
--- ns-3.42/src/topology-read/helper/topology-reader-helper.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/helper/topology-reader-helper.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella (tommaso.pecorella@unifi.it)
  * Author: Valerio Sartini (valesar@gmail.com)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/model/inet-topology-reader.cc ns-3.43/src/topology-read/model/inet-topology-reader.cc
--- ns-3.42/src/topology-read/model/inet-topology-reader.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/model/inet-topology-reader.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella (tommaso.pecorella@unifi.it)
  * Author: Valerio Sartini (Valesar@gmail.com)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/model/inet-topology-reader.h ns-3.43/src/topology-read/model/inet-topology-reader.h
--- ns-3.42/src/topology-read/model/inet-topology-reader.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/model/inet-topology-reader.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella (tommaso.pecorella@unifi.it)
  * Author: Valerio Sartini (valesar@gmail.com)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/model/orbis-topology-reader.cc ns-3.43/src/topology-read/model/orbis-topology-reader.cc
--- ns-3.42/src/topology-read/model/orbis-topology-reader.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/model/orbis-topology-reader.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella (tommaso.pecorella@unifi.it)
  * Author: Valerio Sartini (valesar@gmail.com)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/model/orbis-topology-reader.h ns-3.43/src/topology-read/model/orbis-topology-reader.h
--- ns-3.42/src/topology-read/model/orbis-topology-reader.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/model/orbis-topology-reader.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella (tommaso.pecorella@unifi.it)
  * Author: Valerio Sartini (valesar@gmail.com)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/model/rocketfuel-topology-reader.cc ns-3.43/src/topology-read/model/rocketfuel-topology-reader.cc
--- ns-3.42/src/topology-read/model/rocketfuel-topology-reader.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/model/rocketfuel-topology-reader.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hajime Tazaki (tazaki@sfc.wide.ad.jp)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/model/rocketfuel-topology-reader.h ns-3.43/src/topology-read/model/rocketfuel-topology-reader.h
--- ns-3.42/src/topology-read/model/rocketfuel-topology-reader.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/model/rocketfuel-topology-reader.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hajime Tazaki (tazaki@sfc.wide.ad.jp)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/model/topology-reader.cc ns-3.43/src/topology-read/model/topology-reader.cc
--- ns-3.42/src/topology-read/model/topology-reader.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/model/topology-reader.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella (tommaso.pecorella@unifi.it)
  * Author: Valerio Sartini (valesar@gmail.com)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/model/topology-reader.h ns-3.43/src/topology-read/model/topology-reader.h
--- ns-3.42/src/topology-read/model/topology-reader.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/model/topology-reader.h	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Universita' di Firenze, Italy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tommaso Pecorella (tommaso.pecorella@unifi.it)
  * Author: Valerio Sartini (valesar@gmail.com)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/topology-read/test/rocketfuel-topology-reader-test-suite.cc ns-3.43/src/topology-read/test/rocketfuel-topology-reader-test-suite.cc
--- ns-3.42/src/topology-read/test/rocketfuel-topology-reader-test-suite.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/topology-read/test/rocketfuel-topology-reader-test-suite.cc	2024-10-09 16:41:10.096656600 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Hajime Tazaki
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hajime Tazaki (tazaki@sfc.wide.ad.jp)
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/examples/adaptive-red-tests.cc ns-3.43/src/traffic-control/examples/adaptive-red-tests.cc
--- ns-3.42/src/traffic-control/examples/adaptive-red-tests.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/examples/adaptive-red-tests.cc	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
 /*
  * Copyright (c) 2015 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohit P. Tahiliani <tahiliani@nitk.edu.in>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc ns-3.43/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc
--- ns-3.42/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/examples/codel-vs-pfifo-asymmetric.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N Nguyen <trucanh524@gmail.com>
  * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc ns-3.43/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc
--- ns-3.42/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/examples/codel-vs-pfifo-basic-test.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N Nguyen <trucanh524@gmail.com>
  * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/examples/fqcodel-l4s-example.cc ns-3.43/src/traffic-control/examples/fqcodel-l4s-example.cc
--- ns-3.42/src/traffic-control/examples/fqcodel-l4s-example.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/examples/fqcodel-l4s-example.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Bhaskar Kataria <bhaskar.k7920@gmail.com>
  *          Tom Henderson <tomhend@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/examples/pfifo-vs-red.cc ns-3.43/src/traffic-control/examples/pfifo-vs-red.cc
--- ns-3.42/src/traffic-control/examples/pfifo-vs-red.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/examples/pfifo-vs-red.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: John Abraham <john.abraham@gatech.edu>
  * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/examples/pie-example.cc ns-3.43/src/traffic-control/examples/pie-example.cc
--- ns-3.42/src/traffic-control/examples/pie-example.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/examples/pie-example.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Shravya Ks <shravya.ks0@gmail.com>
  *          Smriti Murali <m.smriti.95@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/examples/red-tests.cc ns-3.43/src/traffic-control/examples/red-tests.cc
--- ns-3.42/src/traffic-control/examples/red-tests.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/examples/red-tests.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Marcos Talau <talau@users.sourceforge.net>
  *          Duy Nguyen <duy@soe.ucsc.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/examples/red-vs-ared.cc ns-3.43/src/traffic-control/examples/red-vs-ared.cc
--- ns-3.42/src/traffic-control/examples/red-vs-ared.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/examples/red-vs-ared.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohit P. Tahiliani <tahiliani@nitk.edu.in>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/helper/queue-disc-container.cc ns-3.43/src/traffic-control/helper/queue-disc-container.cc
--- ns-3.42/src/traffic-control/helper/queue-disc-container.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/helper/queue-disc-container.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/helper/queue-disc-container.h ns-3.43/src/traffic-control/helper/queue-disc-container.h
--- ns-3.42/src/traffic-control/helper/queue-disc-container.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/helper/queue-disc-container.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/helper/traffic-control-helper.cc ns-3.43/src/traffic-control/helper/traffic-control-helper.cc
--- ns-3.42/src/traffic-control/helper/traffic-control-helper.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/helper/traffic-control-helper.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/helper/traffic-control-helper.h ns-3.43/src/traffic-control/helper/traffic-control-helper.h
--- ns-3.42/src/traffic-control/helper/traffic-control-helper.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/helper/traffic-control-helper.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/cobalt-queue-disc.cc ns-3.43/src/traffic-control/model/cobalt-queue-disc.cc
--- ns-3.42/src/traffic-control/model/cobalt-queue-disc.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/cobalt-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Cobalt, the CoDel - BLUE - Alternate Queueing discipline
  * Based on linux code.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/cobalt-queue-disc.h ns-3.43/src/traffic-control/model/cobalt-queue-disc.h
--- ns-3.42/src/traffic-control/model/cobalt-queue-disc.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/cobalt-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Cobalt, the CoDel - BLUE - Alternate Queueing discipline
  * Based on linux code.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/codel-queue-disc.cc ns-3.43/src/traffic-control/model/codel-queue-disc.cc
--- ns-3.42/src/traffic-control/model/codel-queue-disc.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/codel-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Andrew McGregor
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Codel, the COntrolled DELay Queueing discipline
  * Based on ns2 simulation code presented by Kathie Nichols
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/codel-queue-disc.h ns-3.43/src/traffic-control/model/codel-queue-disc.h
--- ns-3.42/src/traffic-control/model/codel-queue-disc.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/codel-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 Andrew McGregor
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Codel, the COntrolled DELay Queueing discipline
  * Based on ns2 simulation code presented by Kathie Nichols
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/fifo-queue-disc.cc ns-3.43/src/traffic-control/model/fifo-queue-disc.cc
--- ns-3.42/src/traffic-control/model/fifo-queue-disc.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/fifo-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/fifo-queue-disc.h ns-3.43/src/traffic-control/model/fifo-queue-disc.h
--- ns-3.42/src/traffic-control/model/fifo-queue-disc.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/fifo-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/fq-cobalt-queue-disc.cc ns-3.43/src/traffic-control/model/fq-cobalt-queue-disc.cc
--- ns-3.42/src/traffic-control/model/fq-cobalt-queue-disc.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/fq-cobalt-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  * Copyright (c) 2020 NITK Surathkal (adapted for COBALT)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/fq-cobalt-queue-disc.h ns-3.43/src/traffic-control/model/fq-cobalt-queue-disc.h
--- ns-3.42/src/traffic-control/model/fq-cobalt-queue-disc.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/fq-cobalt-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  * Copyright (c) 2020 NITK Surathkal (adapted for COBALT)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/fq-codel-queue-disc.cc ns-3.43/src/traffic-control/model/fq-codel-queue-disc.cc
--- ns-3.42/src/traffic-control/model/fq-codel-queue-disc.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/fq-codel-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/fq-codel-queue-disc.h ns-3.43/src/traffic-control/model/fq-codel-queue-disc.h
--- ns-3.42/src/traffic-control/model/fq-codel-queue-disc.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/fq-codel-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/fq-pie-queue-disc.cc ns-3.43/src/traffic-control/model/fq-pie-queue-disc.cc
--- ns-3.42/src/traffic-control/model/fq-pie-queue-disc.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/fq-pie-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  * Copyright (c) 2018 NITK Surathkal (modified for FQ-PIE)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/fq-pie-queue-disc.h ns-3.43/src/traffic-control/model/fq-pie-queue-disc.h
--- ns-3.42/src/traffic-control/model/fq-pie-queue-disc.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/fq-pie-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  * Copyright (c) 2018 NITK Surathkal (modified for FQ-PIE)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stefano.avallone@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/mq-queue-disc.cc ns-3.43/src/traffic-control/model/mq-queue-disc.cc
--- ns-3.42/src/traffic-control/model/mq-queue-disc.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/mq-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stavallo@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/mq-queue-disc.h ns-3.43/src/traffic-control/model/mq-queue-disc.h
--- ns-3.42/src/traffic-control/model/mq-queue-disc.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/mq-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Pasquale Imputato <p.imputato@gmail.com>
  *          Stefano Avallone <stavallo@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/packet-filter.cc ns-3.43/src/traffic-control/model/packet-filter.cc
--- ns-3.42/src/traffic-control/model/packet-filter.cc	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/packet-filter.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "packet-filter.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/packet-filter.h ns-3.43/src/traffic-control/model/packet-filter.h
--- ns-3.42/src/traffic-control/model/packet-filter.h	2024-05-29 15:29:47.180073700 -0700
+++ ns-3.43/src/traffic-control/model/packet-filter.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef PACKET_FILTER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/pfifo-fast-queue-disc.cc ns-3.43/src/traffic-control/model/pfifo-fast-queue-disc.cc
--- ns-3.42/src/traffic-control/model/pfifo-fast-queue-disc.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/pfifo-fast-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007, 2014 University of Washington
  *               2015 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/pfifo-fast-queue-disc.h ns-3.43/src/traffic-control/model/pfifo-fast-queue-disc.h
--- ns-3.42/src/traffic-control/model/pfifo-fast-queue-disc.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/pfifo-fast-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007, 2014 University of Washington
  *               2015 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  *           Tom Henderson <tomhend@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/pie-queue-disc.cc ns-3.43/src/traffic-control/model/pie-queue-disc.cc
--- ns-3.42/src/traffic-control/model/pie-queue-disc.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/pie-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Shravya Ks <shravya.ks0@gmail.com>
  *          Smriti Murali <m.smriti.95@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/pie-queue-disc.h ns-3.43/src/traffic-control/model/pie-queue-disc.h
--- ns-3.42/src/traffic-control/model/pie-queue-disc.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/pie-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Shravya Ks <shravya.ks0@gmail.com>
  *          Smriti Murali <m.smriti.95@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/prio-queue-disc.cc ns-3.43/src/traffic-control/model/prio-queue-disc.cc
--- ns-3.42/src/traffic-control/model/prio-queue-disc.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/prio-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/prio-queue-disc.h ns-3.43/src/traffic-control/model/prio-queue-disc.h
--- ns-3.42/src/traffic-control/model/prio-queue-disc.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/prio-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors:  Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/queue-disc.cc ns-3.43/src/traffic-control/model/queue-disc.cc
--- ns-3.42/src/traffic-control/model/queue-disc.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007, 2014 University of Washington
  *               2015 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "queue-disc.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/queue-disc.h ns-3.43/src/traffic-control/model/queue-disc.h
--- ns-3.42/src/traffic-control/model/queue-disc.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007, 2014 University of Washington
  *               2015 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef QUEUE_DISC_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/red-queue-disc.cc ns-3.43/src/traffic-control/model/red-queue-disc.cc
--- ns-3.42/src/traffic-control/model/red-queue-disc.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/red-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright © 2011 Marcos Talau
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marcos Talau (talau@users.sourceforge.net)
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/red-queue-disc.h ns-3.43/src/traffic-control/model/red-queue-disc.h
--- ns-3.42/src/traffic-control/model/red-queue-disc.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/red-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright © 2011 Marcos Talau
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marcos Talau (talau@users.sourceforge.net)
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/tbf-queue-disc.cc ns-3.43/src/traffic-control/model/tbf-queue-disc.cc
--- ns-3.42/src/traffic-control/model/tbf-queue-disc.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/tbf-queue-disc.cc	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2017 Kungliga Tekniska Högskolan
  *               2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * TBF, The Token Bucket Filter Queueing discipline
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/tbf-queue-disc.h ns-3.43/src/traffic-control/model/tbf-queue-disc.h
--- ns-3.42/src/traffic-control/model/tbf-queue-disc.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/tbf-queue-disc.h	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2017 Kungliga Tekniska Högskolan
  *               2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * TBF, The Token Bucket Filter Queueing discipline
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/traffic-control-layer.cc ns-3.43/src/traffic-control/model/traffic-control-layer.cc
--- ns-3.42/src/traffic-control/model/traffic-control-layer.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/traffic-control-layer.cc	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *               2016 Stefano Avallone <stavallo@unina.it>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "traffic-control-layer.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/model/traffic-control-layer.h ns-3.43/src/traffic-control/model/traffic-control-layer.h
--- ns-3.42/src/traffic-control/model/traffic-control-layer.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/model/traffic-control-layer.h	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2015 Natale Patriciello <natale.patriciello@gmail.com>
  *               2016 Stefano Avallone <stavallo@unina.it>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 #ifndef TRAFFICCONTROLLAYER_H
 #define TRAFFICCONTROLLAYER_H
@@ -63,20 +52,26 @@
  * their Receive callback through RegisterProtocolHandler) and NetDevices.
  *
  * An example of the IN connection between this layer and IP layer is the following:
- *\verbatim
-  Ptr<TrafficControlLayer> tc = m_node->GetObject<TrafficControlLayer> ();
+ * \code{.cpp}
+   Ptr<TrafficControlLayer> tc = m_node->GetObject<TrafficControlLayer>();
 
-  NS_ASSERT (tc != 0);
+   NS_ASSERT(tc != nullptr);
 
-  m_node->RegisterProtocolHandler (MakeCallback (&TrafficControlLayer::Receive, tc),
-                                   Ipv4L3Protocol::PROT_NUMBER, device);
-  m_node->RegisterProtocolHandler (MakeCallback (&TrafficControlLayer::Receive, tc),
-                                   ArpL3Protocol::PROT_NUMBER, device);
-
-  tc->RegisterProtocolHandler (MakeCallback (&Ipv4L3Protocol::Receive, this),
-                               Ipv4L3Protocol::PROT_NUMBER, device);
-  tc->RegisterProtocolHandler (MakeCallback (&ArpL3Protocol::Receive, PeekPointer
- (GetObject<ArpL3Protocol> ())), ArpL3Protocol::PROT_NUMBER, device); \endverbatim
+   m_node->RegisterProtocolHandler(MakeCallback(&TrafficControlLayer::Receive, tc),
+                                   Ipv4L3Protocol::PROT_NUMBER,
+                                   device);
+   m_node->RegisterProtocolHandler(MakeCallback(&TrafficControlLayer::Receive, tc),
+                                   ArpL3Protocol::PROT_NUMBER,
+                                   device);
+
+   tc->RegisterProtocolHandler(MakeCallback(&Ipv4L3Protocol::Receive, this),
+                               Ipv4L3Protocol::PROT_NUMBER,
+                               device);
+   tc->RegisterProtocolHandler(
+       MakeCallback(&ArpL3Protocol::Receive, PeekPointer(GetObject<ArpL3Protocol>())),
+       ArpL3Protocol::PROT_NUMBER,
+       device);
+   \endcode
  * On the node, for IPv4 and ARP packet, is registered the
  * TrafficControlLayer::Receive callback. At the same time, on the TrafficControlLayer
  * object, is registered the callbacks associated to the upper layers (IPv4 or ARP).
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/adaptive-red-queue-disc-test-suite.cc ns-3.43/src/traffic-control/test/adaptive-red-queue-disc-test-suite.cc
--- ns-3.42/src/traffic-control/test/adaptive-red-queue-disc-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/adaptive-red-queue-disc-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohit P. Tahiliani <tahiliani@nitk.edu.in>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/cobalt-queue-disc-test-suite.cc ns-3.43/src/traffic-control/test/cobalt-queue-disc-test-suite.cc
--- ns-3.42/src/traffic-control/test/cobalt-queue-disc-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/cobalt-queue-disc-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Ported to ns-3 by: Vignesh Kannan <vignesh2496@gmail.com>
  *                    Harsh Lara <harshapplefan@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/codel-queue-disc-test-suite.cc ns-3.43/src/traffic-control/test/codel-queue-disc-test-suite.cc
--- ns-3.42/src/traffic-control/test/codel-queue-disc-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/codel-queue-disc-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 ResiliNets, ITTC, University of Kansas
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Truc Anh N Nguyen <trucanh524@gmail.com>
  * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/fifo-queue-disc-test-suite.cc ns-3.43/src/traffic-control/test/fifo-queue-disc-test-suite.cc
--- ns-3.42/src/traffic-control/test/fifo-queue-disc-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/fifo-queue-disc-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Stefano Avallone <stavallo@unina.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/pie-queue-disc-test-suite.cc ns-3.43/src/traffic-control/test/pie-queue-disc-test-suite.cc
--- ns-3.42/src/traffic-control/test/pie-queue-disc-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/pie-queue-disc-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 NITK Surathkal
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Shravya Ks <shravya.ks0@gmail.com>
  *          Smriti Murali <m.smriti.95@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/prio-queue-disc-test-suite.cc ns-3.43/src/traffic-control/test/prio-queue-disc-test-suite.cc
--- ns-3.42/src/traffic-control/test/prio-queue-disc-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/prio-queue-disc-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Stefano Avallone <stavallo@unina.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/queue-disc-traces-test-suite.cc ns-3.43/src/traffic-control/test/queue-disc-traces-test-suite.cc
--- ns-3.42/src/traffic-control/test/queue-disc-traces-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/queue-disc-traces-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Stefano Avallone <stavallo@unina.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/red-queue-disc-test-suite.cc ns-3.43/src/traffic-control/test/red-queue-disc-test-suite.cc
--- ns-3.42/src/traffic-control/test/red-queue-disc-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/red-queue-disc-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright © 2011 Marcos Talau
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Marcos Talau (talau@users.sourceforge.net)
  * Modified by:   Pasquale Imputato <p.imputato@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/tbf-queue-disc-test-suite.cc ns-3.43/src/traffic-control/test/tbf-queue-disc-test-suite.cc
--- ns-3.42/src/traffic-control/test/tbf-queue-disc-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/tbf-queue-disc-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2017 Kungliga Tekniska Högskolan
  *               2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Surya Seetharaman <suryaseetharaman.9@gmail.com>
  *          Stefano Avallone <stavallo@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/traffic-control/test/tc-flow-control-test-suite.cc ns-3.43/src/traffic-control/test/tc-flow-control-test-suite.cc
--- ns-3.42/src/traffic-control/test/tc-flow-control-test-suite.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/traffic-control/test/tc-flow-control-test-suite.cc	2024-10-09 16:41:10.100656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/examples/uan-6lowpan-example.cc ns-3.43/src/uan/examples/uan-6lowpan-example.cc
--- ns-3.42/src/uan/examples/uan-6lowpan-example.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/examples/uan-6lowpan-example.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,17 +1,6 @@
 /*
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hossam Khader <hossamkhader@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/examples/uan-cw-example.cc ns-3.43/src/uan/examples/uan-cw-example.cc
--- ns-3.42/src/uan/examples/uan-cw-example.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/examples/uan-cw-example.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/examples/uan-cw-example.h ns-3.43/src/uan/examples/uan-cw-example.h
--- ns-3.42/src/uan/examples/uan-cw-example.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/examples/uan-cw-example.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/examples/uan-ipv4-example.cc ns-3.43/src/uan/examples/uan-ipv4-example.cc
--- ns-3.42/src/uan/examples/uan-ipv4-example.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/examples/uan-ipv4-example.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,17 +1,6 @@
 /*
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hossam Khader <hossamkhader@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/examples/uan-ipv6-example.cc ns-3.43/src/uan/examples/uan-ipv6-example.cc
--- ns-3.42/src/uan/examples/uan-ipv6-example.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/examples/uan-ipv6-example.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,17 +1,6 @@
 /*
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hossam Khader <hossamkhader@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/examples/uan-raw-example.cc ns-3.43/src/uan/examples/uan-raw-example.cc
--- ns-3.42/src/uan/examples/uan-raw-example.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/examples/uan-raw-example.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,17 +1,6 @@
 /*
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Hossam Khader <hossamkhader@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/examples/uan-rc-example.cc ns-3.43/src/uan/examples/uan-rc-example.cc
--- ns-3.42/src/uan/examples/uan-rc-example.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/examples/uan-rc-example.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/examples/uan-rc-example.h ns-3.43/src/uan/examples/uan-rc-example.h
--- ns-3.42/src/uan/examples/uan-rc-example.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/examples/uan-rc-example.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/helper/acoustic-modem-energy-model-helper.cc ns-3.43/src/uan/helper/acoustic-modem-energy-model-helper.cc
--- ns-3.42/src/uan/helper/acoustic-modem-energy-model-helper.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/helper/acoustic-modem-energy-model-helper.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/helper/acoustic-modem-energy-model-helper.h ns-3.43/src/uan/helper/acoustic-modem-energy-model-helper.h
--- ns-3.42/src/uan/helper/acoustic-modem-energy-model-helper.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/helper/acoustic-modem-energy-model-helper.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/helper/uan-helper.cc ns-3.43/src/uan/helper/uan-helper.cc
--- ns-3.42/src/uan/helper/uan-helper.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/helper/uan-helper.cc	2024-10-09 16:41:10.104656700 -0700
@@ -3,18 +3,7 @@
  *
  *  Copyright (c) 2008 University of Washington
  *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License version 2 as
- *  published by the Free Software Foundation;
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *  SPDX-License-Identifier: GPL-2.0-only
  *
  *  Created on: 9-Oct-2008
  *  Author: Leonard Tracy <lentracy@u.washington.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/helper/uan-helper.h ns-3.43/src/uan/helper/uan-helper.h
--- ns-3.42/src/uan/helper/uan-helper.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/helper/uan-helper.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/acoustic-modem-energy-model.cc ns-3.43/src/uan/model/acoustic-modem-energy-model.cc
--- ns-3.42/src/uan/model/acoustic-modem-energy-model.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/acoustic-modem-energy-model.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/acoustic-modem-energy-model.h ns-3.43/src/uan/model/acoustic-modem-energy-model.h
--- ns-3.42/src/uan/model/acoustic-modem-energy-model.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/acoustic-modem-energy-model.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-channel.cc ns-3.43/src/uan/model/uan-channel.cc
--- ns-3.42/src/uan/model/uan-channel.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-channel.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-channel.h ns-3.43/src/uan/model/uan-channel.h
--- ns-3.42/src/uan/model/uan-channel.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-channel.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-header-common.cc ns-3.43/src/uan/model/uan-header-common.cc
--- ns-3.42/src/uan/model/uan-header-common.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-header-common.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-header-common.h ns-3.43/src/uan/model/uan-header-common.h
--- ns-3.42/src/uan/model/uan-header-common.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-header-common.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-header-rc.cc ns-3.43/src/uan/model/uan-header-rc.cc
--- ns-3.42/src/uan/model/uan-header-rc.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-header-rc.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-header-rc.h ns-3.43/src/uan/model/uan-header-rc.h
--- ns-3.42/src/uan/model/uan-header-rc.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-header-rc.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac-aloha.cc ns-3.43/src/uan/model/uan-mac-aloha.cc
--- ns-3.42/src/uan/model/uan-mac-aloha.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac-aloha.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac-aloha.h ns-3.43/src/uan/model/uan-mac-aloha.h
--- ns-3.42/src/uan/model/uan-mac-aloha.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac-aloha.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac.cc ns-3.43/src/uan/model/uan-mac.cc
--- ns-3.42/src/uan/model/uan-mac.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous <watrous@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac-cw.cc ns-3.43/src/uan/model/uan-mac-cw.cc
--- ns-3.42/src/uan/model/uan-mac-cw.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac-cw.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac-cw.h ns-3.43/src/uan/model/uan-mac-cw.h
--- ns-3.42/src/uan/model/uan-mac-cw.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac-cw.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac.h ns-3.43/src/uan/model/uan-mac.h
--- ns-3.42/src/uan/model/uan-mac.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac-rc.cc ns-3.43/src/uan/model/uan-mac-rc.cc
--- ns-3.42/src/uan/model/uan-mac-rc.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac-rc.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac-rc-gw.cc ns-3.43/src/uan/model/uan-mac-rc-gw.cc
--- ns-3.42/src/uan/model/uan-mac-rc-gw.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac-rc-gw.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac-rc-gw.h ns-3.43/src/uan/model/uan-mac-rc-gw.h
--- ns-3.42/src/uan/model/uan-mac-rc-gw.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac-rc-gw.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-mac-rc.h ns-3.43/src/uan/model/uan-mac-rc.h
--- ns-3.42/src/uan/model/uan-mac-rc.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-mac-rc.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-net-device.cc ns-3.43/src/uan/model/uan-net-device.cc
--- ns-3.42/src/uan/model/uan-net-device.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-net-device.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-net-device.h ns-3.43/src/uan/model/uan-net-device.h
--- ns-3.42/src/uan/model/uan-net-device.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-net-device.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-noise-model.cc ns-3.43/src/uan/model/uan-noise-model.cc
--- ns-3.42/src/uan/model/uan-noise-model.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-noise-model.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-noise-model-default.cc ns-3.43/src/uan/model/uan-noise-model-default.cc
--- ns-3.42/src/uan/model/uan-noise-model-default.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-noise-model-default.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-noise-model-default.h ns-3.43/src/uan/model/uan-noise-model-default.h
--- ns-3.42/src/uan/model/uan-noise-model-default.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-noise-model-default.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-noise-model.h ns-3.43/src/uan/model/uan-noise-model.h
--- ns-3.42/src/uan/model/uan-noise-model.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-noise-model.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-phy.cc ns-3.43/src/uan/model/uan-phy.cc
--- ns-3.42/src/uan/model/uan-phy.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-phy.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-phy-dual.cc ns-3.43/src/uan/model/uan-phy-dual.cc
--- ns-3.42/src/uan/model/uan-phy-dual.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-phy-dual.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  *         Andrea Sacco <andrea.sacco85@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-phy-dual.h ns-3.43/src/uan/model/uan-phy-dual.h
--- ns-3.42/src/uan/model/uan-phy-dual.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-phy-dual.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  *         Andrea Sacco <andrea.sacco85@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-phy-gen.cc ns-3.43/src/uan/model/uan-phy-gen.cc
--- ns-3.42/src/uan/model/uan-phy-gen.cc	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-phy-gen.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  *         Andrea Sacco <andrea.sacco85@gmail.com>
@@ -310,7 +299,7 @@
     // Amplitude Modulation", EE 242 Digital Communications and Codings, 2009
     case UanTxMode::QAM: {
         // generic EbNo
-        EbNo *= mode.GetDataRateBps() / mode.GetBandwidthHz();
+        EbNo *= static_cast<double>(mode.GetBandwidthHz()) / mode.GetDataRateBps();
 
         auto M = (double)mode.GetConstellationSize();
 
@@ -345,8 +334,8 @@
             // Eq (74)
             for (int j = 0; j < sum_items; ++j)
             {
-                PbK += ::std::pow(-1.0, (double)j * pow2k / sqrtM) *
-                       (pow2k - ::std::floor((double)(j * pow2k / sqrtM) - 0.5)) *
+                PbK += ::std::pow(-1.0, ::std::floor((double)j * pow2k / sqrtM)) *
+                       (pow2k - ::std::floor((double)(j * pow2k / sqrtM) + 0.5)) *
                        erfc((2.0 * (double)j + 1.0) *
                             ::std::sqrt(3.0 * (log2M * EbNo) / (2.0 * (M - 1.0))));
 
@@ -857,9 +846,10 @@
     else
     {
         m_state = IDLE;
-        UpdatePowerConsumption(IDLE);
     }
 
+    UpdatePowerConsumption(IDLE);
+
     if (m_pg->GetValue(0, 1) > m_per->CalcPer(m_pktRx, m_minRxSinrDb, txMode))
     {
         m_rxOkLogger(pkt, m_minRxSinrDb, txMode);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-phy-gen.h ns-3.43/src/uan/model/uan-phy-gen.h
--- ns-3.42/src/uan/model/uan-phy-gen.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-phy-gen.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  *         Andrea Sacco <andrea.sacco85@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-phy.h ns-3.43/src/uan/model/uan-phy.h
--- ns-3.42/src/uan/model/uan-phy.h	2024-05-29 15:29:47.184073700 -0700
+++ ns-3.43/src/uan/model/uan-phy.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  *         Andrea Sacco <andrea.sacco85@gmail.com>
@@ -282,6 +271,7 @@
      *
      * \param thresh Threshold SINR for proper reception in dB re 1 uPa.
      */
+    // NS_DEPRECATED() - tag for future removal
     virtual void SetRxThresholdDb(double thresh) = 0;
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-prop-model.cc ns-3.43/src/uan/model/uan-prop-model.cc
--- ns-3.42/src/uan/model/uan-prop-model.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-prop-model.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-prop-model.h ns-3.43/src/uan/model/uan-prop-model.h
--- ns-3.42/src/uan/model/uan-prop-model.h	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-prop-model.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-prop-model-ideal.cc ns-3.43/src/uan/model/uan-prop-model-ideal.cc
--- ns-3.42/src/uan/model/uan-prop-model-ideal.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-prop-model-ideal.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-prop-model-ideal.h ns-3.43/src/uan/model/uan-prop-model-ideal.h
--- ns-3.42/src/uan/model/uan-prop-model-ideal.h	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-prop-model-ideal.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-prop-model-thorp.cc ns-3.43/src/uan/model/uan-prop-model-thorp.cc
--- ns-3.42/src/uan/model/uan-prop-model-thorp.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-prop-model-thorp.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
@@ -93,7 +82,7 @@
     }
     else
     {
-        atten = 0.002 + 0.11 * (freqKhz / (1 + freqKhz)) + 0.011 * freqKhz;
+        atten = 0.002 + 0.11 * (fsq / (1 + fsq)) + 0.011 * fsq;
     }
 
     return atten;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-prop-model-thorp.h ns-3.43/src/uan/model/uan-prop-model-thorp.h
--- ns-3.42/src/uan/model/uan-prop-model-thorp.h	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-prop-model-thorp.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-transducer.cc ns-3.43/src/uan/model/uan-transducer.cc
--- ns-3.42/src/uan/model/uan-transducer.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-transducer.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mitch Watrous <watrous@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-transducer.h ns-3.43/src/uan/model/uan-transducer.h
--- ns-3.42/src/uan/model/uan-transducer.h	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-transducer.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-transducer-hd.cc ns-3.43/src/uan/model/uan-transducer-hd.cc
--- ns-3.42/src/uan/model/uan-transducer-hd.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-transducer-hd.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-transducer-hd.h ns-3.43/src/uan/model/uan-transducer-hd.h
--- ns-3.42/src/uan/model/uan-transducer-hd.h	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-transducer-hd.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-tx-mode.cc ns-3.43/src/uan/model/uan-tx-mode.cc
--- ns-3.42/src/uan/model/uan-tx-mode.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-tx-mode.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
@@ -273,7 +262,7 @@
 std::istream&
 operator>>(std::istream& is, UanModesList& ml)
 {
-    char c;
+    char c = '\0';
 
     int numModes;
 
@@ -281,18 +270,30 @@
     if (c != '|')
     {
         is.setstate(std::ios_base::failbit);
+        return is;
     }
     ml.m_modes.clear();
     ml.m_modes.resize(numModes);
 
-    for (int i = 0; i < numModes && !is.eof(); i++)
+    if (numModes == 0 && is.peek() == std::istream::traits_type::eof())
+    {
+        return is;
+    }
+
+    int i;
+    for (i = 0; is.peek() != std::istream::traits_type::eof() && i < numModes; i++)
     {
         is >> ml.m_modes[i] >> c;
         if (c != '|')
         {
             is.setstate(std::ios_base::failbit);
+            return is;
         }
     }
+    if (i < numModes)
+    {
+        is.setstate(std::ios_base::failbit);
+    }
 
     return is;
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/model/uan-tx-mode.h ns-3.43/src/uan/model/uan-tx-mode.h
--- ns-3.42/src/uan/model/uan-tx-mode.h	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/model/uan-tx-mode.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/test/uan-energy-model-test.cc ns-3.43/src/uan/test/uan-energy-model-test.cc
--- ns-3.42/src/uan/test/uan-energy-model-test.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/test/uan-energy-model-test.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Andrea Sacco
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Andrea Sacco <andrea.sacco85@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/uan/test/uan-test.cc ns-3.43/src/uan/test/uan-test.cc
--- ns-3.42/src/uan/test/uan-test.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/uan/test/uan-test.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Leonard Tracy <lentracy@gmail.com>
  */
@@ -314,6 +303,91 @@
  * \ingroup uan-test
  * \ingroup tests
  *
+ * \brief UanModesList Test
+ */
+class UanModesListTest : public TestCase
+{
+  public:
+    UanModesListTest();
+
+    void DoRun() override;
+};
+
+UanModesListTest::UanModesListTest()
+    : TestCase("UanModesListTest")
+{
+}
+
+void
+UanModesListTest::DoRun()
+{
+    // operator >> (std::istream &is, UanModesList &ml)
+    std::string inputStr;
+    std::istringstream iss;
+    UanModesList ml;
+
+    inputStr = "3|0|1|1|";
+    iss.str(inputStr);
+    iss >> ml;
+    NS_TEST_ASSERT_MSG_EQ(ml.GetNModes(), 3, "Expected 3 modes in the list");
+    NS_TEST_ASSERT_MSG_EQ(iss.eof(), true, "Expected end of file state");
+    NS_TEST_ASSERT_MSG_EQ(iss.fail(), false, "Expected no fail state");
+
+    inputStr = "3|0|1|";
+    iss.str(inputStr);
+    iss.clear();
+    iss >> ml;
+    NS_TEST_ASSERT_MSG_EQ(iss.fail(), true, "Expected fail state due to incomplete input");
+
+    inputStr = "|3|0|1|1|";
+    iss.str(inputStr);
+    iss.clear();
+    iss >> ml;
+    NS_TEST_ASSERT_MSG_EQ(iss.fail(), true, "Expected fail state due to leading delimiter");
+
+    inputStr = "3|0|1|1|0|";
+    iss.str(inputStr);
+    iss.clear();
+    iss >> ml;
+    NS_TEST_ASSERT_MSG_EQ(iss.eof(), false, "Expected no end of file state");
+
+    inputStr = "0|";
+    iss.str(inputStr);
+    iss.clear();
+    iss >> ml;
+    NS_TEST_ASSERT_MSG_EQ(ml.GetNModes(), 0, "Expected 0 modes in the list");
+    NS_TEST_ASSERT_MSG_EQ(iss.eof(), true, "Expected end of file state");
+    NS_TEST_ASSERT_MSG_EQ(iss.fail(), false, "Expected no fail state");
+
+    inputStr = "0|1|0|";
+    iss.str(inputStr);
+    iss.clear();
+    iss >> ml;
+    NS_TEST_ASSERT_MSG_EQ(iss.eof(), false, "Expected end of file state");
+
+    inputStr = "a|1|2|";
+    iss.str(inputStr);
+    iss.clear();
+    iss >> ml;
+    NS_TEST_ASSERT_MSG_EQ(iss.fail(), true, "Expected fail state due to non-numeric input");
+
+    inputStr = "a|b|c|";
+    iss.str(inputStr);
+    iss.clear();
+    iss >> ml;
+    NS_TEST_ASSERT_MSG_EQ(iss.fail(), true, "Expected fail state due to non-numeric input");
+
+    inputStr = "3|a|b|c|";
+    iss.str(inputStr);
+    iss.clear();
+    iss >> ml;
+    NS_TEST_ASSERT_MSG_EQ(iss.fail(), true, "Expected fail state due to non-numeric input");
+}
+
+/**
+ * \ingroup uan-test
+ * \ingroup tests
+ *
  * \brief Uan Test Suite
  */
 class UanTestSuite : public TestSuite
@@ -326,6 +400,7 @@
     : TestSuite("devices-uan", Type::UNIT)
 {
     AddTestCase(new UanTest, TestCase::Duration::QUICK);
+    AddTestCase(new UanModesListTest, TestCase::Duration::QUICK);
 }
 
 static UanTestSuite g_uanTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/virtual-net-device/examples/virtual-net-device-example.cc ns-3.43/src/virtual-net-device/examples/virtual-net-device-example.cc
--- ns-3.42/src/virtual-net-device/examples/virtual-net-device-example.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/virtual-net-device/examples/virtual-net-device-example.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Based on simple-global-routing.cc
  * The Tunnel class adds two tunnels, n0<=>n3 and n1<=>n3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/virtual-net-device/model/virtual-net-device.cc ns-3.43/src/virtual-net-device/model/virtual-net-device.cc
--- ns-3.42/src/virtual-net-device/model/virtual-net-device.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/virtual-net-device/model/virtual-net-device.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/virtual-net-device/model/virtual-net-device.h ns-3.43/src/virtual-net-device/model/virtual-net-device.h
--- ns-3.42/src/virtual-net-device/model/virtual-net-device.h	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/virtual-net-device/model/virtual-net-device.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008,2009 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo J. A. M. Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/visualizer/model/pyviz.cc ns-3.43/src/visualizer/model/pyviz.cc
--- ns-3.42/src/visualizer/model/pyviz.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/visualizer/model/pyviz.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro  <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/visualizer/model/pyviz.h ns-3.43/src/visualizer/model/pyviz.h
--- ns-3.42/src/visualizer/model/pyviz.h	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/visualizer/model/pyviz.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INESC Porto
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * C++ helper functions for use by the python visualizer (for things
  * Python is too slow at).
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/visualizer/model/visual-simulator-impl.cc ns-3.43/src/visualizer/model/visual-simulator-impl.cc
--- ns-3.42/src/visualizer/model/visual-simulator-impl.cc	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/visualizer/model/visual-simulator-impl.cc	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Gustavo Carneiro
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro <gjcarneiro@gmail.com> <gjc@inescporto.pt>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/visualizer/model/visual-simulator-impl.h ns-3.43/src/visualizer/model/visual-simulator-impl.h
--- ns-3.42/src/visualizer/model/visual-simulator-impl.h	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/visualizer/model/visual-simulator-impl.h	2024-10-09 16:41:10.104656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Gustavo Carneiro
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gustavo Carneiro  <gjcarneiro@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/visualizer/visualizer/core.py ns-3.43/src/visualizer/visualizer/core.py
--- ns-3.42/src/visualizer/visualizer/core.py	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/visualizer/visualizer/core.py	2024-10-09 16:41:10.104656700 -0700
@@ -25,11 +25,7 @@
 import math
 import os
 import sys
-
-try:
-    import threading
-except ImportError:
-    import dummy_threading as threading
+import threading
 
 try:
     import pygraphviz
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/visualizer/visualizer/ipython_view.py ns-3.43/src/visualizer/visualizer/ipython_view.py
--- ns-3.42/src/visualizer/visualizer/ipython_view.py	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/visualizer/visualizer/ipython_view.py	2024-10-09 16:41:10.104656700 -0700
@@ -368,6 +368,8 @@
     #  _showReturned function
     ## @var prompt
     #  prompt function
+    ## @var no_input_splitter
+    # no input splitter
 
     """
     Specialized text view for console-like workflow.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/CMakeLists.txt ns-3.43/src/wifi/CMakeLists.txt
--- ns-3.42/src/wifi/CMakeLists.txt	2024-05-29 15:29:47.188073900 -0700
+++ ns-3.43/src/wifi/CMakeLists.txt	2024-10-09 16:41:10.108656600 -0700
@@ -27,6 +27,10 @@
     model/channel-access-manager.cc
     model/ctrl-headers.cc
     model/edca-parameter-set.cc
+    model/eht/advanced-ap-emlsr-manager.cc
+    model/eht/advanced-emlsr-manager.cc
+    model/eht/ap-emlsr-manager.cc
+    model/eht/default-ap-emlsr-manager.cc
     model/eht/default-emlsr-manager.cc
     model/eht/eht-capabilities.cc
     model/eht/eht-configuration.cc
@@ -186,6 +190,10 @@
     model/channel-access-manager.h
     model/ctrl-headers.h
     model/edca-parameter-set.h
+    model/eht/advanced-ap-emlsr-manager.h
+    model/eht/advanced-emlsr-manager.h
+    model/eht/ap-emlsr-manager.h
+    model/eht/default-ap-emlsr-manager.h
     model/eht/default-emlsr-manager.h
     model/eht/eht-capabilities.h
     model/eht/eht-configuration.h
@@ -298,7 +306,6 @@
     model/wifi-mac.h
     model/wifi-mgt-header.h
     model/wifi-mode.h
-    model/wifi-mpdu-type.h
     model/wifi-mpdu.h
     model/wifi-net-device.h
     model/wifi-opt-field.h
@@ -323,11 +330,14 @@
     model/wifi-tx-parameters.h
     model/wifi-tx-timer.h
     model/wifi-tx-vector.h
+    model/wifi-types.h
+    model/wifi-units.h
     model/wifi-utils.h
     model/yans-error-rate-model.h
     model/yans-wifi-channel.h
     model/yans-wifi-phy.h
     model/wifi-spectrum-value-helper.h
+    test/wifi-mlo-test.h
 )
 
 build_lib(
@@ -370,4 +380,5 @@
     test/wifi-phy-cca-test.cc
     test/wifi-non-ht-dup-test.cc
     test/wifi-phy-mu-mimo-test.cc
+    test/wifi-operating-channel-test.cc
 )
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/doc/source/wifi-changelog.rst ns-3.43/src/wifi/doc/source/wifi-changelog.rst
--- ns-3.42/src/wifi/doc/source/wifi-changelog.rst	2024-05-29 15:29:47.192073800 -0700
+++ ns-3.43/src/wifi/doc/source/wifi-changelog.rst	2024-10-09 16:41:10.112656800 -0700
@@ -17,7 +17,8 @@
 separately.  As of ns-3.36, a new tuple object that we call ChannelSettings has
 consolidated all of these settings.  Users should specify the channel number,
 channel width, frequency band, and primary channel index as a tuple (and
-continue to set the Wi-Fi standard separately).
+continue to set the Wi-Fi standard separately). Since ns-3.43, this attribute
+can contain multiple tuples to support 80+80MHz operating channels.
 
 For instance, where pre-ns-3.36 code may have said::
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/doc/source/wifi-design.rst ns-3.43/src/wifi/doc/source/wifi-design.rst
--- ns-3.42/src/wifi/doc/source/wifi-design.rst	2024-05-29 15:29:47.192073800 -0700
+++ ns-3.43/src/wifi/doc/source/wifi-design.rst	2024-10-09 16:41:10.112656800 -0700
@@ -52,11 +52,11 @@
 
 * the **PHY layer models**: they model amendment-specific and common
   PHY layer operations and functions.
-* the so-called **MAC low models**: they model functions such as medium
+* **lower MAC models**: they model functions such as medium
   access (DCF and EDCA), frame protection (RTS/CTS) and acknowledgment (ACK/BlockAck).
   In |ns3|, the lower-level MAC is comprised of a **Frame Exchange Manager** hierarchy,
-  a **Channel Access Manager** and a **MAC middle** entity.
-* the so-called **MAC high models**: they implement non-time-critical processes
+  a **Channel Access Manager,** **Txop** objects, **BlockAckManager** objects, and a **MAC middle** entity.
+* **upper MAC models**: they implement non-time-critical processes
   in Wifi such as the MAC-level beacon generation, probing, and association
   state machines, and a set of **Rate control algorithms**.  In the literature,
   this sublayer is sometimes called the **upper MAC** and consists of more
@@ -76,10 +76,8 @@
 MAC high models
 ===============
 
-There are presently three **MAC high models** that provide for the three
-(non-mesh; the mesh equivalent, which is a sibling of these with common
-parent ``ns3::WifiMac``, is not discussed here) Wi-Fi topological
-elements - Access Point (AP) (``ns3::ApWifiMac``),
+There are presently three variants of parent class ``ns3::WifiMac``:
+Access Point (AP) (``ns3::ApWifiMac``),
 non-AP Station (STA) (``ns3::StaWifiMac``), and STA in an Independent
 Basic Service Set (IBSS) - also commonly referred to as an ad hoc
 network (``ns3::AdhocWifiMac``).
@@ -98,13 +96,14 @@
 configuration of 802.11e/WMM-style QoS support.
 
 There are also several **rate control algorithms** that can be used by the
-MAC low layer.  A complete list of available rate control algorithms is
+MAC low layer.  These are all implemented as subclasses of
+``ns3::WifiRemoteStationManager.`` A complete list of available rate control algorithms is
 provided in a separate section.
 
 MAC low layer
 ==============
 
-The **MAC low layer** is split into three main components:
+The lower MAC is split into three main components:
 
 #. ``ns3::FrameExchangeManager`` a class hierarchy which implement the frame exchange
    sequences introduced by the supported IEEE 802.11 amendments. It also handles
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/doc/source/wifi-user.rst ns-3.43/src/wifi/doc/source/wifi-user.rst
--- ns-3.42/src/wifi/doc/source/wifi-user.rst	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/doc/source/wifi-user.rst	2024-10-09 16:41:10.112656800 -0700
@@ -153,15 +153,52 @@
 
 .. sourcecode:: cpp
 
-  YansWifiPhyHelper::SetPcapDataLinkType(enum SupportedPcapDataLinkTypes dlt)
+  WifiPhyHelper::SetPcapDataLinkType(enum SupportedPcapDataLinkTypes dlt)
 
 |ns3| supports RadioTap and Prism tracing extensions for 802.11.
 
+For MLD devices, it is also possible to select one of these PCAP capture type:
+
+.. sourcecode:: cpp
+
+  WifiPhyHelper::SetPcapCaptureType(PcapCaptureType type)
+
+|ns3| supports three PCAP capture types for MLD devices:
+* a single PCAP file for the device, regardless of PHYs and links
+
+.. sourcecode:: cpp
+
+  phyHelper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_DEVICE);
+
+* a PCAP file generated per PHY (default behavior)
+
+.. sourcecode:: cpp
+
+  phyHelper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_PHY);
+
+* a PCAP file generated per link
+
+.. sourcecode:: cpp
+
+  phyHelper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
+
+The PCAP files will always be generated with the suffix of nodeId-deviceId.pcap, unless the user has enabled
+object names on either the Node or the NetDevice, in which case the string name will be used. When PCAP files
+are generated per PHY, that suffix is nodeId-deviceId-linkId.pcap. When PCAP files are generated per link, the
+suffix is nodeId-deviceId-phyId.pcap.
+
+When PCAP files are generated per link, if there is no generated PCAP for a given link, it means
+no packet has been transmitted nor received on that link. Since PHYs of non-AP MLDs may swap their
+links during setup, the link ID appended to the PCAP file might be higher than the highest PHY ID.
+
+In case of SLD devices, the configuration of the capture type has no impact since a single PCAP file
+will always be generated per device.
+
 Note that we haven't actually created any WifiPhy objects yet; we've just
 prepared the YansWifiPhyHelper by telling it which channel it is connected to.
 The Phy objects are created in the next step.
 
-In order to enable 802.11n/ac/ax MIMO, the number of antennas as well as the number of supported spatial streams need to be configured.
+In order to enable 802.11n/ac/ax/be MIMO, the number of antennas as well as the number of supported spatial streams need to be configured.
 For example, this code enables MIMO with 2 antennas and 2 spatial streams:
 
 .. sourcecode:: cpp
@@ -213,22 +250,22 @@
 
 There is a unique ``ns3::WifiPhy`` attribute, named ``ChannelSettings``, that
 enables to set channel number, channel width, frequency band and primary20 index
-all together, in order to eliminate the possibility of inconsistent settings.
+for each segment all together, in order to eliminate the possibility of inconsistent settings.
 The ``ChannelSettings`` attribute can be set in a number of ways (see below) by
-providing either a StringValue object or a TupleValue object:
+providing either a StringValue object or an AttributeContainerValue object:
 
 * Defining a StringValue object to set the ``ChannelSettings`` attribute
 
 .. sourcecode:: cpp
 
-  StringValue value("{38, 40, BAND_5GHZ, 0}"));
+  StringValue value("{38, 40, BAND_5GHZ, 0}");
 
-* Defining a TupleValue object to set the ``ChannelSettings`` attribute
+* Defining an AttributeContainerValue object to set the ``ChannelSettings`` attribute
 
 .. sourcecode:: cpp
 
-  TupleValue<UintegerValue, UintegerValue, EnumValue, UintegerValue> value;
-  value.Set(WifiPhy::ChannelTuple {38, 40, WIFI_PHY_BAND_5GHZ, 0});
+  AttributeContainerValue<TupleValue<UintegerValue, UintegerValue, EnumValue, UintegerValue>, ';'> value;
+  value.Set(WifiPhy::ChannelSegments{{38, 40, WIFI_PHY_BAND_5GHZ, 0}});
 
 In both cases, the operating channel will be channel 38 in the 5 GHz band, which
 has a width of 40 MHz, and the primary20 channel will be the 20 MHz subchannel
@@ -246,8 +283,8 @@
 
 .. sourcecode:: cpp
 
-  TupleValue<UintegerValue, UintegerValue, EnumValue, UintegerValue> value;
-  value.Set(WifiPhy::ChannelTuple {38, 40, WIFI_PHY_BAND_5GHZ, 0});
+  AttributeContainerValue<TupleValue<UintegerValue, UintegerValue, EnumValue, UintegerValue>, ';'> value;
+  value.Set(WifiPhy::ChannelSegments{{38, 40, WIFI_PHY_BAND_5GHZ, 0}});
   YansWifiPhyHelper wifiPhyHelper = YansWifiPhyHelper::Default();
   wifiPhyHelper.Set("ChannelSettings", value);
 
@@ -266,12 +303,16 @@
 WifiHelper::SetStandard()
 +++++++++++++++++++++++++
 
-``WifiHelper::SetStandard ()`` is a method required to set various parameters
+``WifiHelper::SetStandard()`` is a method required to set various parameters
 in the Mac and Phy to standard values, but also to check that the channel
 settings as described above are allowed. For instance, a channel in the 2.4 GHz
 band cannot be configured if the standard is 802.11ac, or a channel in the 6 GHz
 band can only be configured if the standard is 802.11ax (or beyond).
 
+``WifiHelper::SetStandard()`` can also be called by passing a string with the
+standard name. For example any of the strings "802.11ax", "11ax" or "HE" can
+be passed in order to set the standard as ``WIFI_STANDARD_80211ax``.
+
 The following values for WifiStandard are defined in
 ``src/wifi/model/wifi-standards.h``:
 
@@ -283,7 +324,8 @@
   WIFI_STANDARD_80211p,
   WIFI_STANDARD_80211n,
   WIFI_STANDARD_80211ac,
-  WIFI_STANDARD_80211ax
+  WIFI_STANDARD_80211ax,
+  WIFI_STANDARD_80211be
 
 By default, the WifiHelper (the typical use case for WifiPhy creation) will
 configure the WIFI_STANDARD_80211ax standard by default.  Other values
@@ -301,12 +343,12 @@
 
 * If the band is unspecified (i.e., it is set to WIFI_PHY_BAND_UNSPECIFIED or
   "BAND_UNSPECIFIED"), the default band for the configured standard is set
-  (5 GHz band for 802.11{a, ac, ax, p} and 2.4 GHz band for all the others).
+  (5 GHz band for 802.11{a, ac, ax, be, p} and 2.4 GHz band for all the others).
 
 * If both the channel width and the channel number are unspecified (i.e., they
   are set to zero), the default channel width for the configured standard and
-  band is set (22 MHz for 802.11b, 10 MHz for 802.11p, 80 MHz for 802.11ac and
-  for 802.11ax if the band is 5 GHz, and 20 MHz for all other cases).
+  band is set (22 MHz for 802.11b, 10 MHz for 802.11p, 80 MHz for 802.11ac,
+  for 802.11ax and for 802.11be if the band is 5 GHz, and 20 MHz for all other cases).
 
 * If the channel width is unspecified but the channel number is valid, the settings
   are valid only if there exists a unique channel with the given number for the
@@ -497,6 +539,31 @@
 The configured WifiPhy primary 20MHz channel index can be got via the attribute
 ``Primary20MHzIndex`` in the class ``WifiPhy``.
 
+Non-contiguous 160 MHz operating channel configuration (80+80 MHz)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+An 80+80 MHz operating channel can be configured by setting each 80 MHz channel
+for each segment. For example, the following example code snippet configures an
+non-contiguous 160 MHz channel where the first segment operates on channel 42
+and the second segment operates on channel 106:
+
+::
+
+  Ptr<WifiPhy> wifiPhy = ...;
+  wifiPhy->SetAttribute("ChannelSettings", StringValue("{42, 80, BAND_5GHZ, 0};{106, 80, BAND_5GHZ, 0}"));
+
+It is still possible to have channel numbers set to zero in order to select the default 80+80 MHz channel:
+
+::
+
+  Ptr<WifiPhy> wifiPhy = ...;
+  wifiPhy->SetAttribute("ChannelSettings", StringValue("{0, 80, BAND_UNSPECIFIED, 0};{0, 80, BAND_UNSPECIFIED, 0}"));
+
+which results in the use of channels 42 and 106.
+
+Note that only the primary 20 MHz channel index of the first specified segment is considered.
+80+80MHz requires the use of ``SpectrumWifiPhy``.
+
 Order of operation issues
 +++++++++++++++++++++++++
 
@@ -524,8 +591,8 @@
 
 .. sourcecode:: cpp
 
-  SpectrumWifiPhyHelper::SetPcapDataLinkType(const Ptr<SpectrumChannel> channel,
-                                             const FrequencyRange& freqRange)
+  SpectrumWifiPhyHelper::AddChannel(const Ptr<SpectrumChannel> channel,
+                                    const FrequencyRange& freqRange)
 
 where FrequencyRange is a structure that contains the start and stop frequencies
 expressed in MHz which corresponds to the spectrum portion that is covered by the channel.
@@ -651,8 +718,8 @@
 .. sourcecode:: cpp
 
     InetSocketAddress destAddress(ipv4Address, udpPort);
-    destAddress.SetTos(tos);
     OnOffHelper onoff("ns3::UdpSocketFactory", destAddress);
+    onoff.SetAttribute("Tos", UintegerValue(tos));
 
 Mapping the values of the DS field onto user priorities is performed similarly to the
 Linux mac80211 subsystem. Basically, the :cpp:func:`ns3::WifiNetDevice::SelectQueue()`
@@ -673,11 +740,11 @@
  1     AC_BK
 ===  ===============
 
-TOS and DSCP values map onto user priorities and access categories according
+ToS and DSCP values map onto user priorities and access categories according
 to the following table.
 
 ============  ============  ==  ===============
-DiffServ PHB  TOS (binary)  UP  Access Category
+DiffServ PHB  ToS (binary)  UP  Access Category
 ============  ============  ==  ===============
 EF            101110xx      5   AC_VI
 AF11          001010xx      1   AC_BK
@@ -702,12 +769,7 @@
 CS7           111000xx      7   AC_VO
 ============  ============  ==  ===============
 
-So, for example,
-
-.. sourcecode:: cpp
-
-    destAddress.SetTos(0xc0);
-
+So, for example, a ToS equal to 0xc0 (binary 11000000)
 will map to CS6, User Priority 6, and Access Category AC_VO.
 Also, the ns3-wifi-ac-mapping test suite (defined in
 src/test/ns3wifi/wifi-ac-mapping-test-suite.cc) can provide additional
@@ -1270,6 +1332,7 @@
   // SpectrumWifiPhyHelper (3 links)
   SpectrumWifiPhyHelper phy(3);
   phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+  phy.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
   phy.AddChannel(spectrumChannel2_4Ghz, WIFI_SPECTRUM_2_4_GHZ);
   phy.AddChannel(spectrumChannel5Ghz, WIFI_SPECTRUM_5_GHZ);
   phy.AddChannel(spectrumChannel6Ghz, WIFI_SPECTRUM_6_GHZ);
@@ -1381,6 +1444,7 @@
   // SpectrumWifiPhyHelper (3 links)
   SpectrumWifiPhyHelper phy(3);
   phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+  phy.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
   phy.AddChannel(spectrumChannel2_4Ghz, WIFI_SPECTRUM_2_4_GHZ);
   phy.AddChannel(spectrumChannel5Ghz, WIFI_SPECTRUM_5_GHZ);
   phy.AddChannel(spectrumChannel6Ghz, WIFI_SPECTRUM_6_GHZ);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/reference/Bianchi11a.m ns-3.43/src/wifi/examples/reference/Bianchi11a.m
--- ns-3.42/src/wifi/examples/reference/Bianchi11a.m	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/reference/Bianchi11a.m	2024-10-09 16:41:10.112656800 -0700
@@ -1,30 +1,6 @@
 % Copyright 2020 University of Washington
 %
-% Redistribution and use in source and binary forms, with or without
-% modification, are permitted provided that the following conditions are met:
-%
-% 1. Redistributions of source code must retain the above copyright notice,
-% this list of conditions and the following disclaimer.
-%
-% 2. Redistributions in binary form must reproduce the above copyright notice,
-% this list of conditions and the following disclaimer in the documentation
-% and/or other materials provided with the distribution.
-%
-% 3. Neither the name of the copyright holder nor the names of its contributors
-% may be used to endorse or promote products derived from this software without
-% specific prior written permission.
-%
-% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-% POSSIBILITY OF SUCH DAMAGE.
+% SPDX-License-Identifier: BSD-3-Clause
 %
 % Co-authored by Leonardo Lanante, Hao Yin, and Sebastien Deronne
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/reference/bianchi11ax.py ns-3.43/src/wifi/examples/reference/bianchi11ax.py
--- ns-3.42/src/wifi/examples/reference/bianchi11ax.py	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/reference/bianchi11ax.py	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 #
 # Copyright 2020 University of Washington
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Authors:  Hao Yin and Sebastien Deronne
 #
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/reference/Bianchi11b.m ns-3.43/src/wifi/examples/reference/Bianchi11b.m
--- ns-3.42/src/wifi/examples/reference/Bianchi11b.m	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/reference/Bianchi11b.m	2024-10-09 16:41:10.112656800 -0700
@@ -1,30 +1,6 @@
 % Copyright 2020 University of Washington
 %
-% Redistribution and use in source and binary forms, with or without
-% modification, are permitted provided that the following conditions are met:
-%
-% 1. Redistributions of source code must retain the above copyright notice,
-% this list of conditions and the following disclaimer.
-%
-% 2. Redistributions in binary form must reproduce the above copyright notice,
-% this list of conditions and the following disclaimer in the documentation
-% and/or other materials provided with the distribution.
-%
-% 3. Neither the name of the copyright holder nor the names of its contributors
-% may be used to endorse or promote products derived from this software without
-% specific prior written permission.
-%
-% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-% POSSIBILITY OF SUCH DAMAGE.
+% SPDX-License-Identifier: BSD-3-Clause
 %
 % Co-authored by Leonardo Lanante, Hao Yin, and Sebastien Deronne
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/reference/Bianchi11g.m ns-3.43/src/wifi/examples/reference/Bianchi11g.m
--- ns-3.42/src/wifi/examples/reference/Bianchi11g.m	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/reference/Bianchi11g.m	2024-10-09 16:41:10.112656800 -0700
@@ -1,30 +1,6 @@
 % Copyright 2020 University of Washington
 %
-% Redistribution and use in source and binary forms, with or without
-% modification, are permitted provided that the following conditions are met:
-%
-% 1. Redistributions of source code must retain the above copyright notice,
-% this list of conditions and the following disclaimer.
-%
-% 2. Redistributions in binary form must reproduce the above copyright notice,
-% this list of conditions and the following disclaimer in the documentation
-% and/or other materials provided with the distribution.
-%
-% 3. Neither the name of the copyright holder nor the names of its contributors
-% may be used to endorse or promote products derived from this software without
-% specific prior written permission.
-%
-% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-% POSSIBILITY OF SUCH DAMAGE.
+% SPDX-License-Identifier: BSD-3-Clause
 %
 % Co-authored by Leonardo Lanante, Hao Yin, and Sebastien Deronne
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/reference/generate_bianchi.m ns-3.43/src/wifi/examples/reference/generate_bianchi.m
--- ns-3.42/src/wifi/examples/reference/generate_bianchi.m	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/reference/generate_bianchi.m	2024-10-09 16:41:10.112656800 -0700
@@ -1,30 +1,6 @@
 % Copyright 2020 University of Washington
 %
-% Redistribution and use in source and binary forms, with or without
-% modification, are permitted provided that the following conditions are met:
-%
-% 1. Redistributions of source code must retain the above copyright notice,
-% this list of conditions and the following disclaimer.
-%
-% 2. Redistributions in binary form must reproduce the above copyright notice,
-% this list of conditions and the following disclaimer in the documentation
-% and/or other materials provided with the distribution.
-%
-% 3. Neither the name of the copyright holder nor the names of its contributors
-% may be used to endorse or promote products derived from this software without
-% specific prior written permission.
-%
-% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
-% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
-% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
-% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
-% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
-% POSSIBILITY OF SUCH DAMAGE.
+% SPDX-License-Identifier: BSD-3-Clause
 %
 % Co-authored by Leonardo Lanante, Hao Yin, and Sebastien Deronne
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/wifi-bianchi.cc ns-3.43/src/wifi/examples/wifi-bianchi.cc
--- ns-3.42/src/wifi/examples/wifi-bianchi.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/wifi-bianchi.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2012 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  *
@@ -2410,9 +2399,9 @@
      * \param pcap flag to enable/disable PCAP files generation
      * \param infra flag to enable infrastructure model, ring adhoc network if not set
      * \param guardIntervalNs the guard interval in ns
-     * \param distanceM the distance in meters
-     * \param apTxPowerDbm the AP transmit power in dBm
-     * \param staTxPowerDbm the STA transmit power in dBm
+     * \param distance the distance
+     * \param apTxPower the AP transmit power
+     * \param staTxPower the STA transmit power
      * \param pktInterval the packet interval
      * \return 0 if all went well
      */
@@ -2426,9 +2415,9 @@
             bool pcap,
             bool infra,
             uint16_t guardIntervalNs,
-            double distanceM,
-            double apTxPowerDbm,
-            double staTxPowerDbm,
+            meter_u distance,
+            dBm_u apTxPower,
+            dBm_u staTxPower,
             Time pktInterval);
 };
 
@@ -2447,9 +2436,9 @@
                 bool pcap,
                 bool infra,
                 uint16_t guardIntervalNs,
-                double distance,
-                double apTxPowerDbm,
-                double staTxPowerDbm,
+                meter_u distance,
+                dBm_u apTxPower,
+                dBm_u staTxPower,
                 Time pktInterval)
 {
     RngSeedManager::SetSeed(10);
@@ -2471,7 +2460,7 @@
     phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
 
     WifiMacHelper mac = wifiMac;
-    WifiHelper wifi = helper;
+    const auto& wifi = helper;
     NetDeviceContainer devices;
     uint32_t nNodes = wifiNodes.GetN();
     if (infra)
@@ -2485,8 +2474,8 @@
                     TimeValue(MicroSeconds(beaconInterval)),
                     "Ssid",
                     SsidValue(ssid));
-        phy.Set("TxPowerStart", DoubleValue(apTxPowerDbm));
-        phy.Set("TxPowerEnd", DoubleValue(apTxPowerDbm));
+        phy.Set("TxPowerStart", DoubleValue(apTxPower));
+        phy.Set("TxPowerEnd", DoubleValue(apTxPower));
         devices = wifi.Install(phy, mac, wifiNodes.Get(0));
 
         mac.SetType("ns3::StaWifiMac",
@@ -2494,8 +2483,8 @@
                     UintegerValue(std::numeric_limits<uint32_t>::max()),
                     "Ssid",
                     SsidValue(ssid));
-        phy.Set("TxPowerStart", DoubleValue(staTxPowerDbm));
-        phy.Set("TxPowerEnd", DoubleValue(staTxPowerDbm));
+        phy.Set("TxPowerStart", DoubleValue(staTxPower));
+        phy.Set("TxPowerEnd", DoubleValue(staTxPower));
         for (uint32_t i = 1; i < nNodes; ++i)
         {
             devices.Add(wifi.Install(phy, mac, wifiNodes.Get(i)));
@@ -2504,12 +2493,12 @@
     else
     {
         mac.SetType("ns3::AdhocWifiMac");
-        phy.Set("TxPowerStart", DoubleValue(staTxPowerDbm));
-        phy.Set("TxPowerEnd", DoubleValue(staTxPowerDbm));
+        phy.Set("TxPowerStart", DoubleValue(staTxPower));
+        phy.Set("TxPowerEnd", DoubleValue(staTxPower));
         devices = wifi.Install(phy, mac, wifiNodes);
     }
 
-    wifi.AssignStreams(devices, trialNumber);
+    WifiHelper::AssignStreams(devices, trialNumber);
 
     Config::Set(
         "/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/HtConfiguration/ShortGuardIntervalSupported",
@@ -2539,7 +2528,7 @@
     positionAlloc->Add(Vector(1.0, 1.0, 0.0));
 
     // Set position for STAs
-    double angle = (static_cast<double>(360) / (nNodes - 1));
+    const auto angle = (static_cast<degree_u>(360) / (nNodes - 1));
     for (uint32_t i = 0; i < (nNodes - 1); ++i)
     {
         positionAlloc->Add(Vector(1.0 + (distance * cos((i * angle * PI) / 180)),
@@ -2716,9 +2705,9 @@
     uint16_t pktInterval =
         1000; ///< The socket packet interval in microseconds (a higher value is needed to reach
               ///< saturation conditions as the channel bandwidth or the MCS increases)
-    double distance = 0.001; ///< The distance in meters between the AP and the STAs
-    double apTxPower = 16;   ///< The transmit power of the AP in dBm (if infrastructure only)
-    double staTxPower = 16;  ///< The transmit power of each STA in dBm (or all STAs if adhoc)
+    meter_u distance = 0.001; ///< The distance in meters between the AP and the STAs
+    dBm_u apTxPower = 16;     ///< The transmit power of the AP (if infrastructure only)
+    dBm_u staTxPower = 16;    ///< The transmit power of each STA (or all STAs if adhoc)
 
     // Disable fragmentation and RTS/CTS
     Config::SetDefault("ns3::WifiRemoteStationManager::FragmentationThreshold",
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/wifi-manager-example.cc ns-3.43/src/wifi/examples/wifi-manager-example.cc
--- ns-3.42/src/wifi/examples/wifi-manager-example.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/wifi-manager-example.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Tom Henderson <tomhend@u.washington.edu>
  *          Matías Richart <mrichart@fing.edu.uy>
@@ -46,6 +35,7 @@
 // --broadcast instead of unicast (default is unicast)
 // --rtsThreshold (by default, value of 99999 disables it)
 
+#include "ns3/attribute-container.h"
 #include "ns3/boolean.h"
 #include "ns3/command-line.h"
 #include "ns3/config.h"
@@ -73,10 +63,6 @@
 
 NS_LOG_COMPONENT_DEFINE("WifiManagerExample");
 
-// 290K @ 20 MHz
-const double NOISE_DBM_Hz = -174.0; //!< Default value for noise.
-double noiseDbm = NOISE_DBM_Hz;     //!< Value for noise.
-
 double g_intervalBytes = 0;  //!< Bytes received in an interval.
 uint64_t g_intervalRate = 0; //!< Rate in an interval.
 
@@ -108,7 +94,7 @@
 /// Step structure
 struct Step
 {
-    double stepSize; ///< step size in dBm
+    dBm_u stepSize;  ///< step size
     double stepTime; ///< step size in seconds
 };
 
@@ -136,9 +122,9 @@
     StandardInfo(std::string name,
                  WifiStandard standard,
                  WifiPhyBand band,
-                 uint16_t width,
-                 double snrLow,
-                 double snrHigh,
+                 MHz_u width,
+                 dB_u snrLow,
+                 dB_u snrHigh,
                  double xMin,
                  double xMax,
                  double yMax)
@@ -157,9 +143,9 @@
     std::string m_name;      ///< name
     WifiStandard m_standard; ///< standard
     WifiPhyBand m_band;      ///< PHY band
-    uint16_t m_width;        ///< channel width
-    double m_snrLow;         ///< lowest SNR
-    double m_snrHigh;        ///< highest SNR
+    MHz_u m_width;           ///< channel width
+    dB_u m_snrLow;           ///< lowest SNR
+    dB_u m_snrHigh;          ///< highest SNR
     double m_xMin;           ///< X minimum
     double m_xMax;           ///< X maximum
     double m_yMax;           ///< Y maximum
@@ -169,20 +155,22 @@
  * Change the signal model and report the rate.
  *
  * \param rssModel The new RSS model.
- * \param step The step tp use.
+ * \param step The step to use.
  * \param rss The RSS.
+ * \param noise The noise.
  * \param rateDataset The rate dataset.
  * \param actualDataset The actual dataset.
  */
 void
 ChangeSignalAndReportRate(Ptr<FixedRssLossModel> rssModel,
                           Step step,
-                          double rss,
+                          dBm_u rss,
+                          dBm_u noise,
                           Gnuplot2dDataset& rateDataset,
                           Gnuplot2dDataset& actualDataset)
 {
     NS_LOG_FUNCTION(rssModel << step.stepSize << step.stepTime << rss);
-    double snr = rss - noiseDbm;
+    dB_u snr = rss - noise;
     rateDataset.Add(snr, g_intervalRate / 1e6);
     // Calculate received rate since last interval
     double currentRate = ((g_intervalBytes * 8) / step.stepTime) / 1e6; // Mb/s
@@ -197,6 +185,7 @@
                         rssModel,
                         step,
                         (rss - step.stepSize),
+                        noise,
                         rateDataset,
                         actualDataset);
 }
@@ -209,7 +198,7 @@
     uint32_t steps;
     uint32_t rtsThreshold = 999999; // disabled even for large A-MPDU
     uint32_t maxAmpduSize = 65535;
-    double stepSize = 1;        // dBm
+    dBm_u stepSize = 1;
     double stepTime = 1;        // seconds
     uint32_t packetSize = 1024; // bytes
     bool broadcast = false;
@@ -639,46 +628,43 @@
     NetDeviceContainer serverDevice;
     NetDeviceContainer clientDevice;
 
-    TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue> channelValue;
+    AttributeContainerValue<
+        TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>,
+        ';'>
+        channelValue;
 
     WifiMacHelper wifiMac;
     if (infrastructure)
     {
         Ssid ssid = Ssid("ns-3-ssid");
         wifiMac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
-        channelValue.Set(WifiPhy::ChannelTuple{0,
-                                               serverSelectedStandard.m_width,
-                                               serverSelectedStandard.m_band,
-                                               0});
+        channelValue.Set(WifiPhy::ChannelSegments{
+            {0, serverSelectedStandard.m_width, serverSelectedStandard.m_band, 0}});
         wifiPhy.Set("ChannelSettings", channelValue);
         serverDevice = wifi.Install(wifiPhy, wifiMac, serverNode);
 
         wifiMac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid));
-        channelValue.Set(WifiPhy::ChannelTuple{0,
-                                               clientSelectedStandard.m_width,
-                                               clientSelectedStandard.m_band,
-                                               0});
+        channelValue.Set(WifiPhy::ChannelSegments{
+            {0, clientSelectedStandard.m_width, clientSelectedStandard.m_band, 0}});
+        wifiPhy.Set("ChannelSettings", channelValue);
         clientDevice = wifi.Install(wifiPhy, wifiMac, clientNode);
     }
     else
     {
         wifiMac.SetType("ns3::AdhocWifiMac");
-        channelValue.Set(WifiPhy::ChannelTuple{0,
-                                               serverSelectedStandard.m_width,
-                                               serverSelectedStandard.m_band,
-                                               0});
+        channelValue.Set(WifiPhy::ChannelSegments{
+            {0, serverSelectedStandard.m_width, serverSelectedStandard.m_band, 0}});
         wifiPhy.Set("ChannelSettings", channelValue);
         serverDevice = wifi.Install(wifiPhy, wifiMac, serverNode);
 
-        channelValue.Set(WifiPhy::ChannelTuple{0,
-                                               clientSelectedStandard.m_width,
-                                               clientSelectedStandard.m_band,
-                                               0});
+        channelValue.Set(WifiPhy::ChannelSegments{
+            {0, clientSelectedStandard.m_width, clientSelectedStandard.m_band, 0}});
+        wifiPhy.Set("ChannelSettings", channelValue);
         clientDevice = wifi.Install(wifiPhy, wifiMac, clientNode);
     }
 
-    wifi.AssignStreams(serverDevice, 100);
-    wifi.AssignStreams(clientDevice, 200);
+    WifiHelper::AssignStreams(serverDevice, 100);
+    WifiHelper::AssignStreams(clientDevice, 200);
 
     Config::Set("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Mac/BE_MaxAmpduSize",
                 UintegerValue(maxAmpduSize));
@@ -741,13 +727,16 @@
         wndServer->GetHeConfiguration()->SetGuardInterval(NanoSeconds(serverShortGuardInterval));
         wndClient->GetHeConfiguration()->SetGuardInterval(NanoSeconds(clientShortGuardInterval));
     }
-    NS_LOG_DEBUG("Channel width " << wifiPhyPtrClient->GetChannelWidth() << " noiseDbm "
-                                  << noiseDbm);
-    NS_LOG_DEBUG("NSS " << wifiPhyPtrClient->GetMaxSupportedTxSpatialStreams());
 
     // Configure signal and noise, and schedule first iteration
-    noiseDbm += 10 * log10(clientSelectedStandard.m_width * 1000000);
-    double rssCurrent = (clientSelectedStandard.m_snrHigh + noiseDbm);
+    const auto BOLTZMANN = 1.3803e-23;
+    const dBm_per_Hz_u noiseDensity = WToDbm(BOLTZMANN * 290); // 290K @ 20 MHz
+    const dBm_u noise = noiseDensity + (10 * log10(clientSelectedStandard.m_width * 1000000));
+
+    NS_LOG_DEBUG("Channel width " << wifiPhyPtrClient->GetChannelWidth() << " noise " << noise);
+    NS_LOG_DEBUG("NSS " << wifiPhyPtrClient->GetMaxSupportedTxSpatialStreams());
+
+    const dBm_u rssCurrent = (clientSelectedStandard.m_snrHigh + noise);
     rssLossModel->SetRss(rssCurrent);
     NS_LOG_INFO("Setting initial Rss to " << rssCurrent);
     // Move the STA by stepsSize meters every stepTime seconds
@@ -756,6 +745,7 @@
                         rssLossModel,
                         step,
                         rssCurrent,
+                        noise,
                         rateDataset,
                         actualDataset);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/wifi-phy-configuration.cc ns-3.43/src/wifi/examples/wifi-phy-configuration.cc
--- ns-3.42/src/wifi/examples/wifi-phy-configuration.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/wifi-phy-configuration.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Tom Henderson
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Tom Henderson <tomh@tomh.org>
  */
@@ -454,7 +443,6 @@
         NS_ASSERT(phySta->GetChannelWidth() == 20);
         NS_ASSERT(phySta->GetFrequency() == 5180);
         NS_ASSERT(exceptionThrown);
-        phySta->SetAttribute("ChannelSettings", StringValue("{36, 0, BAND_5GHZ, 0}"));
         exceptionThrown = false;
         try
         {
@@ -464,6 +452,7 @@
         {
             exceptionThrown = true;
         }
+        phySta->SetAttribute("ChannelSettings", StringValue("{36, 0, BAND_5GHZ, 0}"));
         // We expect channel number to be 36 and an exception to be thrown
         NS_ASSERT(phySta->GetChannelNumber() == 36);
         NS_ASSERT(phySta->GetChannelWidth() == 20);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/wifi-phy-rx-trace-example.cc ns-3.43/src/wifi/examples/wifi-phy-rx-trace-example.cc
--- ns-3.42/src/wifi/examples/wifi-phy-rx-trace-example.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/wifi-phy-rx-trace-example.cc	2024-10-09 16:41:10.112656800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 The Boeing Company
  * Copyright (c) 2024 University of Washington (updated to 802.11ax standard)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/wifi-phy-test.cc ns-3.43/src/wifi/examples/wifi-phy-test.cc
--- ns-3.42/src/wifi/examples/wifi-phy-test.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/wifi-phy-test.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -39,7 +28,7 @@
     struct Input
     {
         Input();
-        double distance;      ///< distance
+        meter_u distance;     ///< distance
         std::string txMode;   ///< transmit mode
         uint8_t txPowerLevel; ///< transmit power level
         uint32_t packetSize;  ///< packet size
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/wifi-test-interference-helper.cc ns-3.43/src/wifi/examples/wifi-test-interference-helper.cc
--- ns-3.42/src/wifi/examples/wifi-test-interference-helper.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/wifi-test-interference-helper.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -84,8 +73,8 @@
     {
         Input();
         Time interval;         ///< interval
-        double xA;             ///< x A
-        double xB;             ///< x B
+        meter_u xA;            ///< x A
+        meter_u xB;            ///< x B
         std::string txModeA;   ///< transmit mode A
         std::string txModeB;   ///< transmit mode B
         double txPowerLevelA;  ///< transmit power level A
@@ -94,8 +83,8 @@
         uint32_t packetSizeB;  ///< packet size B
         uint16_t channelA;     ///< channel number A
         uint16_t channelB;     ///< channel number B
-        uint16_t widthA;       ///< channel width A
-        uint16_t widthB;       ///< channel width B
+        MHz_u widthA;          ///< channel width A
+        MHz_u widthB;          ///< channel width B
         WifiStandard standard; ///< standard
         WifiPhyBand band;      ///< band
         WifiPreamble preamble; ///< preamble
@@ -317,13 +306,13 @@
     InterferenceExperiment::Input input;
     std::string str_standard = "WIFI_PHY_STANDARD_80211a";
     std::string str_preamble = "WIFI_PREAMBLE_LONG";
-    uint64_t delay = 0; // microseconds
+    Time delay{"0us"};
 
     CommandLine cmd(__FILE__);
-    cmd.AddValue("delay",
-                 "Delay in microseconds between frame transmission from sender A and frame "
-                 "transmission from sender B",
-                 delay);
+    cmd.AddValue(
+        "delay",
+        "Delay between frame transmission from sender A and frame transmission from sender B",
+        delay);
     cmd.AddValue("xA", "The position of transmitter A (< 0)", input.xA);
     cmd.AddValue("xB", "The position of transmitter B (> 0)", input.xB);
     cmd.AddValue("packetSizeA", "Packet size in bytes of transmitter A", input.packetSizeA);
@@ -349,7 +338,7 @@
                  expectRxBSuccessful);
     cmd.Parse(argc, argv);
 
-    input.interval = MicroSeconds(delay);
+    input.interval = delay;
 
     if (input.xA >= 0 || input.xB <= 0)
     {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/wifi-trans-example.cc ns-3.43/src/wifi/examples/wifi-trans-example.cc
--- ns-3.42/src/wifi/examples/wifi-trans-example.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/wifi-trans-example.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  */
@@ -53,15 +42,15 @@
 int
 main(int argc, char** argv)
 {
-    std::string standard = "11a";
-    int bw = 20;
-    double pow = 23; // dBm
+    std::string standardStr = "11a";
+    MHz_u bw = 20;
+    dBm_u pow = 23;
     bool verbose = false;
     CommandLine cmd(__FILE__);
     cmd.AddValue("standard",
                  "OFDM-based Wi-Fi standard [11a, 11p_10MHZ, 11p_5MHZ, 11n_2_4GHZ, 11n_5GHZ, 11ac, "
                  "11ax_2_4GHZ, 11ax_5GHZ]",
-                 standard);
+                 standardStr);
     cmd.AddValue("bw", "Bandwidth (consistent with standard, in MHz)", bw);
     cmd.AddValue("txPower", "Transmit power (dBm)", pow);
     cmd.AddValue("verbose",
@@ -72,14 +61,19 @@
     WifiHelper wifi;
     Ssid ssid;
     std::string dataRate;
-    int freq;
+    MHz_u freq;
     Time dataStartTime =
         MicroSeconds(800); // leaving enough time for beacon and association procedure
     Time dataDuration =
         MicroSeconds(300); // leaving enough time for data transfer (+ acknowledgment)
-    if (standard == "11a")
-    {
-        wifi.SetStandard(WIFI_STANDARD_80211a);
+    WifiStandard standard{WifiStandard::WIFI_STANDARD_UNSPECIFIED};
+    WifiPhyBand phyBand{WIFI_PHY_BAND_UNSPECIFIED};
+    std::string channelBand;
+    if (standardStr == "11a")
+    {
+        standard = WIFI_STANDARD_80211a;
+        phyBand = WIFI_PHY_BAND_5GHZ;
+        channelBand = "BAND_5GHZ";
         ssid = Ssid("ns380211a");
         dataRate = "OfdmRate6Mbps";
         freq = 5180;
@@ -89,9 +83,11 @@
             return 1;
         }
     }
-    else if (standard == "11p_10MHZ")
+    else if (standardStr == "11p_10MHZ")
     {
-        wifi.SetStandard(WIFI_STANDARD_80211p);
+        standard = WIFI_STANDARD_80211p;
+        phyBand = WIFI_PHY_BAND_5GHZ;
+        channelBand = "BAND_5GHZ";
         ssid = Ssid("ns380211p_10MHZ");
         dataRate = "OfdmRate3MbpsBW10MHz";
         freq = 5860;
@@ -103,9 +99,11 @@
             return 1;
         }
     }
-    else if (standard == "11p_5MHZ")
+    else if (standardStr == "11p_5MHZ")
     {
-        wifi.SetStandard(WIFI_STANDARD_80211p);
+        standard = WIFI_STANDARD_80211p;
+        phyBand = WIFI_PHY_BAND_5GHZ;
+        channelBand = "BAND_5GHZ";
         ssid = Ssid("ns380211p_5MHZ");
         dataRate = "OfdmRate1_5MbpsBW5MHz";
         freq = 5860;
@@ -117,9 +115,11 @@
             return 1;
         }
     }
-    else if (standard == "11n_2_4GHZ")
+    else if (standardStr == "11n_2_4GHZ")
     {
-        wifi.SetStandard(WIFI_STANDARD_80211n);
+        standard = WIFI_STANDARD_80211n;
+        phyBand = WIFI_PHY_BAND_2_4GHZ;
+        channelBand = "BAND_2_4GHZ";
         ssid = Ssid("ns380211n_2_4GHZ");
         dataRate = "HtMcs0";
         freq = 2402 + (bw / 2); // so as to have 2412/2422 for 20/40
@@ -131,9 +131,11 @@
             return 1;
         }
     }
-    else if (standard == "11n_5GHZ")
+    else if (standardStr == "11n_5GHZ")
     {
-        wifi.SetStandard(WIFI_STANDARD_80211n);
+        standard = WIFI_STANDARD_80211n;
+        phyBand = WIFI_PHY_BAND_5GHZ;
+        channelBand = "BAND_5GHZ";
         ssid = Ssid("ns380211n_5GHZ");
         dataRate = "HtMcs0";
         freq = 5170 + (bw / 2); // so as to have 5180/5190 for 20/40
@@ -144,9 +146,11 @@
             return 1;
         }
     }
-    else if (standard == "11ac")
+    else if (standardStr == "11ac")
     {
-        wifi.SetStandard(WIFI_STANDARD_80211ac);
+        standard = WIFI_STANDARD_80211ac;
+        phyBand = WIFI_PHY_BAND_5GHZ;
+        channelBand = "BAND_5GHZ";
         ssid = Ssid("ns380211ac");
         dataRate = "VhtMcs0";
         freq = 5170 + (bw / 2); // so as to have 5180/5190/5210/5250 for 20/40/80/160
@@ -158,9 +162,11 @@
             return 1;
         }
     }
-    else if (standard == "11ax_2_4GHZ")
+    else if (standardStr == "11ax_2_4GHZ")
     {
-        wifi.SetStandard(WIFI_STANDARD_80211ax);
+        standard = WIFI_STANDARD_80211ax;
+        phyBand = WIFI_PHY_BAND_2_4GHZ;
+        channelBand = "BAND_2_4GHZ";
         ssid = Ssid("ns380211ax_2_4GHZ");
         dataRate = "HeMcs0";
         freq = 2402 + (bw / 2); // so as to have 2412/2422/2442 for 20/40/80
@@ -172,9 +178,11 @@
             return 1;
         }
     }
-    else if (standard == "11ax_5GHZ")
+    else if (standardStr == "11ax_5GHZ")
     {
-        wifi.SetStandard(WIFI_STANDARD_80211ax);
+        standard = WIFI_STANDARD_80211ax;
+        phyBand = WIFI_PHY_BAND_5GHZ;
+        channelBand = "BAND_5GHZ";
         ssid = Ssid("ns380211ax_5GHZ");
         dataRate = "HeMcs0";
         freq = 5170 + (bw / 2); // so as to have 5180/5190/5210/5250 for 20/40/80/160
@@ -226,12 +234,15 @@
     SpectrumWifiPhyHelper spectrumPhy;
     spectrumPhy.SetChannel(channel);
     spectrumPhy.SetErrorRateModel("ns3::NistErrorRateModel");
-    spectrumPhy.Set("Frequency", UintegerValue(freq));
-    spectrumPhy.Set("ChannelWidth", UintegerValue(bw));
     spectrumPhy.Set("TxPowerStart", DoubleValue(pow)); // dBm
     spectrumPhy.Set("TxPowerEnd", DoubleValue(pow));
+    auto channelNumber = WifiPhyOperatingChannel::FindFirst(0, freq, bw, standard, phyBand)->number;
+    std::ostringstream channelSettings;
+    channelSettings << "{" << +channelNumber << ", " << bw << ", " << channelBand << ", 0}";
+    spectrumPhy.Set("ChannelSettings", StringValue(channelSettings.str()));
 
     WifiMacHelper mac;
+    wifi.SetStandard(standard);
     wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
                                  "DataMode",
                                  StringValue(dataRate),
@@ -285,7 +296,7 @@
         TimeValue(MicroSeconds(4))); // enough resolution to distinguish OFDM symbols (default 1ms
                                      // too long even for PPDUs)
     std::ostringstream ossFileName;
-    ossFileName << "spectrum-analyzer-wifi-" << standard << "-" << bw << "MHz";
+    ossFileName << "spectrum-analyzer-wifi-" << standardStr << "-" << bw << "MHz";
     spectrumAnalyzerHelper.EnableAsciiAll(ossFileName.str());
     NetDeviceContainer spectrumAnalyzerDevices =
         spectrumAnalyzerHelper.Install(spectrumAnalyzerNodes);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/examples/wifi-trans-example.sh ns-3.43/src/wifi/examples/wifi-trans-example.sh
--- ns-3.42/src/wifi/examples/wifi-trans-example.sh	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/examples/wifi-trans-example.sh	2024-10-09 16:41:10.112656800 -0700
@@ -3,18 +3,7 @@
 #
 # Copyright (c) 2017 Orange Labs
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Rediet <getachew.redieteab@orange.com>
 #
@@ -56,7 +45,7 @@
 fi
 
 #List of available standards with corresponding bandwidth
-std_leg=("11a" "11_10MHZ" "11_5MHZ")
+std_leg=("11a" "11p_10MHZ" "11p_5MHZ")
 std_n=("11n_2_4GHZ" "11n_5GHZ")
 std_ac_ax=("11ac" "11ax_2_4GHZ" "11ax_5GHZ")
 bw_leg=(20 10 5)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/athstats-helper.cc ns-3.43/src/wifi/helper/athstats-helper.cc
--- ns-3.42/src/wifi/helper/athstats-helper.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/athstats-helper.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/athstats-helper.h ns-3.43/src/wifi/helper/athstats-helper.h
--- ns-3.42/src/wifi/helper/athstats-helper.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/athstats-helper.h	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/spectrum-wifi-helper.cc ns-3.43/src/wifi/helper/spectrum-wifi-helper.cc
--- ns-3.42/src/wifi/helper/spectrum-wifi-helper.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/spectrum-wifi-helper.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -200,7 +189,8 @@
             // no interface attached to that channel
             continue;
         }
-        spectrumPhy->ConfigureInterface(phy->GetFrequency(), phy->GetChannelWidth());
+        spectrumPhy->ConfigureInterface(phy->GetOperatingChannel().GetFrequencies(),
+                                        phy->GetChannelWidth());
     }
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/spectrum-wifi-helper.h ns-3.43/src/wifi/helper/spectrum-wifi-helper.h
--- ns-3.42/src/wifi/helper/spectrum-wifi-helper.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/spectrum-wifi-helper.h	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/wifi-helper.cc ns-3.43/src/wifi/helper/wifi-helper.cc
--- ns-3.42/src/wifi/helper/wifi-helper.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/wifi-helper.cc	2024-10-09 16:41:10.112656800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -40,7 +29,8 @@
 #include "ns3/vht-configuration.h"
 #include "ns3/wifi-mac-queue.h"
 #include "ns3/wifi-mac-trailer.h"
-#include "ns3/wifi-net-device.h"
+
+#include <memory>
 
 namespace ns3
 {
@@ -144,7 +134,8 @@
 }
 
 WifiPhyHelper::WifiPhyHelper(uint8_t nLinks)
-    : m_pcapDlt(PcapHelper::DLT_IEEE802_11)
+    : m_pcapDlt{PcapHelper::DLT_IEEE802_11},
+      m_pcapType{PcapCaptureType::PCAP_PER_PHY}
 {
     NS_ABORT_IF(nLinks == 0);
     m_phys.resize(nLinks);
@@ -177,22 +168,74 @@
 void
 WifiPhyHelper::DisablePreambleDetectionModel()
 {
-    for (auto& preambleDetectionModel : m_preambleDetectionModel)
+    m_preambleDetectionModel.clear();
+    m_preambleDetectionModel.resize(m_phys.size());
+}
+
+Ptr<PcapFileWrapper>
+WifiPhyHelper::GetOrCreatePcapFile(const std::shared_ptr<PcapFilesInfo>& info, uint8_t phyId)
+{
+    uint8_t fileIdx;
+    switch (info->pcapType)
+    {
+    case WifiPhyHelper::PcapCaptureType::PCAP_PER_DEVICE:
+        fileIdx = 0;
+        break;
+    case WifiPhyHelper::PcapCaptureType::PCAP_PER_PHY:
+        fileIdx = phyId;
+        break;
+    case WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK:
+        if (const auto linkId = info->device->GetMac()->GetLinkForPhy(phyId))
+        {
+            fileIdx = *linkId;
+            break;
+        }
+        return nullptr;
+    default:
+        NS_ABORT_MSG("Unexpected PCAP capture type");
+        return nullptr;
+    }
+
+    if (!info->files.contains(fileIdx))
     {
-        preambleDetectionModel.SetTypeId(TypeId());
+        // file does not exist yet, create it
+        auto tmp = info->commonFilename;
+
+        // find the last point in the filename
+        auto pos = info->commonFilename.find_last_of('.');
+        // if not found, set pos to filename size
+        pos = (pos == std::string::npos) ? info->commonFilename.size() : pos;
+
+        // insert PHY/link ID only for multi-link devices, unless a single PCAP is generated for the
+        // device
+        if ((info->device->GetNPhys() > 1) && (info->pcapType != PcapCaptureType::PCAP_PER_DEVICE))
+        {
+            tmp.insert(pos, "-" + std::to_string(fileIdx));
+        }
+
+        PcapHelper pcapHelper;
+        auto file = pcapHelper.CreateFile(tmp, std::ios::out, info->pcapDlt);
+        info->files.emplace(fileIdx, file);
     }
+
+    return info->files.at(fileIdx);
 }
 
 void
-WifiPhyHelper::PcapSniffTxEvent(Ptr<PcapFileWrapper> file,
+WifiPhyHelper::PcapSniffTxEvent(const std::shared_ptr<PcapFilesInfo>& info,
+                                uint8_t phyId,
                                 Ptr<const Packet> packet,
                                 uint16_t channelFreqMhz,
                                 WifiTxVector txVector,
                                 MpduInfo aMpdu,
                                 uint16_t staId)
 {
-    uint32_t dlt = file->GetDataLinkType();
-    switch (dlt)
+    auto file = GetOrCreatePcapFile(info, phyId);
+    if (!file)
+    {
+        return;
+    }
+    switch (info->pcapDlt)
     {
     case PcapHelper::DLT_IEEE802_11:
         file->Write(Simulator::Now(), packet);
@@ -210,12 +253,13 @@
         return;
     }
     default:
-        NS_ABORT_MSG("PcapSniffTxEvent(): Unexpected data link type " << dlt);
+        NS_ABORT_MSG("PcapSniffTxEvent(): Unexpected data link type " << info->pcapDlt);
     }
 }
 
 void
-WifiPhyHelper::PcapSniffRxEvent(Ptr<PcapFileWrapper> file,
+WifiPhyHelper::PcapSniffRxEvent(const std::shared_ptr<PcapFilesInfo>& info,
+                                uint8_t phyId,
                                 Ptr<const Packet> packet,
                                 uint16_t channelFreqMhz,
                                 WifiTxVector txVector,
@@ -223,8 +267,12 @@
                                 SignalNoiseDbm signalNoise,
                                 uint16_t staId)
 {
-    uint32_t dlt = file->GetDataLinkType();
-    switch (dlt)
+    auto file = GetOrCreatePcapFile(info, phyId);
+    if (!file)
+    {
+        return;
+    }
+    switch (info->pcapDlt)
     {
     case PcapHelper::DLT_IEEE802_11:
         file->Write(Simulator::Now(), packet);
@@ -242,7 +290,7 @@
         return;
     }
     default:
-        NS_ABORT_MSG("PcapSniffRxEvent(): Unexpected data link type " << dlt);
+        NS_ABORT_MSG("PcapSniffRxEvent(): Unexpected data link type " << info->pcapDlt);
     }
 }
 
@@ -281,7 +329,7 @@
         frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_PREAMBLE;
     }
 
-    if (txVector.GetGuardInterval() == 400)
+    if (txVector.GetGuardInterval().GetNanoSeconds() == 400)
     {
         frameFlags |= RadiotapHeader::FRAME_FLAG_SHORT_GUARD;
     }
@@ -339,7 +387,7 @@
         }
 
         mcsKnown |= RadiotapHeader::MCS_KNOWN_GUARD_INTERVAL;
-        if (txVector.GetGuardInterval() == 400)
+        if (txVector.GetGuardInterval().GetNanoSeconds() == 400)
         {
             mcsFlags |= RadiotapHeader::MCS_FLAGS_GUARD_INTERVAL;
         }
@@ -401,7 +449,7 @@
         }
 
         vhtKnown |= RadiotapHeader::VHT_KNOWN_GUARD_INTERVAL;
-        if (txVector.GetGuardInterval() == 400)
+        if (txVector.GetGuardInterval().GetNanoSeconds() == 400)
         {
             vhtFlags |= RadiotapHeader::VHT_FLAGS_GUARD_INTERVAL;
         }
@@ -517,11 +565,11 @@
         {
             data5 |= RadiotapHeader::HE_DATA5_DATA_BW_RU_ALLOC_160MHZ;
         }
-        if (txVector.GetGuardInterval() == 1600)
+        if (txVector.GetGuardInterval().GetNanoSeconds() == 1600)
         {
             data5 |= RadiotapHeader::HE_DATA5_GI_1_6;
         }
-        else if (txVector.GetGuardInterval() == 3200)
+        else if (txVector.GetGuardInterval().GetNanoSeconds() == 3200)
         {
             data5 |= RadiotapHeader::HE_DATA5_GI_3_2;
         }
@@ -565,6 +613,18 @@
 }
 
 void
+WifiPhyHelper::SetPcapCaptureType(PcapCaptureType type)
+{
+    m_pcapType = type;
+}
+
+WifiPhyHelper::PcapCaptureType
+WifiPhyHelper::GetPcapCaptureType() const
+{
+    return m_pcapType;
+}
+
+void
 WifiPhyHelper::EnablePcapInternal(std::string prefix,
                                   Ptr<NetDevice> nd,
                                   bool promiscuous,
@@ -587,7 +647,6 @@
                     "WifiPhyHelper::EnablePcapInternal(): Phy layer in WifiNetDevice must be set");
 
     PcapHelper pcapHelper;
-
     std::string filename;
     if (explicitFilename)
     {
@@ -598,25 +657,15 @@
         filename = pcapHelper.GetFilenameFromDevice(prefix, device);
     }
 
-    uint8_t linkId = 0;
-    // find the last point in the filename
-    auto pos = filename.find_last_of('.');
-    // if not found, set pos to filename size
-    pos = (pos == std::string::npos) ? filename.size() : pos;
-
+    auto info = std::make_shared<PcapFilesInfo>(filename, m_pcapDlt, m_pcapType, device);
     for (auto& phy : device->GetPhys())
     {
-        std::string tmp = filename;
-        if (device->GetNPhys() > 1)
-        {
-            // insert LinkId only for multi-link devices
-            tmp.insert(pos, "-" + std::to_string(linkId++));
-        }
-        auto file = pcapHelper.CreateFile(tmp, std::ios::out, m_pcapDlt);
-        phy->TraceConnectWithoutContext("MonitorSnifferTx",
-                                        MakeBoundCallback(&WifiPhyHelper::PcapSniffTxEvent, file));
-        phy->TraceConnectWithoutContext("MonitorSnifferRx",
-                                        MakeBoundCallback(&WifiPhyHelper::PcapSniffRxEvent, file));
+        phy->TraceConnectWithoutContext(
+            "MonitorSnifferTx",
+            MakeBoundCallback(&WifiPhyHelper::PcapSniffTxEvent, info, phy->GetPhyId()));
+        phy->TraceConnectWithoutContext(
+            "MonitorSnifferRx",
+            MakeBoundCallback(&WifiPhyHelper::PcapSniffRxEvent, info, phy->GetPhyId()));
     }
 }
 
@@ -734,6 +783,45 @@
     m_ehtConfig.SetTypeId("ns3::EhtConfiguration");
 }
 
+namespace
+{
+/// Map strings to WifiStandard enum values
+const std::unordered_map<std::string, WifiStandard> WIFI_STANDARDS_NAME_MAP{
+    // clang-format off
+    {"802.11a",  WIFI_STANDARD_80211a},
+    {"11a",      WIFI_STANDARD_80211a},
+
+    {"802.11b",  WIFI_STANDARD_80211b},
+    {"11b",      WIFI_STANDARD_80211b},
+
+    {"802.11g",  WIFI_STANDARD_80211g},
+    {"11g",      WIFI_STANDARD_80211g},
+
+    {"802.11p",  WIFI_STANDARD_80211p},
+    {"11p",      WIFI_STANDARD_80211p},
+
+    {"802.11n",  WIFI_STANDARD_80211n},
+    {"11n",      WIFI_STANDARD_80211n},
+    {"HT",       WIFI_STANDARD_80211n},
+
+    {"802.11ac", WIFI_STANDARD_80211ac},
+    {"11ac",     WIFI_STANDARD_80211ac},
+    {"VHT",      WIFI_STANDARD_80211ac},
+
+    {"802.11ad", WIFI_STANDARD_80211ad},
+    {"11ad",     WIFI_STANDARD_80211ad},
+
+    {"802.11ax", WIFI_STANDARD_80211ax},
+    {"11ax",     WIFI_STANDARD_80211ax},
+    {"HE",       WIFI_STANDARD_80211ax},
+
+    {"802.11be", WIFI_STANDARD_80211be},
+    {"11be",     WIFI_STANDARD_80211be},
+    {"EHT",      WIFI_STANDARD_80211be},
+    // clang-format on
+};
+} // namespace
+
 void
 WifiHelper::SetStandard(WifiStandard standard)
 {
@@ -741,6 +829,14 @@
 }
 
 void
+WifiHelper::SetStandard(const std::string& standard)
+{
+    NS_ABORT_MSG_IF(!WIFI_STANDARDS_NAME_MAP.contains(standard),
+                    "Specified Wi-Fi standard " << standard << " is currently not supported");
+    SetStandard(WIFI_STANDARDS_NAME_MAP.at(standard));
+}
+
+void
 WifiHelper::DisableFlowControl()
 {
     m_enableFlowControl = false;
@@ -885,7 +981,10 @@
     LogComponentEnable("AarfWifiManager", logLevel);
     LogComponentEnable("AarfcdWifiManager", logLevel);
     LogComponentEnable("AdhocWifiMac", logLevel);
+    LogComponentEnable("AdvancedApEmlsrManager", logLevel);
+    LogComponentEnable("AdvancedEmlsrManager", logLevel);
     LogComponentEnable("AmrrWifiManager", logLevel);
+    LogComponentEnable("ApEmlsrManager", logLevel);
     LogComponentEnable("ApWifiMac", logLevel);
     LogComponentEnable("AparfWifiManager", logLevel);
     LogComponentEnable("ArfWifiManager", logLevel);
@@ -895,6 +994,7 @@
     LogComponentEnable("ChannelAccessManager", logLevel);
     LogComponentEnable("ConstantObssPdAlgorithm", logLevel);
     LogComponentEnable("ConstantRateWifiManager", logLevel);
+    LogComponentEnable("DefaultApEmlsrManager", logLevel);
     LogComponentEnable("DefaultEmlsrManager", logLevel);
     LogComponentEnable("DsssErrorRateModel", logLevel);
     LogComponentEnable("DsssPhy", logLevel);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/wifi-helper.h ns-3.43/src/wifi/helper/wifi-helper.h
--- ns-3.42/src/wifi/helper/wifi-helper.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/wifi-helper.h	2024-10-09 16:41:10.112656800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2008 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -26,15 +15,16 @@
 
 #include "ns3/qos-utils.h"
 #include "ns3/trace-helper.h"
+#include "ns3/wifi-net-device.h"
 #include "ns3/wifi-phy.h"
 
 #include <functional>
+#include <map>
 #include <vector>
 
 namespace ns3
 {
 
-class WifiNetDevice;
 class Node;
 class RadiotapHeader;
 class QueueItem;
@@ -180,6 +170,49 @@
     };
 
     /**
+     * An enumeration of the PCAP capture types.
+     * The PCAP capture type only matters for multi-link devices.
+     */
+    enum class PcapCaptureType
+    {
+        PCAP_PER_DEVICE, /**< Single capture file per device */
+        PCAP_PER_PHY,    /**< Single capture file per PHY */
+        PCAP_PER_LINK,   /**< Single capture file per link */
+    };
+
+    /**
+     * structure holding the information about PCAP files generated for a given device
+     */
+    struct PcapFilesInfo
+    {
+        /**
+         * Constructor
+         *
+         * \param filename the common file name of the PCAP files
+         * \param dlt the selected data link type of the pcap file
+         * \param type the selected PCAP capture type
+         * \param dev the WifiNetDevice for which the PCAP files are generated
+         */
+        PcapFilesInfo(const std::string& filename,
+                      PcapHelper::DataLinkType dlt,
+                      WifiPhyHelper::PcapCaptureType type,
+                      Ptr<WifiNetDevice> dev)
+            : commonFilename{filename},
+              pcapDlt{dlt},
+              pcapType{type},
+              device{dev},
+              files{}
+        {
+        }
+
+        std::string commonFilename;              ///< common file name of the PCAP files
+        PcapHelper::DataLinkType pcapDlt;        ///< the selected data link type of the pcap file
+        WifiPhyHelper::PcapCaptureType pcapType; ///< the selected PCAP capture type
+        Ptr<WifiNetDevice> device; ///< the WifiNetDevice for which the PCAP files are generated
+        std::map<uint8_t, Ptr<PcapFileWrapper>> files; ///< PCAP files indexed by PHY ID
+    };
+
+    /**
      * Set the data link type of PCAP traces to be used. This function has to be
      * called before EnablePcap(), so that the header of the pcap file can be
      * written correctly.
@@ -199,9 +232,28 @@
      */
     PcapHelper::DataLinkType GetPcapDataLinkType() const;
 
+    /**
+     * Set the PCAP capture type to be used. This function has to be called before EnablePcap().
+     *
+     * \see PcapCaptureType
+     *
+     * \param type The PCAP capture type
+     */
+    void SetPcapCaptureType(PcapCaptureType type);
+
+    /**
+     * Get the PCAP capture type to be used.
+     *
+     * \see PcapCaptureType
+     *
+     * \return The PCAP capture type to be used
+     */
+    PcapCaptureType GetPcapCaptureType() const;
+
   protected:
     /**
-     * \param file the pcap file wrapper
+     * \param info the information needed to write to the correct PCAP file
+     * \param phyId the ID of the PHY that raised the event
      * \param packet the packet
      * \param channelFreqMhz the channel frequency
      * \param txVector the TXVECTOR
@@ -210,14 +262,16 @@
      *
      * Handle TX pcap.
      */
-    static void PcapSniffTxEvent(Ptr<PcapFileWrapper> file,
+    static void PcapSniffTxEvent(const std::shared_ptr<PcapFilesInfo>& info,
+                                 uint8_t phyId,
                                  Ptr<const Packet> packet,
                                  uint16_t channelFreqMhz,
                                  WifiTxVector txVector,
                                  MpduInfo aMpdu,
                                  uint16_t staId = SU_STA_ID);
     /**
-     * \param file the pcap file wrapper
+     * \param info the information needed to write to the correct PCAP file
+     * \param phyId the ID of the PHY that raised the event
      * \param packet the packet
      * \param channelFreqMhz the channel frequency
      * \param txVector the TXVECTOR
@@ -227,7 +281,8 @@
      *
      * Handle RX pcap.
      */
-    static void PcapSniffRxEvent(Ptr<PcapFileWrapper> file,
+    static void PcapSniffRxEvent(const std::shared_ptr<PcapFilesInfo>& info,
+                                 uint8_t phyId,
                                  Ptr<const Packet> packet,
                                  uint16_t channelFreqMhz,
                                  WifiTxVector txVector,
@@ -243,6 +298,18 @@
 
   private:
     /**
+     * Get the PCAP file to write to from a list of PCAP files indexed by PHY ID.
+     * If PCAP files are generated per link, it might create a new file if a link
+     * has swapped to a new ID.
+     *
+     * \param info the information needed to write to the correct PCAP file
+     * \param phyId the ID of the PHY that raised the event
+     * \return the PCAP file to write to
+     */
+    static Ptr<PcapFileWrapper> GetOrCreatePcapFile(const std::shared_ptr<PcapFilesInfo>& info,
+                                                    uint8_t phyId);
+
+    /**
      * Get the Radiotap header for a transmitted packet.
      *
      * \param header the radiotap header to be filled in
@@ -311,6 +378,7 @@
                              bool explicitFilename) override;
 
     PcapHelper::DataLinkType m_pcapDlt; ///< PCAP data link type
+    PcapCaptureType m_pcapType;         ///< PCAP capture type
 };
 
 /**
@@ -331,7 +399,7 @@
      *
      * The default state is defined as being an Adhoc MAC layer with an ARF rate control algorithm
      * and both objects using their default attribute values.
-     * By default, configure MAC and PHY for 802.11a.
+     * By default, configure MAC and PHY for 802.11ax.
      */
     WifiHelper();
 
@@ -438,7 +506,7 @@
      * WifiMac::ConfigureStandard(standard) being called on each
      * installed MAC object.
      *
-     * The default standard of 802.11a will be applied if SetStandard()
+     * The default standard of 802.11ax will be applied if SetStandard()
      * is not called.
      *
      * Note that WifiMac::ConfigureStandard () will overwrite certain
@@ -456,6 +524,17 @@
     virtual void SetStandard(WifiStandard standard);
 
     /**
+     * \param standard String representation of the Wi-Fi standard
+     *
+     * This method overloads WifiHelper::SetStandard(WifiStandard standard) by allowing
+     * selected string names. For example, the strings "802.11ax", "11ax", and "HE"
+     * are equivalent and map to WIFI_STANDARD_80211ax. See the documentation of the specified
+     * function to see how it interacts with attribute configuration.
+     * \sa WifiHelper::SetStandard(WifiStandard standard)
+     */
+    void SetStandard(const std::string& standard);
+
+    /**
      * Helper function used to configure the HT options listed as attributes of
      * the HtConfiguration class.
      *
@@ -515,7 +594,7 @@
      * \param stream first stream index to use
      * \return the number of stream indices assigned by this helper
      */
-    int64_t AssignStreams(NetDeviceContainer c, int64_t stream);
+    static int64_t AssignStreams(NetDeviceContainer c, int64_t stream);
 
   protected:
     mutable std::vector<ObjectFactory> m_stationManager; ///< station manager
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/wifi-mac-helper.cc ns-3.43/src/wifi/helper/wifi-mac-helper.cc
--- ns-3.42/src/wifi/helper/wifi-mac-helper.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/wifi-mac-helper.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,24 +1,14 @@
 /*
  * Copyright (c) 2016
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
 #include "wifi-mac-helper.h"
 
+#include "ns3/ap-emlsr-manager.h"
 #include "ns3/boolean.h"
 #include "ns3/eht-configuration.h"
 #include "ns3/emlsr-manager.h"
@@ -59,6 +49,7 @@
     m_protectionManager.SetTypeId("ns3::WifiDefaultProtectionManager");
     m_ackManager.SetTypeId("ns3::WifiDefaultAckManager");
     m_emlsrManager.SetTypeId("ns3::DefaultEmlsrManager");
+    m_apEmlsrManager.SetTypeId("ns3::DefaultApEmlsrManager");
 }
 
 WifiMacHelper::~WifiMacHelper()
@@ -167,6 +158,16 @@
         staMac->SetEmlsrManager(emlsrManager);
     }
 
+    // create and install the AP EMLSR Manager if this is an EHT AP MLD with EMLSR activated
+    if (BooleanValue emlsrActivated;
+        standard >= WIFI_STANDARD_80211be && apMac && apMac->GetNLinks() > 1 &&
+        device->GetEhtConfiguration()->GetAttributeFailSafe("EmlsrActivated", emlsrActivated) &&
+        emlsrActivated.Get())
+    {
+        auto apEmlsrManager = m_apEmlsrManager.Create<ApEmlsrManager>();
+        apMac->SetApEmlsrManager(apEmlsrManager);
+    }
+
     return mac;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/wifi-mac-helper.h ns-3.43/src/wifi/helper/wifi-mac-helper.h
--- ns-3.42/src/wifi/helper/wifi-mac-helper.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/wifi-mac-helper.h	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -170,6 +159,16 @@
     void SetEmlsrManager(std::string type, Args&&... args);
 
     /**
+     * Helper function used to set the AP EMLSR Manager that can be installed on an EHT AP MLD.
+     *
+     * \tparam Args \deduced Template type parameter pack for the sequence of name-value pairs.
+     * \param type the type of AP EMLSR Manager
+     * \param args A sequence of name-value pairs of the attributes to set.
+     */
+    template <typename... Args>
+    void SetApEmlsrManager(std::string type, Args&&... args);
+
+    /**
      * \param device the device within which the MAC object will reside
      * \param standard the standard to configure during installation
      * \returns a new MAC object.
@@ -190,6 +189,7 @@
     ObjectFactory m_ackManager;           ///< Factory to create an acknowledgment manager
     ObjectFactory m_muScheduler;          ///< Multi-user Scheduler object factory
     ObjectFactory m_emlsrManager;         ///< EMLSR Manager object factory
+    ObjectFactory m_apEmlsrManager;       ///< AP EMLSR Manager object factory
 };
 
 } // namespace ns3
@@ -287,6 +287,14 @@
     m_emlsrManager.Set(args...);
 }
 
+template <typename... Args>
+void
+WifiMacHelper::SetApEmlsrManager(std::string type, Args&&... args)
+{
+    m_apEmlsrManager.SetTypeId(type);
+    m_apEmlsrManager.Set(args...);
+}
+
 } // namespace ns3
 
 #endif /* WIFI_MAC_HELPER_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/wifi-phy-rx-trace-helper.cc ns-3.43/src/wifi/helper/wifi-phy-rx-trace-helper.cc
--- ns-3.42/src/wifi/helper/wifi-phy-rx-trace-helper.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/wifi-phy-rx-trace-helper.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "wifi-phy-rx-trace-helper.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/wifi-phy-rx-trace-helper.h ns-3.43/src/wifi/helper/wifi-phy-rx-trace-helper.h
--- ns-3.42/src/wifi/helper/wifi-phy-rx-trace-helper.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/wifi-phy-rx-trace-helper.h	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef WIFI_PHY_RX_TRACE_HELPER_H
@@ -671,7 +660,7 @@
      * boolean flag can be toggled to control the granularity and scope of data collection, enabling
      * customization of the analysis to focus on specific times of interest.
      */
-    bool m_statisticsCollectionPeriodStarted;
+    bool m_statisticsCollectionPeriodStarted{false};
 
     /**
      * Update the passed-in statistics object with statistics from the passed-in record.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/wifi-radio-energy-model-helper.cc ns-3.43/src/wifi/helper/wifi-radio-energy-model-helper.cc
--- ns-3.42/src/wifi/helper/wifi-radio-energy-model-helper.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/wifi-radio-energy-model-helper.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/wifi-radio-energy-model-helper.h ns-3.43/src/wifi/helper/wifi-radio-energy-model-helper.h
--- ns-3.42/src/wifi/helper/wifi-radio-energy-model-helper.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/wifi-radio-energy-model-helper.h	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/yans-wifi-helper.cc ns-3.43/src/wifi/helper/yans-wifi-helper.cc
--- ns-3.42/src/wifi/helper/yans-wifi-helper.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/yans-wifi-helper.cc	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/helper/yans-wifi-helper.h ns-3.43/src/wifi/helper/yans-wifi-helper.h
--- ns-3.42/src/wifi/helper/yans-wifi-helper.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/helper/yans-wifi-helper.h	2024-10-09 16:41:10.112656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/addba-extension.cc ns-3.43/src/wifi/model/addba-extension.cc
--- ns-3.42/src/wifi/model/addba-extension.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/addba-extension.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/addba-extension.h ns-3.43/src/wifi/model/addba-extension.h
--- ns-3.42/src/wifi/model/addba-extension.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/addba-extension.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/adhoc-wifi-mac.cc ns-3.43/src/wifi/model/adhoc-wifi-mac.cc
--- ns-3.42/src/wifi/model/adhoc-wifi-mac.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/adhoc-wifi-mac.cc	2024-10-09 16:41:10.116656800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -72,9 +61,10 @@
 }
 
 void
-AdhocWifiMac::Enqueue(Ptr<Packet> packet, Mac48Address to)
+AdhocWifiMac::Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from)
 {
-    NS_LOG_FUNCTION(this << packet << to);
+    NS_LOG_FUNCTION(this << *mpdu << to << from);
+
     if (GetWifiRemoteStationManager()->IsBrandNew(to))
     {
         // In ad hoc mode, we assume that every destination supports all the rates we support.
@@ -113,65 +103,17 @@
         GetWifiRemoteStationManager()->RecordDisassociated(to);
     }
 
-    WifiMacHeader hdr;
-
-    // If we are not a QoS STA then we definitely want to use AC_BE to
-    // transmit the packet. A TID of zero will map to AC_BE (through \c
-    // QosUtilsMapTidToAc()), so we use that as our default here.
-    uint8_t tid = 0;
-
-    // For now, a STA that supports QoS does not support non-QoS
-    // associations, and vice versa. In future the STA model should fall
-    // back to non-QoS if talking to a peer that is also non-QoS. At
-    // that point there will need to be per-station QoS state maintained
-    // by the association state machine, and consulted here.
-    if (GetQosSupported())
-    {
-        hdr.SetType(WIFI_MAC_QOSDATA);
-        hdr.SetQosAckPolicy(WifiMacHeader::NORMAL_ACK);
-        hdr.SetQosNoEosp();
-        hdr.SetQosNoAmsdu();
-        // Transmission of multiple frames in the same TXOP is not
-        // supported for now
-        hdr.SetQosTxopLimit(0);
-
-        // Fill in the QoS control field in the MAC header
-        tid = QosUtilsGetTidForPacket(packet);
-        // Any value greater than 7 is invalid and likely indicates that
-        // the packet had no QoS tag, so we revert to zero, which will
-        // mean that AC_BE is used.
-        if (tid > 7)
-        {
-            tid = 0;
-        }
-        hdr.SetQosTid(tid);
-    }
-    else
-    {
-        hdr.SetType(WIFI_MAC_DATA);
-    }
+    auto& hdr = mpdu->GetHeader();
 
-    if (GetHtSupported(SINGLE_LINK_OP_ID))
-    {
-        hdr.SetNoOrder(); // explicitly set to 0 for the time being since HT control field is not
-                          // yet implemented (set it to 1 when implemented)
-    }
     hdr.SetAddr1(to);
     hdr.SetAddr2(GetAddress());
-    hdr.SetAddr3(GetBssid(0));
+    hdr.SetAddr3(GetBssid(SINGLE_LINK_OP_ID));
     hdr.SetDsNotFrom();
     hdr.SetDsNotTo();
 
-    if (GetQosSupported())
-    {
-        // Sanity check that the TID is valid
-        NS_ASSERT(tid < 8);
-        GetQosTxop(tid)->Queue(packet, hdr);
-    }
-    else
-    {
-        GetTxop()->Queue(packet, hdr);
-    }
+    auto txop = hdr.IsQosData() ? StaticCast<Txop>(GetQosTxop(hdr.GetQosTid())) : GetTxop();
+    NS_ASSERT(txop);
+    txop->Queue(mpdu);
 }
 
 void
@@ -239,9 +181,7 @@
         return;
     }
 
-    // Invoke the receive handler of our parent class to deal with any
-    // other frames. Specifically, this will handle Block Ack-related
-    // Management Action frames.
+    // Invoke the receive handler of our parent class to deal with any other frames
     WifiMac::Receive(mpdu, linkId);
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/adhoc-wifi-mac.h ns-3.43/src/wifi/model/adhoc-wifi-mac.h
--- ns-3.42/src/wifi/model/adhoc-wifi-mac.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/adhoc-wifi-mac.h	2024-10-09 16:41:10.116656800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -45,12 +34,12 @@
     ~AdhocWifiMac() override;
 
     void SetLinkUpCallback(Callback<void> linkUp) override;
-    void Enqueue(Ptr<Packet> packet, Mac48Address to) override;
     bool CanForwardPacketsTo(Mac48Address to) const override;
 
   private:
     void Receive(Ptr<const WifiMpdu> mpdu, uint8_t linkId) override;
     void DoCompleteConfig() override;
+    void Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from) override;
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ampdu-subframe-header.cc ns-3.43/src/wifi/model/ampdu-subframe-header.cc
--- ns-3.42/src/wifi/model/ampdu-subframe-header.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/ampdu-subframe-header.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Ghada Badawy <gbadawy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ampdu-subframe-header.h ns-3.43/src/wifi/model/ampdu-subframe-header.h
--- ns-3.42/src/wifi/model/ampdu-subframe-header.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/ampdu-subframe-header.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Ghada Badawy <gbadawy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ampdu-tag.cc ns-3.43/src/wifi/model/ampdu-tag.cc
--- ns-3.42/src/wifi/model/ampdu-tag.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/ampdu-tag.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Ghada Badawy <gbadawy@gmail.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ampdu-tag.h ns-3.43/src/wifi/model/ampdu-tag.h
--- ns-3.42/src/wifi/model/ampdu-tag.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/ampdu-tag.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Ghada Badawy <gbadawy@gmail.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/amsdu-subframe-header.cc ns-3.43/src/wifi/model/amsdu-subframe-header.cc
--- ns-3.42/src/wifi/model/amsdu-subframe-header.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/amsdu-subframe-header.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/amsdu-subframe-header.h ns-3.43/src/wifi/model/amsdu-subframe-header.h
--- ns-3.42/src/wifi/model/amsdu-subframe-header.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/amsdu-subframe-header.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ap-wifi-mac.cc ns-3.43/src/wifi/model/ap-wifi-mac.cc
--- ns-3.42/src/wifi/model/ap-wifi-mac.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/ap-wifi-mac.cc	2024-10-09 16:41:10.116656800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -35,6 +24,7 @@
 #include "wifi-net-device.h"
 #include "wifi-phy.h"
 
+#include "ns3/ap-emlsr-manager.h"
 #include "ns3/eht-configuration.h"
 #include "ns3/eht-frame-exchange-manager.h"
 #include "ns3/he-configuration.h"
@@ -235,6 +225,11 @@
     m_beaconTxop->Dispose();
     m_beaconTxop = nullptr;
     m_enableBeaconGeneration = false;
+    if (m_apEmlsrManager)
+    {
+        m_apEmlsrManager->Dispose();
+    }
+    m_apEmlsrManager = nullptr;
     WifiMac::DoDispose();
 }
 
@@ -257,6 +252,20 @@
 }
 
 void
+ApWifiMac::SetApEmlsrManager(Ptr<ApEmlsrManager> apEmlsrManager)
+{
+    NS_LOG_FUNCTION(this << apEmlsrManager);
+    m_apEmlsrManager = apEmlsrManager;
+    m_apEmlsrManager->SetWifiMac(this);
+}
+
+Ptr<ApEmlsrManager>
+ApWifiMac::GetApEmlsrManager() const
+{
+    return m_apEmlsrManager;
+}
+
+void
 ApWifiMac::DoCompleteConfig()
 {
     NS_LOG_FUNCTION(this);
@@ -394,63 +403,16 @@
     }
 }
 
-void
-ApWifiMac::ForwardDown(Ptr<Packet> packet, Mac48Address from, Mac48Address to)
+bool
+ApWifiMac::CanForwardPacketsTo(Mac48Address to) const
 {
-    NS_LOG_FUNCTION(this << packet << from << to);
-    // If we are not a QoS AP then we definitely want to use AC_BE to
-    // transmit the packet. A TID of zero will map to AC_BE (through \c
-    // QosUtilsMapTidToAc()), so we use that as our default here.
-    uint8_t tid = 0;
-
-    // If we are a QoS AP then we attempt to get a TID for this packet
-    if (GetQosSupported())
-    {
-        tid = QosUtilsGetTidForPacket(packet);
-        // Any value greater than 7 is invalid and likely indicates that
-        // the packet had no QoS tag, so we revert to zero, which'll
-        // mean that AC_BE is used.
-        if (tid > 7)
-        {
-            tid = 0;
-        }
-    }
-
-    ForwardDown(packet, from, to, tid);
+    return (to.IsGroup() || IsAssociated(to));
 }
 
 void
-ApWifiMac::ForwardDown(Ptr<Packet> packet, Mac48Address from, Mac48Address to, uint8_t tid)
+ApWifiMac::Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from)
 {
-    NS_LOG_FUNCTION(this << packet << from << to << +tid);
-    WifiMacHeader hdr;
-
-    // For now, an AP that supports QoS does not support non-QoS
-    // associations, and vice versa. In future the AP model should
-    // support simultaneously associated QoS and non-QoS STAs, at which
-    // point there will need to be per-association QoS state maintained
-    // by the association state machine, and consulted here.
-    if (GetQosSupported())
-    {
-        hdr.SetType(WIFI_MAC_QOSDATA);
-        hdr.SetQosAckPolicy(WifiMacHeader::NORMAL_ACK);
-        hdr.SetQosNoEosp();
-        hdr.SetQosNoAmsdu();
-        // Transmission of multiple frames in the same Polled TXOP is not supported for now
-        hdr.SetQosTxopLimit(0);
-        // Fill in the QoS control field in the MAC header
-        hdr.SetQosTid(tid);
-    }
-    else
-    {
-        hdr.SetType(WIFI_MAC_DATA);
-    }
-
-    if (GetQosSupported())
-    {
-        hdr.SetNoOrder(); // explicitly set to 0 for the time being since HT control field is not
-                          // yet implemented (set it to 1 when implemented)
-    }
+    NS_LOG_FUNCTION(this << *mpdu << to << from);
 
     std::list<Mac48Address> addr2Set;
     if (to.IsGroup())
@@ -474,58 +436,29 @@
         }
     }
 
-    for (const auto& addr2 : addr2Set)
+    for (auto addr2 = addr2Set.cbegin(); addr2 != addr2Set.cend(); ++addr2)
     {
+        auto& hdr = mpdu->GetHeader();
+
         hdr.SetAddr1(to);
-        hdr.SetAddr2(addr2);
+        hdr.SetAddr2(*addr2);
         hdr.SetAddr3(from);
         hdr.SetDsFrom();
         hdr.SetDsNotTo();
 
-        if (GetQosSupported())
-        {
-            // Sanity check that the TID is valid
-            NS_ASSERT(tid < 8);
-            GetQosTxop(tid)->Queue(packet, hdr);
-        }
-        else
+        auto txop = hdr.IsQosData() ? StaticCast<Txop>(GetQosTxop(hdr.GetQosTid())) : GetTxop();
+        NS_ASSERT(txop);
+        txop->Queue(mpdu);
+
+        // create another MPDU if needed
+        if (std::next(addr2) != addr2Set.cend())
         {
-            GetTxop()->Queue(packet, hdr);
+            mpdu = Create<WifiMpdu>(mpdu->GetPacket()->Copy(), hdr);
         }
     }
 }
 
 bool
-ApWifiMac::CanForwardPacketsTo(Mac48Address to) const
-{
-    return (to.IsGroup() || IsAssociated(to));
-}
-
-void
-ApWifiMac::Enqueue(Ptr<Packet> packet, Mac48Address to, Mac48Address from)
-{
-    NS_LOG_FUNCTION(this << packet << to << from);
-    if (CanForwardPacketsTo(to))
-    {
-        ForwardDown(packet, from, to);
-    }
-    else
-    {
-        NotifyTxDrop(packet);
-    }
-}
-
-void
-ApWifiMac::Enqueue(Ptr<Packet> packet, Mac48Address to)
-{
-    NS_LOG_FUNCTION(this << packet << to);
-    // We're sending this packet with a from address that is our own. We
-    // get that address from the lower MAC and make use of the
-    // from-spoofing Enqueue() method to avoid duplicated code.
-    Enqueue(packet, to, GetAddress());
-}
-
-bool
 ApWifiMac::SupportsSendFrom() const
 {
     NS_LOG_FUNCTION(this);
@@ -917,10 +850,10 @@
     {
         uint8_t nss = (mcs.GetMcsValue() / 8) + 1;
         NS_ASSERT(nss > 0 && nss < 5);
-        uint64_t dataRate =
-            mcs.GetDataRate(phy->GetChannelWidth(),
-                            GetHtConfiguration()->GetShortGuardIntervalSupported() ? 400 : 800,
-                            nss);
+        uint64_t dataRate = mcs.GetDataRate(
+            phy->GetChannelWidth(),
+            NanoSeconds(GetHtConfiguration()->GetShortGuardIntervalSupported() ? 400 : 800),
+            nss);
         if (dataRate > maxSupportedRate)
         {
             maxSupportedRate = dataRate;
@@ -946,7 +879,9 @@
                 NS_ASSERT(nss > 0 && nss < 5);
                 uint64_t dataRate = mcs.GetDataRate(
                     remoteStationManager->GetChannelWidthSupported(sta.second),
-                    remoteStationManager->GetShortGuardIntervalSupported(sta.second) ? 400 : 800,
+                    NanoSeconds(remoteStationManager->GetShortGuardIntervalSupported(sta.second)
+                                    ? 400
+                                    : 800),
                     nss);
                 if (dataRate > maxSupportedRateByHtSta)
                 {
@@ -995,7 +930,7 @@
     auto phy = GetWifiPhy(linkId);
     auto remoteStationManager = GetWifiRemoteStationManager(linkId);
 
-    const uint16_t bssBandwidth = phy->GetChannelWidth();
+    const auto bssBandwidth = phy->GetChannelWidth();
     // Set to 0 for 20 MHz or 40 MHz BSS bandwidth.
     // Set to 1 for 80 MHz, 160 MHz or 80+80 MHz BSS bandwidth.
     operation.SetChannelWidth((bssBandwidth > 40) ? 1 : 0);
@@ -1004,16 +939,22 @@
     // For 160 MHz BSS bandwidth and the Channel Width subfield equal to 1,
     // indicates the channel center frequency index of the 80 MHz channel
     // segment that contains the primary channel.
+    // For 80+80 MHz BSS bandwidth and the Channel Width subfield equal to 1 or 3,
+    // indicates the channel center frequency index for the primary 80 MHz channel of the VHT BSS.
     operation.SetChannelCenterFrequencySegment0(
-        (bssBandwidth == 160)
-            ? phy->GetOperatingChannel().GetPrimaryChannelNumber(80, phy->GetStandard())
-            : phy->GetChannelNumber());
+        (bssBandwidth == 160) ? phy->GetPrimaryChannelNumber(80) : phy->GetChannelNumber());
     // For a 20, 40, or 80 MHz BSS bandwidth, this subfield is set to 0.
     // For a 160 MHz BSS bandwidth and the Channel Width subfield equal to 1,
     // indicates the channel center frequency index of the 160 MHz channel on
     // which the VHT BSS operates.
-    operation.SetChannelCenterFrequencySegment1((bssBandwidth == 160) ? phy->GetChannelNumber()
-                                                                      : 0);
+    // For an 80+80 MHz BSS bandwidth and the Channel Width subfield equal to 1 or 3,
+    // indicates the channel center frequency index of the secondary 80 MHz channel of the VHT BSS.
+    const auto& operatingChannel = phy->GetOperatingChannel();
+    const auto is80Plus80 =
+        operatingChannel.GetWidthType() == WifiChannelWidthType::CW_80_PLUS_80MHZ;
+    operation.SetChannelCenterFrequencySegment1(
+        (bssBandwidth == 160) ? is80Plus80 ? operatingChannel.GetNumber(1) : phy->GetChannelNumber()
+                              : 0);
     uint8_t maxSpatialStream = phy->GetMaxSupportedRxSpatialStreams();
     for (const auto& sta : GetLink(linkId).staList)
     {
@@ -1197,7 +1138,7 @@
 
     if (!GetQosSupported())
     {
-        GetTxop()->Queue(packet, hdr);
+        GetTxop()->Queue(Create<WifiMpdu>(packet, hdr));
     }
     // "A QoS STA that transmits a Management frame determines access category used
     // for medium access in transmission of the Management frame as follows
@@ -1208,11 +1149,11 @@
     //   shall be selected." (Sec. 10.2.3.2 of 802.11-2020)
     else if (!GetWifiRemoteStationManager(linkId)->GetQosSupported(to))
     {
-        GetBEQueue()->Queue(packet, hdr);
+        GetBEQueue()->Queue(Create<WifiMpdu>(packet, hdr));
     }
     else
     {
-        GetVOQueue()->Queue(packet, hdr);
+        GetVOQueue()->Queue(Create<WifiMpdu>(packet, hdr));
     }
 }
 
@@ -1327,105 +1268,58 @@
         return;
     }
 
-    // check if AIDs are already allocated to the STAs that are associating
+    const auto& [linkId, staAddr] = *linkIdStaAddrMap.cbegin();
+    const auto addr = GetWifiRemoteStationManager(linkId)->GetMldAddress(staAddr).value_or(staAddr);
+
+    // check if an AID is already allocated to the device that is associating
     std::set<uint16_t> aids;
-    std::map<uint8_t /* link ID */, uint16_t /* AID */> linkIdAidMap;
 
-    for (const auto& [id, staAddr] : linkIdStaAddrMap)
+    for (const auto& [id, link] : GetLinks())
     {
-        for (const auto& [aid, addr] : GetLink(id).staList)
-        {
-            if (addr == staAddr)
-            {
-                aids.insert(aid);
-                linkIdAidMap[id] = aid;
-                break;
-            }
-        }
-    }
-
-    // check if an AID already assigned to an STA can be assigned to all other STAs
-    // affiliated with the non-AP MLD we are associating with
-    while (!aids.empty())
-    {
-        const uint16_t aid = *aids.begin();
-        bool good = true;
-
-        for (const auto& [id, staAddr] : linkIdStaAddrMap)
-        {
-            if (auto it = GetLink(id).staList.find(aid);
-                it != GetLink(id).staList.end() && it->second != staAddr)
-            {
-                // the AID is already assigned to an STA other than the one affiliated
-                // with the non-AP MLD we are associating with
-                aids.erase(aids.begin());
-                good = false;
-                break;
-            }
-        }
-
-        if (good)
+        if (const auto aid = link->stationManager->GetAssociationId(addr); aid != SU_STA_ID)
         {
-            break;
+            aids.insert(aid);
         }
     }
 
-    uint16_t aid = 0;
+    NS_ABORT_MSG_IF(aids.size() > 1, addr << " cannot have more than one AID assigned");
 
-    if (!aids.empty())
-    {
-        // one of the AIDs already assigned to an STA can be assigned to all the other
-        // STAs affiliated with the non-AP MLD we are associating with
-        aid = *aids.begin();
-    }
-    else
-    {
-        std::list<uint8_t> linkIds;
-        std::transform(linkIdStaAddrMap.cbegin(),
-                       linkIdStaAddrMap.cend(),
-                       std::back_inserter(linkIds),
-                       [](auto&& linkIdStaAddrPair) { return linkIdStaAddrPair.first; });
-        aid = GetNextAssociationId(linkIds);
-    }
+    const auto aid = aids.empty() ? GetNextAssociationId() : *aids.cbegin();
 
     // store the MLD or link address in the AID-to-address map
-    const auto& [linkId, staAddr] = *linkIdStaAddrMap.cbegin();
-    m_aidToMldOrLinkAddress[aid] =
-        GetWifiRemoteStationManager(linkId)->GetMldAddress(staAddr).value_or(staAddr);
+    const auto [it, inserted] = m_aidToMldOrLinkAddress.emplace(aid, addr);
+
+    NS_ABORT_MSG_IF(!inserted, "AID " << aid << " already present, cannot be assigned to " << addr);
 
     for (const auto& [id, staAddr] : linkIdStaAddrMap)
     {
-        auto remoteStationManager = GetWifiRemoteStationManager(id);
         auto& link = GetLink(id);
 
-        if (auto it = linkIdAidMap.find(id); it == linkIdAidMap.end() || it->second != aid)
+        if (const auto [it, inserted] = link.staList.emplace(aid, staAddr); inserted)
         {
-            // the STA on this link has no AID assigned or has a different AID assigned
-            link.staList.insert(std::make_pair(aid, staAddr));
+            // the STA on this link had no AID assigned
             m_assocLogger(aid, staAddr);
-            remoteStationManager->SetAssociationId(staAddr, aid);
+            link.stationManager->SetAssociationId(staAddr, aid);
 
-            if (it == linkIdAidMap.end())
+            if (link.stationManager->GetDsssSupported(staAddr) &&
+                !link.stationManager->GetErpOfdmSupported(staAddr))
             {
-                // the STA on this link had no AID assigned
-                if (remoteStationManager->GetDsssSupported(staAddr) &&
-                    !remoteStationManager->GetErpOfdmSupported(staAddr))
-                {
-                    link.numNonErpStations++;
-                }
-                if (!remoteStationManager->GetHtSupported(staAddr) &&
-                    !remoteStationManager->GetStationHe6GhzCapabilities(staAddr))
-                {
-                    link.numNonHtStations++;
-                }
-                UpdateShortSlotTimeEnabled(id);
-                UpdateShortPreambleEnabled(id);
+                link.numNonErpStations++;
             }
-            else
+            if (!link.stationManager->GetHtSupported(staAddr) &&
+                !link.stationManager->GetStationHe6GhzCapabilities(staAddr))
             {
-                // the STA on this link had a different AID assigned
-                link.staList.erase(it->second); // free the previous AID
+                link.numNonHtStations++;
             }
+            UpdateShortSlotTimeEnabled(id);
+            UpdateShortPreambleEnabled(id);
+        }
+        else
+        {
+            // the STA on this link had an AID assigned
+            NS_ABORT_MSG_IF(it->first != aid,
+                            "AID " << it->first << " already assigned to " << staAddr
+                                   << ", could not assign " << aid);
         }
     }
 
@@ -1486,7 +1380,7 @@
 
     if (!GetQosSupported())
     {
-        GetTxop()->Queue(packet, hdr);
+        GetTxop()->Queue(Create<WifiMpdu>(packet, hdr));
     }
     // "A QoS STA that transmits a Management frame determines access category used
     // for medium access in transmission of the Management frame as follows
@@ -1497,11 +1391,11 @@
     //   shall be selected." (Sec. 10.2.3.2 of 802.11-2020)
     else if (!GetWifiRemoteStationManager(linkId)->GetQosSupported(to))
     {
-        GetBEQueue()->Queue(packet, hdr);
+        GetBEQueue()->Queue(Create<WifiMpdu>(packet, hdr));
     }
     else
     {
-        GetVOQueue()->Queue(packet, hdr);
+        GetVOQueue()->Queue(Create<WifiMpdu>(packet, hdr));
     }
 }
 
@@ -1596,7 +1490,7 @@
 
     NS_LOG_INFO("Generating beacon from " << link.feManager->GetAddress() << " linkID " << +linkId);
     // The beacon has it's own special queue, so we load it in there
-    m_beaconTxop->Queue(packet, hdr);
+    m_beaconTxop->Queue(Create<WifiMpdu>(packet, hdr));
     link.beaconEvent =
         Simulator::Schedule(GetBeaconInterval(), &ApWifiMac::SendOneBeacon, this, linkId);
 
@@ -1938,11 +1832,11 @@
                 // header...
                 if (hdr->IsQosData())
                 {
-                    ForwardDown(copy, from, to, hdr->GetQosTid());
+                    WifiMac::Enqueue(copy, to, from, hdr->GetQosTid());
                 }
                 else
                 {
-                    ForwardDown(copy, from, to);
+                    WifiMac::Enqueue(copy, to, from);
                 }
                 ForwardUp(packet, from, to);
             }
@@ -2079,9 +1973,7 @@
         }
     }
 
-    // Invoke the receive handler of our parent class to deal with any
-    // other frames. Specifically, this will handle Block Ack-related
-    // Management Action frames.
+    // Invoke the receive handler of our parent class to deal with any other frames
     WifiMac::Receive(Create<WifiMpdu>(packet, *hdr), linkId);
 }
 
@@ -2447,8 +2339,8 @@
     // when the transmission of the Ack following the received EML Notification frame is
     // completed. For this purpose, we connect a callback to the PHY TX begin trace to catch
     // the Ack transmitted after the EML Notification frame.
-    CallbackBase cb = Callback<void, WifiConstPsduMap, WifiTxVector, double>(
-        [=, this](WifiConstPsduMap psduMap, WifiTxVector txVector, double /* txPowerW */) {
+    CallbackBase cb = Callback<void, WifiConstPsduMap, WifiTxVector, Watt_u>(
+        [=, this](WifiConstPsduMap psduMap, WifiTxVector txVector, Watt_u /* txPower */) {
             NS_ASSERT_MSG(psduMap.size() == 1 && psduMap.begin()->second->GetNMpdus() == 1 &&
                               psduMap.begin()->second->GetHeader(0).IsAck(),
                           "Expected a Normal Ack after EML Notification frame");
@@ -2558,7 +2450,7 @@
         if (to.IsGroup() || IsAssociated(to))
         {
             NS_LOG_DEBUG("forwarding QoS frame from=" << from << ", to=" << to);
-            ForwardDown(i.first->Copy(), from, to, mpdu->GetHeader().GetQosTid());
+            WifiMac::Enqueue(i.first->Copy(), to, from, mpdu->GetHeader().GetQosTid());
         }
 
         ForwardUp(i.first, from, to);
@@ -2607,14 +2499,15 @@
 }
 
 uint16_t
-ApWifiMac::GetNextAssociationId(std::list<uint8_t> linkIds)
+ApWifiMac::GetNextAssociationId() const
 {
-    // Return the first AID value between 1 and 2007 that is free for all the given links
-    for (uint16_t nextAid = 1; nextAid <= 2007; nextAid++)
+    const auto& links = GetLinks();
+
+    // Return the first AID value between 1 and 2007 that is free for all the links
+    for (uint16_t nextAid = 1; nextAid <= 2007; ++nextAid)
     {
-        if (std::all_of(linkIds.begin(), linkIds.end(), [&](auto&& linkId) {
-                auto& staList = GetLink(linkId).staList;
-                return !staList.contains(nextAid);
+        if (std::none_of(links.cbegin(), links.cend(), [&](auto&& idLinkPair) {
+                return GetStaList(idLinkPair.first).contains(nextAid);
             }))
         {
             return nextAid;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ap-wifi-mac.h ns-3.43/src/wifi/model/ap-wifi-mac.h
--- ns-3.42/src/wifi/model/ap-wifi-mac.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/ap-wifi-mac.h	2024-10-09 16:41:10.116656800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -53,6 +42,7 @@
 class MgtReassocRequestHeader;
 class MgtAssocResponseHeader;
 class MgtEmlOmn;
+class ApEmlsrManager;
 
 /// variant holding a  reference to a (Re)Association Request
 using AssocReqRefVariant = std::variant<std::reference_wrapper<MgtAssocRequestHeader>,
@@ -83,13 +73,23 @@
 
     void SetLinkUpCallback(Callback<void> linkUp) override;
     bool CanForwardPacketsTo(Mac48Address to) const override;
-    void Enqueue(Ptr<Packet> packet, Mac48Address to) override;
-    void Enqueue(Ptr<Packet> packet, Mac48Address to, Mac48Address from) override;
     bool SupportsSendFrom() const override;
     Ptr<WifiMacQueue> GetTxopQueue(AcIndex ac) const override;
     int64_t AssignStreams(int64_t stream) override;
 
     /**
+     * Set the AP EMLSR Manager.
+     *
+     * \param apEmlsrManager the AP EMLSR Manager
+     */
+    void SetApEmlsrManager(Ptr<ApEmlsrManager> apEmlsrManager);
+
+    /**
+     * \return the AP EMLSR Manager
+     */
+    Ptr<ApEmlsrManager> GetApEmlsrManager() const;
+
+    /**
      * \param interval the interval between two beacon transmissions.
      */
     void SetBeaconInterval(Time interval);
@@ -266,6 +266,7 @@
     Mac48Address DoGetLocalAddress(const Mac48Address& remoteAddr) const override;
     void Receive(Ptr<const WifiMpdu> mpdu, uint8_t linkId) override;
     void DoCompleteConfig() override;
+    void Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from) override;
 
     /**
      * Check whether the supported rate set included in the received (Re)Association
@@ -335,24 +336,6 @@
      */
     void DeaggregateAmsduAndForward(Ptr<const WifiMpdu> mpdu) override;
     /**
-     * Forward the packet down to DCF/EDCAF (enqueue the packet). This method
-     * is a wrapper for ForwardDown with traffic id.
-     *
-     * \param packet the packet we are forwarding to DCF/EDCAF
-     * \param from the address to be used for Address 3 field in the header
-     * \param to the address to be used for Address 1 field in the header
-     */
-    void ForwardDown(Ptr<Packet> packet, Mac48Address from, Mac48Address to);
-    /**
-     * Forward the packet down to DCF/EDCAF (enqueue the packet).
-     *
-     * \param packet the packet we are forwarding to DCF/EDCAF
-     * \param from the address to be used for Address 3 field in the header
-     * \param to the address to be used for Address 1 field in the header
-     * \param tid the traffic id for the packet
-     */
-    void ForwardDown(Ptr<Packet> packet, Mac48Address from, Mac48Address to, uint8_t tid);
-    /**
      * Send a Probe Response in response to a Probe Request received from the STA with the
      * given address on the given link.
      *
@@ -584,10 +567,9 @@
     void DoInitialize() override;
 
     /**
-     * \param linkIds the IDs of the links for which the next Association ID is requested
-     * \return the next Association ID to be allocated by the AP on the given links
+     * \return the next Association ID to be allocated by the AP
      */
-    uint16_t GetNextAssociationId(std::list<uint8_t> linkIds);
+    uint16_t GetNextAssociationId() const;
 
     Ptr<Txop> m_beaconTxop;        //!< Dedicated Txop for beacons
     bool m_enableBeaconGeneration; //!< Flag whether beacons are being generated
@@ -600,6 +582,7 @@
     Time m_bsrLifetime;            //!< Lifetime of Buffer Status Reports
     /// transition timeout events running for EMLSR clients
     std::map<Mac48Address, EventId> m_transitionTimeoutEvents;
+    Ptr<ApEmlsrManager> m_apEmlsrManager; ///< AP EMLSR Manager
 
     UintAccessParamsMap m_cwMinsForSta;     //!< Per-AC CW min values to advertise to stations
     UintAccessParamsMap m_cwMaxsForSta;     //!< Per-AC CW max values to advertise to stations
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/block-ack-agreement.cc ns-3.43/src/wifi/model/block-ack-agreement.cc
--- ns-3.42/src/wifi/model/block-ack-agreement.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/block-ack-agreement.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/block-ack-agreement.h ns-3.43/src/wifi/model/block-ack-agreement.h
--- ns-3.42/src/wifi/model/block-ack-agreement.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/block-ack-agreement.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/block-ack-manager.cc ns-3.43/src/wifi/model/block-ack-manager.cc
--- ns-3.42/src/wifi/model/block-ack-manager.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/block-ack-manager.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
@@ -332,10 +321,8 @@
     if (it->second.first.GetDistance(hdr.GetSequenceNumber()) >= SEQNO_SPACE_HALF_SIZE)
     {
         NS_LOG_DEBUG("Old packet. Remove from the EDCA queue, too");
-        if (!m_droppedOldMpduCallback.IsNull())
-        {
-            m_droppedOldMpduCallback(*mpduIt);
-        }
+        NS_ASSERT(!m_droppedOldMpduCallback.IsNull());
+        m_droppedOldMpduCallback(*mpduIt);
         m_queue->Remove(*mpduIt);
         return it->second.second.erase(mpduIt);
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/block-ack-manager.h ns-3.43/src/wifi/model/block-ack-manager.h
--- ns-3.42/src/wifi/model/block-ack-manager.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/block-ack-manager.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/block-ack-type.cc ns-3.43/src/wifi/model/block-ack-type.cc
--- ns-3.42/src/wifi/model/block-ack-type.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/block-ack-type.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Universita' di Napoli
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/block-ack-type.h ns-3.43/src/wifi/model/block-ack-type.h
--- ns-3.42/src/wifi/model/block-ack-type.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/block-ack-type.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/block-ack-window.cc ns-3.43/src/wifi/model/block-ack-window.cc
--- ns-3.42/src/wifi/model/block-ack-window.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/block-ack-window.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/block-ack-window.h ns-3.43/src/wifi/model/block-ack-window.h
--- ns-3.42/src/wifi/model/block-ack-window.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/block-ack-window.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/capability-information.cc ns-3.43/src/wifi/model/capability-information.cc
--- ns-3.42/src/wifi/model/capability-information.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/capability-information.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/capability-information.h ns-3.43/src/wifi/model/capability-information.h
--- ns-3.42/src/wifi/model/capability-information.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/capability-information.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/channel-access-manager.cc ns-3.43/src/wifi/model/channel-access-manager.cc
--- ns-3.42/src/wifi/model/channel-access-manager.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/channel-access-manager.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -107,7 +96,7 @@
         }
     }
 
-    void NotifyTxStart(Time duration, double txPowerDbm) override
+    void NotifyTxStart(Time duration, dBm_u txPower) override
     {
         if (m_active)
         {
@@ -187,6 +176,15 @@
                           BooleanValue(false),
                           MakeBooleanAccessor(&ChannelAccessManager::SetGenerateBackoffOnNoTx,
                                               &ChannelAccessManager::GetGenerateBackoffOnNoTx),
+                          MakeBooleanChecker())
+            .AddAttribute("ProactiveBackoff",
+                          "Specify whether a new backoff value is generated when a CCA busy "
+                          "period starts, the backoff counter is zero and the station is not a "
+                          "TXOP holder. This is useful to generate a new backoff value when, "
+                          "e.g., the backoff counter reaches zero, the station does not transmit "
+                          "and subsequently the medium becomes busy.",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&ChannelAccessManager::m_proactiveBackoff),
                           MakeBooleanChecker());
     return tid;
 }
@@ -199,7 +197,6 @@
       m_lastRxReceivedOk(true),
       m_lastTxEnd(0),
       m_lastSwitchingEnd(0),
-      m_usingOtherEmlsrLink(false),
       m_sleeping(false),
       m_off(false),
       m_linkId(0)
@@ -249,26 +246,32 @@
 {
     NS_LOG_FUNCTION(this << phy);
 
-    if (auto phyListener = GetPhyListener(phy))
+    auto phyListener = GetPhyListener(phy);
+
+    if (phyListener)
     {
         // a PHY listener for the given PHY already exists, it must be inactive
         NS_ASSERT_MSG(!phyListener->IsActive(),
                       "There is already an active listener registered for given PHY");
         NS_ASSERT_MSG(!m_phy, "Cannot reactivate a listener if another PHY is active");
         phyListener->SetActive(true);
+        // if a PHY listener already exists, the PHY was disconnected and now reconnected to the
+        // channel access manager; unregister the listener and register again (below) to get
+        // updated CCA busy information
+        phy->UnregisterListener(phyListener);
     }
     else
     {
         phyListener = std::make_shared<PhyListener>(this);
         m_phyListeners.emplace(phy, phyListener);
-        phy->RegisterListener(phyListener);
     }
     if (m_phy)
     {
         DeactivatePhyListener(m_phy);
     }
     m_phy = phy; // this is the new active PHY
-    InitLastBusyStructs();
+    ResizeLastBusyStructs();
+    phy->RegisterListener(phyListener);
     if (phy->IsStateSwitching())
     {
         auto duration = phy->GetDelayUntilIdle();
@@ -359,43 +362,82 @@
 }
 
 void
-ChannelAccessManager::InitLastBusyStructs()
+ChannelAccessManager::ResizeLastBusyStructs()
 {
     NS_LOG_FUNCTION(this);
-    Time now = Simulator::Now();
-    m_lastBusyEnd.clear();
-    m_lastPer20MHzBusyEnd.clear();
-    m_lastIdle.clear();
-    m_lastBusyEnd[WIFI_CHANLIST_PRIMARY] = now;
-    m_lastIdle[WIFI_CHANLIST_PRIMARY] = {now, now};
+    const auto now = Simulator::Now();
+
+    m_lastBusyEnd.emplace(WIFI_CHANLIST_PRIMARY, now);
+    m_lastIdle.emplace(WIFI_CHANLIST_PRIMARY, Timespan{now, now});
+
+    const auto width = m_phy ? m_phy->GetChannelWidth() : 0;
+    std::size_t size =
+        (width > 20 && m_phy->GetStandard() >= WIFI_STANDARD_80211ax) ? width / 20 : 0;
+    m_lastPer20MHzBusyEnd.resize(size, now);
 
     if (!m_phy || !m_phy->GetOperatingChannel().IsOfdm())
     {
         return;
     }
 
-    uint16_t width = m_phy->GetChannelWidth();
-
     if (width >= 40)
     {
-        m_lastBusyEnd[WIFI_CHANLIST_SECONDARY] = now;
-        m_lastIdle[WIFI_CHANLIST_SECONDARY] = {now, now};
+        m_lastBusyEnd.emplace(WIFI_CHANLIST_SECONDARY, now);
+        m_lastIdle.emplace(WIFI_CHANLIST_SECONDARY, Timespan{now, now});
+    }
+    else
+    {
+        m_lastBusyEnd.erase(WIFI_CHANLIST_SECONDARY);
+        m_lastIdle.erase(WIFI_CHANLIST_SECONDARY);
     }
+
     if (width >= 80)
     {
-        m_lastBusyEnd[WIFI_CHANLIST_SECONDARY40] = now;
-        m_lastIdle[WIFI_CHANLIST_SECONDARY40] = {now, now};
+        m_lastBusyEnd.emplace(WIFI_CHANLIST_SECONDARY40, now);
+        m_lastIdle.emplace(WIFI_CHANLIST_SECONDARY40, Timespan{now, now});
     }
+    else
+    {
+        m_lastBusyEnd.erase(WIFI_CHANLIST_SECONDARY40);
+        m_lastIdle.erase(WIFI_CHANLIST_SECONDARY40);
+    }
+
     if (width >= 160)
     {
-        m_lastBusyEnd[WIFI_CHANLIST_SECONDARY80] = now;
-        m_lastIdle[WIFI_CHANLIST_SECONDARY80] = {now, now};
+        m_lastBusyEnd.emplace(WIFI_CHANLIST_SECONDARY80, now);
+        m_lastIdle.emplace(WIFI_CHANLIST_SECONDARY80, Timespan{now, now});
     }
+    else
+    {
+        m_lastBusyEnd.erase(WIFI_CHANLIST_SECONDARY80);
+        m_lastIdle.erase(WIFI_CHANLIST_SECONDARY80);
+    }
+
     // TODO Add conditions for new channel widths as they get supported
+}
+
+void
+ChannelAccessManager::InitLastBusyStructs()
+{
+    NS_LOG_FUNCTION(this);
+    Time now = Simulator::Now();
+
+    ResizeLastBusyStructs();
+
+    // reset all values
+    for (auto& [chType, time] : m_lastBusyEnd)
+    {
+        time = now;
+    }
+
+    for (auto& [chType, timeSpan] : m_lastIdle)
+    {
+        timeSpan = Timespan{now, now};
+    }
 
-    if (m_phy->GetStandard() >= WIFI_STANDARD_80211ax && width > 20)
+    for (auto& time : m_lastPer20MHzBusyEnd)
     {
-        m_lastPer20MHzBusyEnd.assign(width / 20, now);
+        time = now;
     }
 }
 
@@ -513,13 +555,14 @@
 {
     NS_LOG_FUNCTION(this);
     uint32_t k = 0;
-    Time now = Simulator::Now();
+    const auto now = Simulator::Now();
+    const auto accessGrantStart = GetAccessGrantStart();
     for (auto i = m_txops.begin(); i != m_txops.end(); k++)
     {
         Ptr<Txop> txop = *i;
         if (txop->GetAccessStatus(m_linkId) == Txop::REQUESTED &&
             (!txop->IsQosTxop() || !StaticCast<QosTxop>(txop)->EdcaDisabled(m_linkId)) &&
-            GetBackoffEndFor(txop) <= now)
+            GetBackoffEndFor(txop, accessGrantStart) <= now)
         {
             /**
              * This is the first Txop we find with an expired backoff and which
@@ -534,7 +577,7 @@
             {
                 Ptr<Txop> otherTxop = *j;
                 if (otherTxop->GetAccessStatus(m_linkId) == Txop::REQUESTED &&
-                    GetBackoffEndFor(otherTxop) <= now)
+                    GetBackoffEndFor(otherTxop, accessGrantStart) <= now)
                 {
                     NS_LOG_DEBUG(
                         "dcf " << k << " needs access. backoff expired. internal collision. slots="
@@ -602,58 +645,47 @@
 Time
 ChannelAccessManager::GetAccessGrantStart(bool ignoreNav) const
 {
-    NS_LOG_FUNCTION(this);
-    const Time& sifs = GetSifs();
-    Time rxAccessStart = m_lastRx.end + sifs;
+    NS_LOG_FUNCTION(this << ignoreNav);
+    auto rxAccessStart = m_lastRx.end;
     if ((m_lastRx.end <= Simulator::Now()) && !m_lastRxReceivedOk)
     {
         rxAccessStart += GetEifsNoDifs();
     }
     // an EDCA TXOP is obtained based solely on activity of the primary channel
     // (Sec. 10.23.2.5 of IEEE 802.11-2020)
-    Time busyAccessStart = m_lastBusyEnd.at(WIFI_CHANLIST_PRIMARY) + sifs;
-    Time txAccessStart = m_lastTxEnd + sifs;
-    Time navAccessStart = m_lastNavEnd + sifs;
-    Time ackTimeoutAccessStart = m_lastAckTimeoutEnd + sifs;
-    Time ctsTimeoutAccessStart = m_lastCtsTimeoutEnd + sifs;
-    Time switchingAccessStart = m_lastSwitchingEnd + sifs;
-    Time accessGrantedStart;
-    if (ignoreNav)
-    {
-        accessGrantedStart = std::max({rxAccessStart,
-                                       busyAccessStart,
-                                       txAccessStart,
-                                       ackTimeoutAccessStart,
-                                       ctsTimeoutAccessStart,
-                                       switchingAccessStart});
-    }
-    else
-    {
-        accessGrantedStart = std::max({rxAccessStart,
-                                       busyAccessStart,
-                                       txAccessStart,
-                                       navAccessStart,
-                                       ackTimeoutAccessStart,
-                                       ctsTimeoutAccessStart,
-                                       switchingAccessStart});
-    }
-    NS_LOG_INFO("access grant start=" << accessGrantedStart.As(Time::US)
-                                      << ", rx access start=" << rxAccessStart.As(Time::US)
-                                      << ", busy access start=" << busyAccessStart.As(Time::US)
-                                      << ", tx access start=" << txAccessStart.As(Time::US)
-                                      << ", nav access start=" << navAccessStart.As(Time::US)
-                                      << ", switching access start="
-                                      << switchingAccessStart.As(Time::US));
-    return accessGrantedStart;
+    const auto busyAccessStart = m_lastBusyEnd.at(WIFI_CHANLIST_PRIMARY);
+    const auto navAccessStart = ignoreNav ? Time{0} : m_lastNavEnd;
+
+    const auto accessGrantedStart = std::max({rxAccessStart,
+                                              busyAccessStart,
+                                              m_lastTxEnd,
+                                              navAccessStart,
+                                              m_lastAckTimeoutEnd,
+                                              m_lastCtsTimeoutEnd,
+                                              m_lastSwitchingEnd});
+
+    NS_LOG_INFO("access grant start="
+                << accessGrantedStart.As(Time::US)
+                << ", rx access start=" << rxAccessStart.As(Time::US) << ", busy access start="
+                << busyAccessStart.As(Time::US) << ", tx access start=" << m_lastTxEnd.As(Time::US)
+                << ", nav access start=" << navAccessStart.As(Time::US)
+                << ", switching access start=" << m_lastSwitchingEnd.As(Time::US));
+    return accessGrantedStart + GetSifs();
 }
 
 Time
-ChannelAccessManager::GetBackoffStartFor(Ptr<Txop> txop)
+ChannelAccessManager::GetBackoffStartFor(Ptr<Txop> txop) const
 {
-    NS_LOG_FUNCTION(this << txop);
-    Time mostRecentEvent =
+    return GetBackoffStartFor(txop, GetAccessGrantStart());
+}
+
+Time
+ChannelAccessManager::GetBackoffStartFor(Ptr<Txop> txop, Time accessGrantStart) const
+{
+    NS_LOG_FUNCTION(this << txop << accessGrantStart.As(Time::S));
+    const auto mostRecentEvent =
         std::max({txop->GetBackoffStart(m_linkId),
-                  GetAccessGrantStart() + (txop->GetAifsn(m_linkId) * GetSlot())});
+                  accessGrantStart + (txop->GetAifsn(m_linkId) * GetSlot())});
     NS_LOG_DEBUG("Backoff start for " << txop->GetWifiMacQueue()->GetAc() << ": "
                                       << mostRecentEvent.As(Time::US));
 
@@ -661,10 +693,17 @@
 }
 
 Time
-ChannelAccessManager::GetBackoffEndFor(Ptr<Txop> txop)
+ChannelAccessManager::GetBackoffEndFor(Ptr<Txop> txop) const
+{
+    return GetBackoffEndFor(txop, GetAccessGrantStart());
+}
+
+Time
+ChannelAccessManager::GetBackoffEndFor(Ptr<Txop> txop, Time accessGrantStart) const
 {
     NS_LOG_FUNCTION(this << txop);
-    Time backoffEnd = GetBackoffStartFor(txop) + (txop->GetBackoffSlots(m_linkId) * GetSlot());
+    Time backoffEnd =
+        GetBackoffStartFor(txop, accessGrantStart) + (txop->GetBackoffSlots(m_linkId) * GetSlot());
     NS_LOG_DEBUG("Backoff end for " << txop->GetWifiMacQueue()->GetAc() << ": "
                                     << backoffEnd.As(Time::US));
 
@@ -676,9 +715,10 @@
 {
     NS_LOG_FUNCTION(this);
     uint32_t k = 0;
+    const auto accessGrantStart = GetAccessGrantStart();
     for (auto txop : m_txops)
     {
-        Time backoffStart = GetBackoffStartFor(txop);
+        Time backoffStart = GetBackoffStartFor(txop, accessGrantStart);
         if (backoffStart <= Simulator::Now())
         {
             uint32_t nIntSlots = ((Simulator::Now() - backoffStart) / GetSlot()).GetHigh();
@@ -715,12 +755,13 @@
      * if there is one, how many slots for AIFS+backoff does it require ?
      */
     bool accessTimeoutNeeded = false;
-    Time expectedBackoffEnd = Simulator::GetMaximumSimulationTime();
+    auto expectedBackoffEnd = Simulator::GetMaximumSimulationTime();
+    const auto accessGrantStart = GetAccessGrantStart();
     for (auto txop : m_txops)
     {
         if (txop->GetAccessStatus(m_linkId) == Txop::REQUESTED)
         {
-            Time tmp = GetBackoffEndFor(txop);
+            Time tmp = GetBackoffEndFor(txop, accessGrantStart);
             if (tmp > Simulator::Now())
             {
                 accessTimeoutNeeded = true;
@@ -747,7 +788,7 @@
     }
 }
 
-uint16_t
+MHz_u
 ChannelAccessManager::GetLargestIdlePrimaryChannel(Time interval, Time end)
 {
     NS_LOG_FUNCTION(this << interval.As(Time::US) << end.As(Time::S));
@@ -762,7 +803,7 @@
     // also be called before starting a TXOP gained through EDCA.
     UpdateLastIdlePeriod();
 
-    uint16_t width = 0;
+    MHz_u width = 0;
 
     // we iterate over the different types of channels in the same order as they
     // are listed in WifiChannelListType
@@ -908,6 +949,21 @@
             m_lastPer20MHzBusyEnd[chIdx] = now + per20MhzDurations[chIdx];
         }
     }
+
+    if (m_proactiveBackoff)
+    {
+        // have all EDCAFs that are not carrying out a TXOP and have the backoff counter set to
+        // zero proactively generate a new backoff value
+        for (auto txop : m_txops)
+        {
+            if (txop->GetAccessStatus(m_linkId) != Txop::GRANTED &&
+                txop->GetBackoffSlots(m_linkId) == 0)
+            {
+                NS_LOG_DEBUG("Generate backoff for " << txop->GetWifiMacQueue()->GetAc());
+                txop->GenerateBackoff(m_linkId);
+            }
+        }
+    }
 }
 
 void
@@ -917,7 +973,6 @@
 
     Time now = Simulator::Now();
     NS_ASSERT(m_lastTxEnd <= now);
-    NS_ASSERT(m_lastSwitchingEnd <= now);
 
     if (phyListener) // to make tests happy
     {
@@ -947,6 +1002,12 @@
 
     ResetState();
 
+    // Cancel timeout
+    if (m_accessTimeout.IsPending())
+    {
+        m_accessTimeout.Cancel();
+    }
+
     // Reset backoffs
     for (const auto& txop : m_txops)
     {
@@ -974,12 +1035,6 @@
     m_lastCtsTimeoutEnd = std::min(m_lastCtsTimeoutEnd, now);
 
     InitLastBusyStructs();
-
-    // Cancel timeout
-    if (m_accessTimeout.IsPending())
-    {
-        m_accessTimeout.Cancel();
-    }
 }
 
 void
@@ -1014,13 +1069,9 @@
 {
     NS_LOG_FUNCTION(this);
     m_sleeping = true;
-    // Cancel timeout
-    if (m_accessTimeout.IsPending())
-    {
-        m_accessTimeout.Cancel();
-    }
-
     // Reset backoffs
+    ResetAllBackoffs();
+    m_feManager->NotifySleepNow();
     for (auto txop : m_txops)
     {
         txop->NotifySleep(m_linkId);
@@ -1134,20 +1185,6 @@
 }
 
 void
-ChannelAccessManager::NotifyStartUsingOtherEmlsrLink()
-{
-    NS_LOG_FUNCTION(this);
-    m_usingOtherEmlsrLink = true;
-}
-
-void
-ChannelAccessManager::NotifyStopUsingOtherEmlsrLink()
-{
-    NS_LOG_FUNCTION(this);
-    m_usingOtherEmlsrLink = false;
-}
-
-void
 ChannelAccessManager::UpdateLastIdlePeriod()
 {
     NS_LOG_FUNCTION(this);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/channel-access-manager.h ns-3.43/src/wifi/model/channel-access-manager.h
--- ns-3.42/src/wifi/model/channel-access-manager.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/channel-access-manager.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -34,6 +23,7 @@
 #include <vector>
 
 class EmlsrUlTxopTest;
+class EmlsrCcaBusyTest;
 
 namespace ns3
 {
@@ -62,6 +52,7 @@
 {
     /// Allow test cases to access private members
     friend class ::EmlsrUlTxopTest;
+    friend class ::EmlsrCcaBusyTest;
 
   public:
     ChannelAccessManager();
@@ -158,6 +149,26 @@
     Time GetAccessGrantStart(bool ignoreNav = false) const;
 
     /**
+     * Return the time when the backoff procedure
+     * started for the given Txop.
+     *
+     * \param txop the Txop
+     *
+     * \return the time when the backoff procedure started
+     */
+    Time GetBackoffStartFor(Ptr<Txop> txop) const;
+
+    /**
+     * Return the time when the backoff procedure
+     * ended (or will end) for the given Txop.
+     *
+     * \param txop the Txop
+     *
+     * \return the time when the backoff procedure ended (or will end)
+     */
+    Time GetBackoffEndFor(Ptr<Txop> txop) const;
+
+    /**
      * \param qosTxop a QosTxop that needs to be disabled
      * \param duration the amount of time during which the QosTxop is disabled
      *
@@ -191,11 +202,10 @@
      *
      * \param interval the given time interval
      * \param end the given end time
-     * \return the width of the largest primary channel that has been idle for the
-     *         given time interval before the given time, if any primary channel has
-     *         been idle, or zero, otherwise
+     * \return the width of the largest primary channel that has been idle for the given time
+     * interval before the given time, if any primary channel has been idle, or zero, otherwise
      */
-    uint16_t GetLargestIdlePrimaryChannel(Time interval, Time end);
+    MHz_u GetLargestIdlePrimaryChannel(Time interval, Time end);
 
     /**
      * \param indices a set of indices (starting at 0) specifying the 20 MHz channels to test
@@ -301,15 +311,6 @@
     void NotifyCtsTimeoutResetNow();
 
     /**
-     * Notify that another EMLSR link is being used, hence medium access should be disabled.
-     */
-    void NotifyStartUsingOtherEmlsrLink();
-    /**
-     * Notify that another EMLSR link is no longer being used, hence medium access can be resumed.
-     */
-    void NotifyStopUsingOtherEmlsrLink();
-
-    /**
      * Check if the device is busy sending or receiving,
      * or NAV or CCA busy.
      *
@@ -359,33 +360,46 @@
      * \return the current registered listener for PHY events on the given PHY
      */
     std::shared_ptr<PhyListener> GetPhyListener(Ptr<WifiPhy> phy) const;
+
     /**
-     * Initialize the structures holding busy end times per channel type (primary,
-     * secondary, etc.) and per 20 MHz channel.
+     * Initialize the structures holding busy end times per channel type (primary, secondary, etc.)
+     * and per 20 MHz channel. All values are set to the current time.
      */
     void InitLastBusyStructs();
+
+    /**
+     * Resize the structures holding busy end times per channel type (primary, secondary, etc.)
+     * and per 20 MHz channel. If a value (e.g., the busy end time for secondary40 channel) already
+     * exists, it is not changed; otherwise, it is set to the current time.
+     */
+    void ResizeLastBusyStructs();
     /**
      * Update backoff slots for all Txops.
      */
     void UpdateBackoff();
+
     /**
-     * Return the time when the backoff procedure
-     * started for the given Txop.
+     * This overload is provided to enable caching the value returned by GetAccessGrantStart(),
+     * which is independent of the given Txop object.
      *
      * \param txop the Txop
+     * \param accessGrantStart the value returned by GetAccessGrantStart()
      *
      * \return the time when the backoff procedure started
      */
-    Time GetBackoffStartFor(Ptr<Txop> txop);
+    Time GetBackoffStartFor(Ptr<Txop> txop, Time accessGrantStart) const;
+
     /**
-     * Return the time when the backoff procedure
-     * ended (or will ended) for the given Txop.
+     * This overload is provided to enable caching the value returned by GetAccessGrantStart(),
+     * which is independent of the given Txop object.
      *
      * \param txop the Txop
+     * \param accessGrantStart the value returned by GetAccessGrantStart()
      *
-     * \return the time when the backoff procedure ended (or will ended)
+     * \return the time when the backoff procedure ended (or will end)
      */
-    Time GetBackoffEndFor(Ptr<Txop> txop);
+    Time GetBackoffEndFor(Ptr<Txop> txop, Time accessGrantStart) const;
+
     /**
      * This method determines whether the medium has been idle during a period (of
      * non-null duration) immediately preceding the time this method is called. If
@@ -404,6 +418,7 @@
      * (e.g. backoff procedure expired).
      */
     void AccessTimeout();
+
     /**
      * Grant access to Txop using DCF/EDCF contention rules
      */
@@ -415,12 +430,14 @@
      * \return the SIFS duration
      */
     virtual Time GetSifs() const;
+
     /**
      * Return the slot duration for this PHY.
      *
      * \return the slot duration
      */
     virtual Time GetSlot() const;
+
     /**
      * Return the EIFS duration minus a DIFS.
      *
@@ -456,7 +473,6 @@
     std::map<WifiChannelListType, Timespan>
         m_lastIdle;               //!< the last idle start and end time for each channel type
     Time m_lastSwitchingEnd;      //!< the last switching end time
-    bool m_usingOtherEmlsrLink;   //!< whether another EMLSR link is being used
     bool m_sleeping;              //!< flag whether it is in sleeping state
     bool m_off;                   //!< flag whether it is in off state
     Time m_eifsNoDifs;            //!< EIFS no DIFS time
@@ -465,6 +481,8 @@
                                   //!< right to start a TXOP but it does not transmit any frame
                                   //!< (e.g., due to constraints associated with EMLSR operations),
                                   //!< provided that the queue is not actually empty
+    bool m_proactiveBackoff; //!< whether a new backoff value is generated when a CCA busy period
+                             //!< starts and the backoff counter is zero
 
     /// Information associated with each PHY that is going to operate on another EMLSR link
     struct EmlsrLinkSwitchInfo
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ctrl-headers.cc ns-3.43/src/wifi/model/ctrl-headers.cc
--- ns-3.42/src/wifi/model/ctrl-headers.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/ctrl-headers.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
@@ -1696,8 +1685,8 @@
     m_triggerType = type;
     SetUlBandwidth(txVector.GetChannelWidth());
     SetUlLength(txVector.GetLength());
-    uint16_t gi = txVector.GetGuardInterval();
-    if (gi == 800 || gi == 1600)
+    const auto gi = txVector.GetGuardInterval().GetNanoSeconds();
+    if ((gi == 800) || (gi == 1600))
     {
         m_giAndLtfType = 1;
     }
@@ -2038,9 +2027,9 @@
 }
 
 void
-CtrlTriggerHeader::SetUlBandwidth(uint16_t bw)
+CtrlTriggerHeader::SetUlBandwidth(MHz_u bw)
 {
-    switch (bw)
+    switch (static_cast<uint16_t>(bw))
     {
     case 20:
         m_ulBandwidth = 0;
@@ -2060,24 +2049,25 @@
     }
 }
 
-uint16_t
+MHz_u
 CtrlTriggerHeader::GetUlBandwidth() const
 {
     return (1 << m_ulBandwidth) * 20;
 }
 
 void
-CtrlTriggerHeader::SetGiAndLtfType(uint16_t guardInterval, uint8_t ltfType)
+CtrlTriggerHeader::SetGiAndLtfType(Time guardInterval, uint8_t ltfType)
 {
-    if (ltfType == 1 && guardInterval == 1600)
+    const auto gi = guardInterval.GetNanoSeconds();
+    if ((ltfType == 1) && (gi == 1600))
     {
         m_giAndLtfType = 0;
     }
-    else if (ltfType == 2 && guardInterval == 1600)
+    else if ((ltfType == 2) && (gi == 1600))
     {
         m_giAndLtfType = 1;
     }
-    else if (ltfType == 4 && guardInterval == 3200)
+    else if ((ltfType == 4) && (gi == 3200))
     {
         m_giAndLtfType = 2;
     }
@@ -2087,16 +2077,16 @@
     }
 }
 
-uint16_t
+Time
 CtrlTriggerHeader::GetGuardInterval() const
 {
     if (m_giAndLtfType == 0 || m_giAndLtfType == 1)
     {
-        return 1600;
+        return NanoSeconds(1600);
     }
     else if (m_giAndLtfType == 2)
     {
-        return 3200;
+        return NanoSeconds(3200);
     }
     else
     {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ctrl-headers.h ns-3.43/src/wifi/model/ctrl-headers.h
--- ns-3.42/src/wifi/model/ctrl-headers.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/ctrl-headers.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
@@ -1128,13 +1117,13 @@
      *
      * \param bw bandwidth (allowed values: 20, 40, 80, 160)
      */
-    void SetUlBandwidth(uint16_t bw);
+    void SetUlBandwidth(MHz_u bw);
     /**
      * Get the bandwidth of the solicited HE TB PPDU.
      *
      * \return the bandwidth (20, 40, 80 or 160)
      */
-    uint16_t GetUlBandwidth() const;
+    MHz_u GetUlBandwidth() const;
     /**
      * Set the GI And LTF Type subfield of the Common Info field.
      * Allowed combinations are:
@@ -1142,16 +1131,16 @@
      *   - 2x LTF + 1.6us GI
      *   - 4x LTF + 3.2us GI
      *
-     * \param guardInterval the guard interval duration (in nanoseconds)
+     * \param guardInterval the guard interval duration
      * \param ltfType the HE-LTF type (1, 2 or 4)
      */
-    void SetGiAndLtfType(uint16_t guardInterval, uint8_t ltfType);
+    void SetGiAndLtfType(Time guardInterval, uint8_t ltfType);
     /**
-     * Get the guard interval duration (in nanoseconds) of the solicited HE TB PPDU.
+     * Get the guard interval duration of the solicited HE TB PPDU.
      *
-     * \return the guard interval duration (in nanoseconds) of the solicited HE TB PPDU
+     * \return the guard interval duration  of the solicited HE TB PPDU
      */
-    uint16_t GetGuardInterval() const;
+    Time GetGuardInterval() const;
     /**
      * Get the LTF type of the solicited HE TB PPDU.
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/edca-parameter-set.cc ns-3.43/src/wifi/model/edca-parameter-set.cc
--- ns-3.42/src/wifi/model/edca-parameter-set.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/edca-parameter-set.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/edca-parameter-set.h ns-3.43/src/wifi/model/edca-parameter-set.h
--- ns-3.42/src/wifi/model/edca-parameter-set.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/edca-parameter-set.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/advanced-ap-emlsr-manager.cc ns-3.43/src/wifi/model/eht/advanced-ap-emlsr-manager.cc
--- ns-3.42/src/wifi/model/eht/advanced-ap-emlsr-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/eht/advanced-ap-emlsr-manager.cc	2024-10-09 16:41:10.116656800 -0700
@@ -0,0 +1,198 @@
+/*
+ * Copyright (c) 2024 Universita' di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "advanced-ap-emlsr-manager.h"
+
+#include "eht-frame-exchange-manager.h"
+
+#include "ns3/ap-wifi-mac.h"
+#include "ns3/boolean.h"
+#include "ns3/log.h"
+#include "ns3/wifi-phy.h"
+#include "ns3/wifi-psdu.h"
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("AdvancedApEmlsrManager");
+
+NS_OBJECT_ENSURE_REGISTERED(AdvancedApEmlsrManager);
+
+TypeId
+AdvancedApEmlsrManager::GetTypeId()
+{
+    static TypeId tid =
+        TypeId("ns3::AdvancedApEmlsrManager")
+            .SetParent<DefaultApEmlsrManager>()
+            .SetGroupName("Wifi")
+            .AddConstructor<AdvancedApEmlsrManager>()
+            .AddAttribute("UseNotifiedMacHdr",
+                          "Whether to use the information about the MAC header of the MPDU "
+                          "being received, if notified by the PHY.",
+                          BooleanValue(true),
+                          MakeBooleanAccessor(&AdvancedApEmlsrManager::m_useNotifiedMacHdr),
+                          MakeBooleanChecker())
+            .AddAttribute("EarlySwitchToListening",
+                          "Whether the AP MLD assumes that an EMLSR client is able to detect at "
+                          "the end of the MAC header that a PSDU is not addressed to it and "
+                          "immediately starts switching to listening mode.",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&AdvancedApEmlsrManager::m_earlySwitchToListening),
+                          MakeBooleanChecker())
+            .AddAttribute(
+                "WaitTransDelayOnPsduRxError",
+                "If true, the AP MLD waits for a response timeout after a PSDU reception "
+                "error before starting the transition delay for the EMLSR client that "
+                "sent the failed PSDU. Otherwise, the AP MLD does not start the "
+                "transition delay timer for the EMLSR client that sent the failed PSDU.",
+                BooleanValue(true),
+                MakeBooleanAccessor(&AdvancedApEmlsrManager::m_waitTransDelayOnPsduRxError),
+                MakeBooleanChecker())
+            .AddAttribute("UpdateCwAfterFailedIcf",
+                          "Whether the AP MLD shall double the CW upon CTS timeout after an "
+                          "MU-RTS in case all the clients solicited by the MU-RTS are EMLSR "
+                          "clients that have sent (or are sending) a frame to the AP",
+                          BooleanValue(true),
+                          MakeBooleanAccessor(&AdvancedApEmlsrManager::m_updateCwAfterFailedIcf),
+                          MakeBooleanChecker());
+    return tid;
+}
+
+AdvancedApEmlsrManager::AdvancedApEmlsrManager()
+{
+    NS_LOG_FUNCTION(this);
+}
+
+AdvancedApEmlsrManager::~AdvancedApEmlsrManager()
+{
+    NS_LOG_FUNCTION_NOARGS();
+}
+
+void
+AdvancedApEmlsrManager::DoDispose()
+{
+    NS_LOG_FUNCTION(this);
+    for (uint8_t linkId = 0; linkId < GetApMac()->GetNLinks(); linkId++)
+    {
+        auto phy = GetApMac()->GetWifiPhy(linkId);
+        phy->TraceDisconnectWithoutContext(
+            "PhyRxMacHeaderEnd",
+            MakeCallback(&AdvancedApEmlsrManager::ReceivedMacHdr, this).Bind(linkId));
+    }
+    DefaultApEmlsrManager::DoDispose();
+}
+
+void
+AdvancedApEmlsrManager::DoSetWifiMac(Ptr<ApWifiMac> mac)
+{
+    NS_LOG_FUNCTION(this << mac);
+
+    for (uint8_t linkId = 0; linkId < GetApMac()->GetNLinks(); linkId++)
+    {
+        auto phy = GetApMac()->GetWifiPhy(linkId);
+        phy->TraceConnectWithoutContext(
+            "PhyRxMacHeaderEnd",
+            MakeCallback(&AdvancedApEmlsrManager::ReceivedMacHdr, this).Bind(linkId));
+    }
+}
+
+void
+AdvancedApEmlsrManager::ReceivedMacHdr(uint8_t linkId,
+                                       const WifiMacHeader& macHdr,
+                                       const WifiTxVector& txVector,
+                                       Time psduDuration)
+{
+    NS_LOG_FUNCTION(this << linkId << macHdr << txVector << psduDuration.As(Time::MS));
+
+    if (m_useNotifiedMacHdr && GetEhtFem(linkId)->CheckEmlsrClientStartingTxop(macHdr, txVector))
+    {
+        // the AP MLD is receiving an MPDU from an EMLSR client that is starting an UL TXOP.
+        // CheckEmlsrClientStartingTxop has blocked transmissions to the EMLSR client on other
+        // links. If the reception of the PSDU fails, however, the AP MLD does not respond and
+        // the EMLSR client will switch to listening mode after the ack timeout.
+        m_blockedLinksOnMacHdrRx.insert(linkId);
+    }
+}
+
+void
+AdvancedApEmlsrManager::NotifyPsduRxOk(uint8_t linkId, Ptr<const WifiPsdu> psdu)
+{
+    NS_LOG_FUNCTION(this << linkId << *psdu);
+    m_blockedLinksOnMacHdrRx.erase(linkId);
+}
+
+void
+AdvancedApEmlsrManager::NotifyPsduRxError(uint8_t linkId, Ptr<const WifiPsdu> psdu)
+{
+    NS_LOG_FUNCTION(this << linkId << *psdu);
+
+    if (auto it = m_blockedLinksOnMacHdrRx.find(linkId); it == m_blockedLinksOnMacHdrRx.cend())
+    {
+        return;
+    }
+    else
+    {
+        m_blockedLinksOnMacHdrRx.erase(it);
+    }
+
+    if (m_waitTransDelayOnPsduRxError)
+    {
+        auto phy = GetApMac()->GetWifiPhy(linkId);
+        auto delay = phy->GetSifs() + phy->GetSlot() + EMLSR_RX_PHY_START_DELAY;
+        GetEhtFem(linkId)->EmlsrSwitchToListening(psdu->GetAddr2(), delay);
+        return;
+    }
+
+    // all other EMLSR links were blocked when receiving MAC header; unblock them now
+    auto mldAddress =
+        GetApMac()->GetWifiRemoteStationManager(linkId)->GetMldAddress(psdu->GetAddr2());
+    if (!mldAddress.has_value())
+    {
+        NS_LOG_DEBUG(psdu->GetAddr2() << " is not an EMLSR client");
+        return;
+    }
+
+    std::set<uint8_t> linkIds;
+    for (uint8_t id = 0; id < GetApMac()->GetNLinks(); id++)
+    {
+        if (GetApMac()->GetWifiRemoteStationManager(id)->GetEmlsrEnabled(*mldAddress))
+        {
+            linkIds.insert(id);
+        }
+    }
+    GetApMac()->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
+                                        *mldAddress,
+                                        linkIds);
+}
+
+Time
+AdvancedApEmlsrManager::GetDelayOnTxPsduNotForEmlsr(Ptr<const WifiPsdu> psdu,
+                                                    const WifiTxVector& txVector,
+                                                    WifiPhyBand band)
+{
+    NS_LOG_FUNCTION(this << psdu << txVector << band);
+
+    if (!m_earlySwitchToListening)
+    {
+        return DefaultApEmlsrManager::GetDelayOnTxPsduNotForEmlsr(psdu, txVector, band);
+    }
+
+    // EMLSR clients switch back to listening operation at the end of MAC header RX
+    auto macHdrSize = (*psdu->begin())->GetHeader().GetSerializedSize() +
+                      ((psdu->GetNMpdus() > 1 || psdu->IsSingle()) ? 4 : 0);
+    // return the duration of the MAC header TX
+    return DataRate(txVector.GetMode().GetDataRate(txVector)).CalculateBytesTxTime(macHdrSize);
+}
+
+bool
+AdvancedApEmlsrManager::UpdateCwAfterFailedIcf()
+{
+    return m_updateCwAfterFailedIcf;
+}
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/advanced-ap-emlsr-manager.h ns-3.43/src/wifi/model/eht/advanced-ap-emlsr-manager.h
--- ns-3.42/src/wifi/model/eht/advanced-ap-emlsr-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/eht/advanced-ap-emlsr-manager.h	2024-10-09 16:41:10.116656800 -0700
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2024 Universita' di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef ADVANCED_AP_EMLSR_MANAGER_H
+#define ADVANCED_AP_EMLSR_MANAGER_H
+
+#include "default-ap-emlsr-manager.h"
+
+#include "ns3/nstime.h"
+
+#include <set>
+
+namespace ns3
+{
+
+class ApWifiMac;
+class WifiMacHeader;
+class WifiPsdu;
+class WifiTxVector;
+
+/**
+ * \ingroup wifi
+ *
+ * AdvancedApEmlsrManager is an advanced AP EMLSR manager.
+ */
+class AdvancedApEmlsrManager : public DefaultApEmlsrManager
+{
+  public:
+    /**
+     * \brief Get the type ID.
+     * \return the object TypeId
+     */
+    static TypeId GetTypeId();
+
+    AdvancedApEmlsrManager();
+    ~AdvancedApEmlsrManager() override;
+
+    void NotifyPsduRxOk(uint8_t linkId, Ptr<const WifiPsdu> psdu) override;
+    void NotifyPsduRxError(uint8_t linkId, Ptr<const WifiPsdu> psdu) override;
+    Time GetDelayOnTxPsduNotForEmlsr(Ptr<const WifiPsdu> psdu,
+                                     const WifiTxVector& txVector,
+                                     WifiPhyBand band) override;
+    bool UpdateCwAfterFailedIcf() override;
+
+  protected:
+    void DoDispose() override;
+    void DoSetWifiMac(Ptr<ApWifiMac> mac) override;
+
+    /**
+     * Store information about the MAC header of the MPDU being received on the given link.
+     *
+     * \param linkId the ID of the given link
+     * \param macHdr the MAC header of the MPDU being received
+     * \param txVector the TXVECTOR used to transmit the PSDU
+     * \param psduDuration the remaining duration of the PSDU
+     */
+    void ReceivedMacHdr(uint8_t linkId,
+                        const WifiMacHeader& macHdr,
+                        const WifiTxVector& txVector,
+                        Time psduDuration);
+
+  private:
+    std::set<uint8_t>
+        m_blockedLinksOnMacHdrRx;  //!< links that have been blocked upon receiving a MAC header
+    bool m_useNotifiedMacHdr;      //!< whether to use the information about the MAC header of
+                                   //!< the MPDU being received (if notified by the PHY)
+    bool m_earlySwitchToListening; //!< Whether the AP MLD assumes that an EMLSR client is able to
+                                   //!< detect at the end of the MAC header that a PSDU is not
+                                   //!< addressed to it and immediately starts switching to
+                                   //!< listening mode
+    bool m_waitTransDelayOnPsduRxError; //!< Whether the AP MLD waits for a response timeout after a
+                                        //!< PSDU reception error before starting the transition
+                                        //!< delay
+    bool m_updateCwAfterFailedIcf;      //!< Whether the AP MLD shall double the CW upon CTS timeout
+                                   //!< after an MU-RTS in case all the clients solicited by the
+                                   //!< MU-RTS are EMLSR clients that have sent a frame to the AP
+};
+
+} // namespace ns3
+
+#endif /* ADVANCED_AP_EMLSR_MANAGER_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/advanced-emlsr-manager.cc ns-3.43/src/wifi/model/eht/advanced-emlsr-manager.cc
--- ns-3.42/src/wifi/model/eht/advanced-emlsr-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/eht/advanced-emlsr-manager.cc	2024-10-09 16:41:10.116656800 -0700
@@ -0,0 +1,601 @@
+/*
+ * Copyright (c) 2024 Universita' di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "advanced-emlsr-manager.h"
+
+#include "eht-frame-exchange-manager.h"
+
+#include "ns3/boolean.h"
+#include "ns3/log.h"
+#include "ns3/wifi-net-device.h"
+#include "ns3/wifi-phy.h"
+
+#include <algorithm>
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("AdvancedEmlsrManager");
+
+NS_OBJECT_ENSURE_REGISTERED(AdvancedEmlsrManager);
+
+TypeId
+AdvancedEmlsrManager::GetTypeId()
+{
+    static TypeId tid =
+        TypeId("ns3::AdvancedEmlsrManager")
+            .SetParent<DefaultEmlsrManager>()
+            .SetGroupName("Wifi")
+            .AddConstructor<AdvancedEmlsrManager>()
+            .AddAttribute("UseNotifiedMacHdr",
+                          "Whether to use the information about the MAC header of the MPDU "
+                          "being received, if notified by the PHY.",
+                          BooleanValue(true),
+                          MakeBooleanAccessor(&AdvancedEmlsrManager::m_useNotifiedMacHdr),
+                          MakeBooleanChecker())
+            .AddAttribute("AllowUlTxopInRx",
+                          "Whether a (main or aux) PHY is allowed to start an UL TXOP if "
+                          "another PHY is receiving a PPDU (possibly starting a DL TXOP). "
+                          "If this attribute is true, the PPDU may be dropped.",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&AdvancedEmlsrManager::m_allowUlTxopInRx),
+                          MakeBooleanChecker())
+            .AddAttribute("InterruptSwitch",
+                          "Whether the main PHY can be interrupted while switching to start "
+                          "switching to another link.",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&AdvancedEmlsrManager::m_interruptSwitching),
+                          MakeBooleanChecker())
+            .AddAttribute("UseAuxPhyCca",
+                          "Whether the CCA performed in the last PIFS interval by a non-TX "
+                          "capable aux PHY should be used when the main PHY ends switching to "
+                          "the aux PHY's link to determine whether TX can start or not (and what "
+                          "bandwidth can be used for transmission) independently of whether the "
+                          "aux PHY bandwidth is smaller than the main PHY bandwidth or not.",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&AdvancedEmlsrManager::m_useAuxPhyCca),
+                          MakeBooleanChecker())
+            .AddAttribute("SwitchMainPhyBackDelay",
+                          "Duration of the timer started in case of non-TX capable aux PHY (that "
+                          "does not switch link) when medium is sensed busy during the PIFS "
+                          "interval preceding/following the main PHY switch end. When the timer "
+                          "expires, the main PHY is switched back to the primary link.",
+                          TimeValue(MilliSeconds(5)),
+                          MakeTimeAccessor(&AdvancedEmlsrManager::m_switchMainPhyBackDelay),
+                          MakeTimeChecker());
+    return tid;
+}
+
+AdvancedEmlsrManager::AdvancedEmlsrManager()
+{
+    NS_LOG_FUNCTION(this);
+}
+
+AdvancedEmlsrManager::~AdvancedEmlsrManager()
+{
+    NS_LOG_FUNCTION_NOARGS();
+}
+
+void
+AdvancedEmlsrManager::DoDispose()
+{
+    NS_LOG_FUNCTION(this);
+    for (auto phy : GetStaMac()->GetDevice()->GetPhys())
+    {
+        phy->TraceDisconnectWithoutContext(
+            "PhyRxMacHeaderEnd",
+            MakeCallback(&AdvancedEmlsrManager::ReceivedMacHdr, this).Bind(phy));
+    }
+    DefaultEmlsrManager::DoDispose();
+}
+
+void
+AdvancedEmlsrManager::DoSetWifiMac(Ptr<StaWifiMac> mac)
+{
+    NS_LOG_FUNCTION(this << mac);
+
+    for (auto phy : GetStaMac()->GetDevice()->GetPhys())
+    {
+        phy->TraceConnectWithoutContext(
+            "PhyRxMacHeaderEnd",
+            MakeCallback(&AdvancedEmlsrManager::ReceivedMacHdr, this).Bind(phy));
+    }
+}
+
+std::pair<bool, Time>
+AdvancedEmlsrManager::DoGetDelayUntilAccessRequest(uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << linkId);
+
+    // prevent or allow an UL TXOP depending on whether another PHY is receiving a PPDU
+    for (const auto id : GetStaMac()->GetLinkIds())
+    {
+        if (id != linkId && GetStaMac()->IsEmlsrLink(id))
+        {
+            auto phy = GetStaMac()->GetWifiPhy(id);
+
+            if (auto macHdr = GetEhtFem(id)->GetReceivedMacHdr(); macHdr && m_useNotifiedMacHdr)
+            {
+                NS_ASSERT(phy &&
+                          phy->GetState()->GetLastTime({WifiPhyState::RX}) == Simulator::Now());
+                // we are receiving the MAC payload of a PSDU; if the PSDU being received on
+                // another link is an ICF, give up the TXOP and restart channel access at the
+                // end of PSDU reception. Note that we cannot be sure that the PSDU being received
+                // is an ICF addressed to us until we receive the entire PSDU
+                if (const auto& hdr = macHdr->get();
+                    hdr.IsTrigger() &&
+                    (hdr.GetAddr1().IsBroadcast() || hdr.GetAddr1() == GetEhtFem(id)->GetAddress()))
+                {
+                    return {false, phy->GetDelayUntilIdle()};
+                }
+                continue;
+            }
+
+            if (phy && phy->IsReceivingPhyHeader())
+            {
+                // we don't know yet the type of the frame being received; prevent or allow
+                // the UL TXOP based on user configuration
+                if (!m_allowUlTxopInRx)
+                {
+                    // retry channel access after the end of the current PHY header field
+                    return {false, phy->GetDelayUntilIdle()};
+                }
+                continue;
+            }
+
+            if (phy && phy->IsStateRx())
+            {
+                // we don't know yet the type of the frame being received; prevent or allow
+                // the UL TXOP based on user configuration
+                if (!m_allowUlTxopInRx)
+                {
+                    if (!m_useNotifiedMacHdr)
+                    {
+                        // restart channel access at the end of PSDU reception
+                        return {false, phy->GetDelayUntilIdle()};
+                    }
+
+                    // retry channel access after the expected end of the MAC header reception
+                    auto macHdrSize = WifiMacHeader(WIFI_MAC_QOSDATA).GetSerializedSize() +
+                                      4 /* A-MPDU subframe header length */;
+                    auto ongoingRxInfo = GetEhtFem(id)->GetOngoingRxInfo();
+                    // if a PHY is in RX state, it should have info about received MAC header.
+                    // The exception is represented by this situation:
+                    // - an aux PHY is disconnected from the MAC stack because the main PHY is
+                    //   operating on its link
+                    // - the main PHY notifies the MAC header info to the FEM and then leaves the
+                    //   link (e.g., because it recognizes that the MPDU is not addressed to the
+                    //   EMLSR client). Disconnecting the main PHY from the MAC stack causes the
+                    //   MAC header info to be discarded by the FEM
+                    // - the aux PHY is re-connected to the MAC stack and is still in RX state
+                    //   when the main PHY gets channel access on another link (and we get here)
+                    if (!ongoingRxInfo.has_value())
+                    {
+                        NS_ASSERT_MSG(phy != GetStaMac()->GetDevice()->GetPhy(GetMainPhyId()),
+                                      "Main PHY should have MAC header info when in RX state");
+                        // we are in the situation described above; if the MPDU being received
+                        // by the aux PHY is not addressed to the EMLSR client, we can ignore it
+                        continue;
+                    }
+                    const auto& txVector = ongoingRxInfo->get().txVector;
+                    if (txVector.IsMu())
+                    {
+                        // this is not an ICF, ignore it
+                        continue;
+                    }
+                    auto macHdrDuration = DataRate(txVector.GetMode().GetDataRate(txVector))
+                                              .CalculateBytesTxTime(macHdrSize);
+                    const auto timeSinceRxStart =
+                        Simulator::Now() - phy->GetState()->GetLastTime({WifiPhyState::CCA_BUSY});
+                    return {false, Max(macHdrDuration - timeSinceRxStart, Time{0})};
+                }
+                continue;
+            }
+        }
+    }
+
+    return {true, Time{0}};
+}
+
+void
+AdvancedEmlsrManager::ReceivedMacHdr(Ptr<WifiPhy> phy,
+                                     const WifiMacHeader& macHdr,
+                                     const WifiTxVector& txVector,
+                                     Time psduDuration)
+{
+    auto linkId = GetStaMac()->GetLinkForPhy(phy);
+    if (!linkId.has_value())
+    {
+        return;
+    }
+    NS_LOG_FUNCTION(this << *linkId << macHdr << txVector << psduDuration.As(Time::MS));
+
+    auto& ongoingTxopEnd = GetEhtFem(*linkId)->GetOngoingTxopEndEvent();
+
+    if (m_useNotifiedMacHdr && ongoingTxopEnd.IsPending() &&
+        macHdr.GetAddr1() != GetEhtFem(*linkId)->GetAddress() && !macHdr.GetAddr1().IsBroadcast() &&
+        !(macHdr.IsCts() && macHdr.GetAddr1() == GetEhtFem(*linkId)->GetBssid() /* CTS-to-self */))
+    {
+        // the EMLSR client is no longer involved in the TXOP and switching to listening mode
+        ongoingTxopEnd.Cancel();
+        // this method is a callback connected to the PhyRxMacHeaderEnd trace source of WifiPhy
+        // and is called within a for loop that executes all the callbacks. The call to NotifyTxop
+        // below leads the main PHY to be connected back to the primary link, thus
+        // the ResetPhy() method of the FEM on the non-primary link is called, which disconnects
+        // another callback (FEM::ReceivedMacHdr) from the PhyRxMacHeaderEnd trace source of
+        // the main PHY, thus invalidating the list of callbacks on which the for loop iterates.
+        // Hence, schedule the call to NotifyTxopEnd to execute it outside such for loop.
+        Simulator::ScheduleNow(&AdvancedEmlsrManager::NotifyTxopEnd, this, *linkId, false, false);
+    }
+}
+
+void
+AdvancedEmlsrManager::DoNotifyTxopEnd(uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << linkId);
+
+    auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+
+    if (m_switchAuxPhy && (!mainPhy->IsStateSwitching() || !m_interruptSwitching))
+    {
+        NS_LOG_DEBUG("SwitchAuxPhy true, nothing to do");
+        return;
+    }
+
+    if (!m_switchAuxPhy && !m_auxPhyToReconnect)
+    {
+        NS_LOG_DEBUG("SwitchAuxPhy false, nothing to do");
+        return;
+    }
+
+    // we get here if:
+    // - SwitchAuxPhy is true, the main PHY is switching and switching can be interrupted
+    // or
+    // - SwitchAuxPhy is false and there is an aux PHY to reconnect
+
+    // Note that the main PHY may be switching at the end of a TXOP when, e.g., the main PHY
+    // starts switching to a link on which an aux PHY gained a TXOP and sent an RTS, but the CTS
+    // is not received and the UL TXOP ends before the main PHY channel switch is completed.
+    // In such cases, wait until the main PHY channel switch is completed (unless the channel
+    // switching can be interrupted) before requesting a new channel switch. Given that the
+    // TXOP ended, the event to put the aux PHY to sleep can be cancelled.
+    // Backoff shall not be reset on the link left by the main PHY because a TXOP ended and
+    // a new backoff value must be generated.
+    m_auxPhyToSleepEvent.Cancel();
+
+    if (m_switchAuxPhy || !mainPhy->IsStateSwitching() || m_interruptSwitching)
+    {
+        NS_ASSERT_MSG(
+            !m_switchAuxPhy || m_mainPhySwitchInfo.end >= Simulator::Now(),
+            "Aux PHY next link ID should have a value when interrupting a main PHY switch");
+        uint8_t nextLinkId = m_switchAuxPhy ? m_mainPhySwitchInfo.from : GetMainPhyId();
+        SwitchMainPhy(nextLinkId, false, DONT_RESET_BACKOFF, REQUEST_ACCESS);
+    }
+    else
+    {
+        // delay link switch until current channel switching is completed
+        Simulator::Schedule(mainPhy->GetDelayUntilIdle(), [=, this]() {
+            // request the main PHY to switch back to the primary link only if in the meantime
+            // no TXOP started on another link (which will require the main PHY to switch link)
+            if (!GetEhtFem(linkId)->UsingOtherEmlsrLink())
+            {
+                SwitchMainPhy(GetMainPhyId(), false, DONT_RESET_BACKOFF, REQUEST_ACCESS);
+            }
+        });
+    }
+}
+
+std::pair<bool, Time>
+AdvancedEmlsrManager::GetDelayUnlessMainPhyTakesOverUlTxop(uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << linkId);
+
+    if (!m_interruptSwitching)
+    {
+        return DefaultEmlsrManager::GetDelayUnlessMainPhyTakesOverUlTxop(linkId);
+    }
+
+    auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+    auto state = mainPhy->GetState()->GetState();
+
+    NS_ABORT_MSG_UNLESS(state == WifiPhyState::SWITCHING || state == WifiPhyState::RX ||
+                            state == WifiPhyState::IDLE || state == WifiPhyState::CCA_BUSY,
+                        "Main PHY cannot be in state " << state);
+
+    auto timeToCtsEnd = GetTimeToCtsEnd(linkId);
+    auto switchingTime = mainPhy->GetChannelSwitchDelay();
+
+    if (switchingTime > timeToCtsEnd)
+    {
+        // switching takes longer than RTS/CTS exchange, release channel
+        NS_LOG_DEBUG("Not enough time for main PHY to switch link (main PHY state: "
+                     << mainPhy->GetState()->GetState() << ")");
+        // retry channel access when the CTS was expected to be received
+        return {false, timeToCtsEnd};
+    }
+
+    // TXOP can be started, schedule main PHY switch. Main PHY shall terminate the channel switch
+    // at the end of CTS reception
+    const auto delay = timeToCtsEnd - switchingTime;
+
+    NS_ASSERT(delay.IsPositive());
+    NS_LOG_DEBUG("Schedule main Phy switch in " << delay.As(Time::US));
+    m_ulMainPhySwitch[linkId] = Simulator::Schedule(delay,
+                                                    &AdvancedEmlsrManager::SwitchMainPhy,
+                                                    this,
+                                                    linkId,
+                                                    false,
+                                                    RESET_BACKOFF,
+                                                    DONT_REQUEST_ACCESS);
+
+    return {true, Time{0}};
+}
+
+void
+AdvancedEmlsrManager::CheckNavAndCcaLastPifs(Ptr<WifiPhy> phy, uint8_t linkId, Ptr<QosTxop> edca)
+{
+    NS_LOG_FUNCTION(this << phy->GetPhyId() << linkId << edca->GetAccessCategory());
+
+    const auto caManager = GetStaMac()->GetChannelAccessManager(linkId);
+    const auto pifs = phy->GetSifs() + phy->GetSlot();
+
+    const auto isBusy = caManager->IsBusy(); // check NAV and CCA on primary20
+    // check CCA on the entire channel
+    auto width = caManager->GetLargestIdlePrimaryChannel(pifs, Simulator::Now());
+
+    if (!isBusy && width > 0)
+    {
+        // medium idle, start TXOP
+        width = std::min(width, GetChannelForMainPhy(linkId).GetTotalWidth());
+
+        // if this function is called at the end of the main PHY switch, it is executed before the
+        // main PHY is connected to this link in order to use the CCA information of the aux PHY.
+        // Schedule now the TXOP start so that we first connect the main PHY to this link.
+        m_ccaLastPifs = Simulator::ScheduleNow([=, this]() {
+            if (GetEhtFem(linkId)->HeFrameExchangeManager::StartTransmission(edca, width))
+            {
+                NotifyUlTxopStart(linkId);
+            }
+            else if (!m_switchAuxPhy)
+            {
+                // switch main PHY back to primary link if SwitchAuxPhy is false
+                SwitchMainPhyBackToPrimaryLink(linkId);
+            }
+        });
+    }
+    else
+    {
+        // medium busy, restart channel access
+        NS_LOG_DEBUG("Medium busy in the last PIFS interval");
+        edca->NotifyChannelReleased(linkId); // to set access to NOT_REQUESTED
+        edca->StartAccessAfterEvent(linkId,
+                                    Txop::DIDNT_HAVE_FRAMES_TO_TRANSMIT,
+                                    Txop::CHECK_MEDIUM_BUSY);
+
+        // the main PHY must stay for some time on this link to check if it gets channel access.
+        // The timer is stopped if a DL or UL TXOP is started. When the timer expires, the main PHY
+        // switches back to the preferred link if SwitchAuxPhy is false
+        m_switchMainPhyBackEvent = Simulator::Schedule(m_switchMainPhyBackDelay, [this, linkId]() {
+            if (!m_switchAuxPhy)
+            {
+                SwitchMainPhyBackToPrimaryLink(linkId);
+            }
+        });
+    }
+}
+
+void
+AdvancedEmlsrManager::DoNotifyIcfReceived(uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << linkId);
+    m_switchMainPhyBackEvent.Cancel();
+    m_ccaLastPifs.Cancel();
+}
+
+void
+AdvancedEmlsrManager::DoNotifyUlTxopStart(uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << linkId);
+    m_switchMainPhyBackEvent.Cancel();
+    m_ccaLastPifs.Cancel();
+}
+
+bool
+AdvancedEmlsrManager::RequestMainPhyToSwitch(uint8_t linkId, AcIndex aci)
+{
+    NS_LOG_FUNCTION(this << linkId << aci);
+
+    // the aux PHY is not TX capable; check if main PHY has to switch to the aux PHY's link
+    auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+    const auto mainPhyLinkId = GetStaMac()->GetLinkForPhy(mainPhy);
+
+    // if main PHY is not operating on a link, it is switching, hence do not request another switch
+    if (!mainPhyLinkId.has_value())
+    {
+        NS_LOG_DEBUG("Main PHY is not operating on any link");
+        return false;
+    }
+
+    // if the main PHY is already trying to get access on a link, do not request another switch
+    if (m_ccaLastPifs.IsPending() || m_switchMainPhyBackEvent.IsPending())
+    {
+        NS_LOG_DEBUG("Main PHY is trying to get access on another link");
+        return false;
+    }
+
+    switch (mainPhy->GetState()->GetState())
+    {
+    case WifiPhyState::IDLE:
+        // proceed to try requesting main PHY to switch
+        break;
+    case WifiPhyState::CCA_BUSY:
+        // if the main PHY is receiving the PHY header of a PPDU, we decide to proceed or give up
+        // based on the AllowUlTxopInRx attribute
+        if (mainPhy->IsReceivingPhyHeader() && !m_allowUlTxopInRx)
+        {
+            NS_LOG_DEBUG("Main PHY receiving PHY header and AllowUlTxopInRx is false");
+            return false;
+        }
+        break;
+    case WifiPhyState::RX:
+        if (auto macHdr = GetEhtFem(*mainPhyLinkId)->GetReceivedMacHdr())
+        {
+            // information on the MAC header of the PSDU being received is available; if we cannot
+            // use it or the main PHY is receiving an ICF, give up requesting main PHY to switch
+            if (const auto& hdr = macHdr->get();
+                !m_useNotifiedMacHdr ||
+                (hdr.IsTrigger() && (hdr.GetAddr1().IsBroadcast() ||
+                                     hdr.GetAddr1() == GetEhtFem(*mainPhyLinkId)->GetAddress())))
+            {
+                NS_LOG_DEBUG("Receiving an ICF or cannot use MAC header information");
+                return false;
+            }
+        }
+        // information on the MAC header of the PSDU being received is not available, we decide to
+        // proceed or give up based on the AllowUlTxopInRx attribute
+        else if (!m_allowUlTxopInRx)
+        {
+            NS_LOG_DEBUG("Receiving PSDU, no MAC header information, AllowUlTxopInRx is false");
+            return false;
+        }
+        break;
+    default:
+        NS_LOG_DEBUG("Cannot request main PHY to switch when in state "
+                     << mainPhy->GetState()->GetState());
+        return false;
+    }
+
+    // request to switch main PHY if we expect the main PHY to get channel access on this link
+    // more quickly, i.e., if ALL the ACs with queued frames (that can be transmitted on the link
+    // on which the main PHY is currently operating) and with priority higher than or equal to
+    // that of the AC for which Aux PHY gained TXOP have their backoff counter greater than the
+    // channel switch delay plus PIFS
+
+    auto requestSwitch = false;
+    const auto now = Simulator::Now();
+
+    for (const auto& [acIndex, ac] : wifiAcList)
+    {
+        if (auto edca = GetStaMac()->GetQosTxop(acIndex);
+            acIndex >= aci && edca->HasFramesToTransmit(linkId))
+        {
+            requestSwitch = true;
+
+            const auto backoffEnd =
+                GetStaMac()->GetChannelAccessManager(*mainPhyLinkId)->GetBackoffEndFor(edca);
+            NS_LOG_DEBUG("Backoff end for " << acIndex
+                                            << " on primary link: " << backoffEnd.As(Time::US));
+
+            if (backoffEnd <= now + mainPhy->GetChannelSwitchDelay() +
+                                  GetStaMac()->GetWifiPhy(linkId)->GetPifs() &&
+                edca->HasFramesToTransmit(*mainPhyLinkId))
+            {
+                requestSwitch = false;
+                break;
+            }
+        }
+    }
+
+    return requestSwitch;
+}
+
+void
+AdvancedEmlsrManager::SwitchMainPhyIfTxopGainedByAuxPhy(uint8_t linkId, AcIndex aci)
+{
+    NS_LOG_FUNCTION(this << linkId << aci);
+
+    NS_ASSERT_MSG(!m_auxPhyTxCapable,
+                  "This function should only be called if aux PHY is not TX capable");
+    auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+
+    if (RequestMainPhyToSwitch(linkId, aci))
+    {
+        const auto auxPhy = GetStaMac()->GetWifiPhy(linkId);
+        const auto pifs = auxPhy->GetSifs() + auxPhy->GetSlot();
+
+        // schedule actions to take based on CCA sensing for a PIFS
+        if (m_useAuxPhyCca || GetChannelForAuxPhy(linkId).GetTotalWidth() >=
+                                  GetChannelForMainPhy(linkId).GetTotalWidth())
+        {
+            // use aux PHY CCA in the last PIFS interval before main PHY switch end
+            NS_LOG_DEBUG("Schedule CCA check at the end of main PHY switch");
+            m_ccaLastPifs = Simulator::Schedule(mainPhy->GetChannelSwitchDelay(),
+                                                &AdvancedEmlsrManager::CheckNavAndCcaLastPifs,
+                                                this,
+                                                auxPhy,
+                                                linkId,
+                                                GetStaMac()->GetQosTxop(aci));
+        }
+        else
+        {
+            // use main PHY CCA in the last PIFS interval after main PHY switch end
+            NS_LOG_DEBUG("Schedule CCA check a PIFS after the end of main PHY switch");
+            m_ccaLastPifs = Simulator::Schedule(mainPhy->GetChannelSwitchDelay() + pifs,
+                                                &AdvancedEmlsrManager::CheckNavAndCcaLastPifs,
+                                                this,
+                                                mainPhy,
+                                                linkId,
+                                                GetStaMac()->GetQosTxop(aci));
+        }
+
+        // switch main PHY
+        SwitchMainPhy(linkId, false, RESET_BACKOFF, DONT_REQUEST_ACCESS);
+        return;
+    }
+
+    // Determine if and when we need to request channel access again for the aux PHY based on
+    // the main PHY state.
+    // Note that, if we have requested the main PHY to switch (above), the function has returned
+    // and the EHT FEM will start a TXOP if medium is idle for a PIFS interval preceding/following
+    // the end of the main PHY channel switch.
+    // If the main PHY has been requested to switch by another aux PHY, this aux PHY will request
+    // channel access again when we have completed the CCA assessment on the other link.
+    // If the state is switching, CCA_BUSY or RX, then we request channel access again for the
+    // aux PHY when the main PHY state is back to IDLE.
+    // If the state is TX, it means that the main PHY is involved in a TXOP. Do nothing because
+    // the channel access will be requested when unblocking links at the end of the TXOP.
+    // If the state is IDLE, then either no AC has traffic to send or the backoff on the link
+    // of the main PHY is shorter than the channel switch delay. In the former case, do
+    // nothing because channel access will be triggered when new packets arrive; in the latter
+    // case, do nothing because the main PHY will start a TXOP and at the end of such TXOP
+    // links will be unblocked and the channel access requested on all links
+
+    Time delay{};
+
+    if (m_ccaLastPifs.IsPending() || m_switchMainPhyBackEvent.IsPending())
+    {
+        delay = std::max(Simulator::GetDelayLeft(m_ccaLastPifs),
+                         Simulator::GetDelayLeft(m_switchMainPhyBackEvent));
+    }
+    else if (mainPhy->IsStateSwitching() || mainPhy->IsStateCcaBusy() || mainPhy->IsStateRx())
+    {
+        delay = mainPhy->GetDelayUntilIdle();
+        NS_ASSERT(delay.IsStrictlyPositive());
+    }
+
+    NS_LOG_DEBUG("Main PHY state is " << mainPhy->GetState()->GetState());
+
+    if (delay.IsZero())
+    {
+        NS_LOG_DEBUG("Do nothing");
+        return;
+    }
+
+    auto edca = GetStaMac()->GetQosTxop(aci);
+    edca->NotifyChannelReleased(linkId); // to set access to NOT_REQUESTED
+
+    NS_LOG_DEBUG("Schedule channel access request on link "
+                 << +linkId << " at time " << (Simulator::Now() + delay).As(Time::NS));
+    Simulator::Schedule(delay, [=]() {
+        edca->StartAccessAfterEvent(linkId,
+                                    Txop::DIDNT_HAVE_FRAMES_TO_TRANSMIT,
+                                    Txop::CHECK_MEDIUM_BUSY);
+    });
+}
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/advanced-emlsr-manager.h ns-3.43/src/wifi/model/eht/advanced-emlsr-manager.h
--- ns-3.42/src/wifi/model/eht/advanced-emlsr-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/eht/advanced-emlsr-manager.h	2024-10-09 16:41:10.116656800 -0700
@@ -0,0 +1,105 @@
+/*
+ * Copyright (c) 2024 Universita' di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef ADVANCED_EMLSR_MANAGER_H
+#define ADVANCED_EMLSR_MANAGER_H
+
+#include "default-emlsr-manager.h"
+
+namespace ns3
+{
+
+/**
+ * \ingroup wifi
+ *
+ * AdvancedEmlsrManager is an advanced EMLSR manager.
+ */
+class AdvancedEmlsrManager : public DefaultEmlsrManager
+{
+  public:
+    /**
+     * \brief Get the type ID.
+     * \return the object TypeId
+     */
+    static TypeId GetTypeId();
+
+    AdvancedEmlsrManager();
+    ~AdvancedEmlsrManager() override;
+
+  protected:
+    void DoDispose() override;
+    void DoSetWifiMac(Ptr<StaWifiMac> mac) override;
+    std::pair<bool, Time> DoGetDelayUntilAccessRequest(uint8_t linkId) override;
+    std::pair<bool, Time> GetDelayUnlessMainPhyTakesOverUlTxop(uint8_t linkId) override;
+    void SwitchMainPhyIfTxopGainedByAuxPhy(uint8_t linkId, AcIndex aci) override;
+
+    /**
+     * Possibly take actions when notified of the MAC header of the MPDU being received by the
+     * given PHY.
+     *
+     * \param phy the given PHY
+     * \param macHdr the MAC header of the MPDU being received
+     * \param txVector the TXVECTOR used to transmit the PSDU
+     * \param psduDuration the remaining duration of the PSDU
+     */
+    void ReceivedMacHdr(Ptr<WifiPhy> phy,
+                        const WifiMacHeader& macHdr,
+                        const WifiTxVector& txVector,
+                        Time psduDuration);
+
+    /**
+     * Use information from NAV and CCA performed by the given PHY on the given link in the last
+     * PIFS interval to determine whether the given EDCAF can start a TXOP. This function is
+     * intended to be used when the main PHY switches channel to start an UL TXOP on a link where
+     * channel access was obtained by a non-TX capable aux PHY.
+     *
+     * \param phy the PHY that performed CCA in the last PIFS interval
+     * \param linkId the ID of the given link
+     * \param edca the given EDCAF
+     */
+    void CheckNavAndCcaLastPifs(Ptr<WifiPhy> phy, uint8_t linkId, Ptr<QosTxop> edca);
+
+    /**
+     * Determine whether the main PHY shall be requested to switch to the link of an aux PHY that
+     * has gained channel access through the given AC but it is not TX capable.
+     *
+     * \param linkId the ID of the link on which the aux PHY is operating
+     * \param aci the index of the given AC
+     * \return whether the main PHY shall be requested to switch to the link of the aux PHY
+     */
+    bool RequestMainPhyToSwitch(uint8_t linkId, AcIndex aci);
+
+  private:
+    void DoNotifyTxopEnd(uint8_t linkId) override;
+    void DoNotifyIcfReceived(uint8_t linkId) override;
+    void DoNotifyUlTxopStart(uint8_t linkId) override;
+
+    bool m_useNotifiedMacHdr;      //!< whether to use the information about the MAC header of
+                                   //!< the MPDU being received (if notified by the PHY)
+    bool m_allowUlTxopInRx;        //!< whether a (main or aux) PHY is allowed to start an UL
+                                   //!< TXOP if another PHY is receiving a PPDU
+    bool m_interruptSwitching;     //!< whether a main PHY switching can be interrupted to start
+                                   //!< switching to another link
+    bool m_useAuxPhyCca;           //!< whether the CCA performed in the last PIFS interval by a
+                                   //!< non-TX capable aux PHY should be used when the main PHY
+                                   //!< ends switching to the aux PHY's link to determine whether
+                                   //!< TX can start or not
+    Time m_switchMainPhyBackDelay; //!< duration of the timer started in case of non-TX capable aux
+                                   //!< PHY when medium is sensed busy during the PIFS interval
+                                   //!< preceding/following the main PHY switch end
+    EventId m_ccaLastPifs;         //!< event scheduled in case of non-TX capable aux PHY to
+                                   //!< determine whether TX can be started based on whether
+                                   //!< the medium has been idle during the last PIFS interval
+    EventId m_switchMainPhyBackEvent; //!< event scheduled in case of non-TX capable aux PHY when
+                                      //!< medium is sensed busy during the PIFS interval
+                                      //!< preceding/following the main PHY switch end
+};
+
+} // namespace ns3
+
+#endif /* ADVANCED_EMLSR_MANAGER_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/ap-emlsr-manager.cc ns-3.43/src/wifi/model/eht/ap-emlsr-manager.cc
--- ns-3.42/src/wifi/model/eht/ap-emlsr-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/eht/ap-emlsr-manager.cc	2024-10-09 16:41:10.116656800 -0700
@@ -0,0 +1,95 @@
+/*
+ * Copyright (c) 2024 Universita' di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "ap-emlsr-manager.h"
+
+#include "eht-configuration.h"
+#include "eht-frame-exchange-manager.h"
+
+#include "ns3/abort.h"
+#include "ns3/ap-wifi-mac.h"
+#include "ns3/assert.h"
+#include "ns3/log.h"
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("ApEmlsrManager");
+
+NS_OBJECT_ENSURE_REGISTERED(ApEmlsrManager);
+
+TypeId
+ApEmlsrManager::GetTypeId()
+{
+    static TypeId tid = TypeId("ns3::ApEmlsrManager").SetParent<Object>().SetGroupName("Wifi");
+    return tid;
+}
+
+ApEmlsrManager::ApEmlsrManager()
+{
+    NS_LOG_FUNCTION(this);
+}
+
+ApEmlsrManager::~ApEmlsrManager()
+{
+    NS_LOG_FUNCTION_NOARGS();
+}
+
+void
+ApEmlsrManager::DoDispose()
+{
+    NS_LOG_FUNCTION(this);
+    m_apMac = nullptr;
+    Object::DoDispose();
+}
+
+void
+ApEmlsrManager::SetWifiMac(Ptr<ApWifiMac> mac)
+{
+    NS_LOG_FUNCTION(this << mac);
+    NS_ASSERT(mac);
+    m_apMac = mac;
+
+    NS_ABORT_MSG_IF(!m_apMac->GetEhtConfiguration(), "ApEmlsrManager requires EHT support");
+    NS_ABORT_MSG_IF(m_apMac->GetNLinks() <= 1, "ApEmlsrManager can only be installed on MLDs");
+    NS_ABORT_MSG_IF(m_apMac->GetTypeOfStation() != AP,
+                    "ApEmlsrManager can only be installed on AP MLDs");
+    DoSetWifiMac(mac);
+}
+
+void
+ApEmlsrManager::DoSetWifiMac(Ptr<ApWifiMac> mac)
+{
+    NS_LOG_FUNCTION(this << mac);
+}
+
+Ptr<ApWifiMac>
+ApEmlsrManager::GetApMac() const
+{
+    return m_apMac;
+}
+
+Ptr<EhtFrameExchangeManager>
+ApEmlsrManager::GetEhtFem(uint8_t linkId) const
+{
+    return StaticCast<EhtFrameExchangeManager>(m_apMac->GetFrameExchangeManager(linkId));
+}
+
+void
+ApEmlsrManager::NotifyPsduRxOk(uint8_t linkId, Ptr<const WifiPsdu> psdu)
+{
+    NS_LOG_FUNCTION(this << linkId << *psdu);
+}
+
+void
+ApEmlsrManager::NotifyPsduRxError(uint8_t linkId, Ptr<const WifiPsdu> psdu)
+{
+    NS_LOG_FUNCTION(this << linkId << *psdu);
+}
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/ap-emlsr-manager.h ns-3.43/src/wifi/model/eht/ap-emlsr-manager.h
--- ns-3.42/src/wifi/model/eht/ap-emlsr-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/eht/ap-emlsr-manager.h	2024-10-09 16:41:10.116656800 -0700
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2024 Universita' di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef AP_EMLSR_MANAGER_H
+#define AP_EMLSR_MANAGER_H
+
+#include "ns3/object.h"
+#include "ns3/wifi-phy-band.h"
+
+namespace ns3
+{
+
+class ApWifiMac;
+class EhtFrameExchangeManager;
+class Time;
+class WifiPsdu;
+class WifiTxVector;
+
+/**
+ * \ingroup wifi
+ *
+ * ApEmlsrManager is an abstract base class defining the API that EHT AP MLDs with
+ * EMLSR activated can use to handle the operations on the EMLSR links of EMLSR clients
+ */
+class ApEmlsrManager : public Object
+{
+  public:
+    /**
+     * \brief Get the type ID.
+     * \return the object TypeId
+     */
+    static TypeId GetTypeId();
+    ApEmlsrManager();
+    ~ApEmlsrManager() override;
+
+    /**
+     * Set the wifi MAC. Note that it must be the MAC of an EHT AP MLD.
+     *
+     * \param mac the wifi MAC
+     */
+    void SetWifiMac(Ptr<ApWifiMac> mac);
+
+    /**
+     * This method is called when the reception of a PSDU succeeds on the given link.
+     *
+     * \param linkId the ID of the given link
+     * \param psdu the PSDU whose reception succeeded
+     */
+    virtual void NotifyPsduRxOk(uint8_t linkId, Ptr<const WifiPsdu> psdu);
+
+    /**
+     * This method is called when the reception of a PSDU fails on the given link.
+     *
+     * \param linkId the ID of the given link
+     * \param psdu the PSDU whose reception failed
+     */
+    virtual void NotifyPsduRxError(uint8_t linkId, Ptr<const WifiPsdu> psdu);
+
+    /**
+     * This method is intended to be called when the AP MLD starts transmitting an SU frame that
+     * is not addressed to EMLSR clients that were previously involved in the ongoing DL TXOP.
+     *
+     * \param psdu the PSDU being transmitted
+     * \param txVector the TXVECTOR used to transmit the PSDU
+     * \param band the PHY band in which the PSDU is being transmitted
+     * \return the delay after which the AP MLD starts the transition delay for the EMLSR client
+     */
+    virtual Time GetDelayOnTxPsduNotForEmlsr(Ptr<const WifiPsdu> psdu,
+                                             const WifiTxVector& txVector,
+                                             WifiPhyBand band) = 0;
+
+    /**
+     * \return whether the AP MLD shall double the CW upon CTS timeout after an MU-RTS in case
+     *         all the clients solicited by the MU-RTS are EMLSR clients that have sent (or
+     *         are sending) a frame to the AP
+     */
+    virtual bool UpdateCwAfterFailedIcf() = 0;
+
+  protected:
+    void DoDispose() override;
+
+    /**
+     * Allow subclasses to take actions when the MAC is set.
+     *
+     * \param mac the wifi MAC
+     */
+    virtual void DoSetWifiMac(Ptr<ApWifiMac> mac);
+
+    /**
+     * \return the MAC of the AP MLD managed by this AP EMLSR Manager.
+     */
+    Ptr<ApWifiMac> GetApMac() const;
+
+    /**
+     * \param linkId the ID of the given link
+     * \return the EHT FrameExchangeManager attached to the AP operating on the given link
+     */
+    Ptr<EhtFrameExchangeManager> GetEhtFem(uint8_t linkId) const;
+
+  private:
+    Ptr<ApWifiMac> m_apMac; //!< the MAC of the managed AP MLD
+};
+
+} // namespace ns3
+
+#endif /* AP_EMLSR_MANAGER_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/default-ap-emlsr-manager.cc ns-3.43/src/wifi/model/eht/default-ap-emlsr-manager.cc
--- ns-3.42/src/wifi/model/eht/default-ap-emlsr-manager.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/eht/default-ap-emlsr-manager.cc	2024-10-09 16:41:10.116656800 -0700
@@ -0,0 +1,58 @@
+/*
+ * Copyright (c) 2023 Universita' di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#include "default-ap-emlsr-manager.h"
+
+#include "ns3/log.h"
+#include "ns3/wifi-phy.h"
+#include "ns3/wifi-psdu.h"
+
+namespace ns3
+{
+
+NS_LOG_COMPONENT_DEFINE("DefaultApEmlsrManager");
+
+NS_OBJECT_ENSURE_REGISTERED(DefaultApEmlsrManager);
+
+TypeId
+DefaultApEmlsrManager::GetTypeId()
+{
+    static TypeId tid = TypeId("ns3::DefaultApEmlsrManager")
+                            .SetParent<ApEmlsrManager>()
+                            .SetGroupName("Wifi")
+                            .AddConstructor<DefaultApEmlsrManager>();
+    return tid;
+}
+
+DefaultApEmlsrManager::DefaultApEmlsrManager()
+{
+    NS_LOG_FUNCTION(this);
+}
+
+DefaultApEmlsrManager::~DefaultApEmlsrManager()
+{
+    NS_LOG_FUNCTION_NOARGS();
+}
+
+Time
+DefaultApEmlsrManager::GetDelayOnTxPsduNotForEmlsr(Ptr<const WifiPsdu> psdu,
+                                                   const WifiTxVector& txVector,
+                                                   WifiPhyBand band)
+{
+    NS_LOG_FUNCTION(this << psdu << txVector << band);
+    // EMLSR clients switch back to listening operation at the end of the PPDU
+    return WifiPhy::CalculateTxDuration(psdu, txVector, band);
+}
+
+bool
+DefaultApEmlsrManager::UpdateCwAfterFailedIcf()
+{
+    return true;
+}
+
+} // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/default-ap-emlsr-manager.h ns-3.43/src/wifi/model/eht/default-ap-emlsr-manager.h
--- ns-3.42/src/wifi/model/eht/default-ap-emlsr-manager.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/eht/default-ap-emlsr-manager.h	2024-10-09 16:41:10.116656800 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2024 Universita' di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef DEFAULT_AP_EMLSR_MANAGER_H
+#define DEFAULT_AP_EMLSR_MANAGER_H
+
+#include "ap-emlsr-manager.h"
+
+namespace ns3
+{
+
+/**
+ * \ingroup wifi
+ *
+ * DefaultApEmlsrManager is the default AP EMLSR manager.
+ */
+class DefaultApEmlsrManager : public ApEmlsrManager
+{
+  public:
+    /**
+     * \brief Get the type ID.
+     * \return the object TypeId
+     */
+    static TypeId GetTypeId();
+
+    DefaultApEmlsrManager();
+    ~DefaultApEmlsrManager() override;
+
+    Time GetDelayOnTxPsduNotForEmlsr(Ptr<const WifiPsdu> psdu,
+                                     const WifiTxVector& txVector,
+                                     WifiPhyBand band) override;
+    bool UpdateCwAfterFailedIcf() override;
+};
+
+} // namespace ns3
+
+#endif /* DEFAULT_AP_EMLSR_MANAGER_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/default-emlsr-manager.cc ns-3.43/src/wifi/model/eht/default-emlsr-manager.cc
--- ns-3.42/src/wifi/model/eht/default-emlsr-manager.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/eht/default-emlsr-manager.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -24,6 +13,7 @@
 #include "ns3/boolean.h"
 #include "ns3/channel-access-manager.h"
 #include "ns3/log.h"
+#include "ns3/qos-txop.h"
 #include "ns3/wifi-mpdu.h"
 #include "ns3/wifi-net-device.h"
 #include "ns3/wifi-phy.h"
@@ -51,11 +41,19 @@
                           "no PHY will be listening on that EMLSR link).",
                           BooleanValue(true),
                           MakeBooleanAccessor(&DefaultEmlsrManager::m_switchAuxPhy),
+                          MakeBooleanChecker())
+            .AddAttribute("PutAuxPhyToSleep",
+                          "Whether Aux PHY should be put into sleep mode while the Main PHY "
+                          "is operating on the same link as the Aux PHY (this only matters "
+                          "when the Aux PHY does not switch channel).",
+                          BooleanValue(true),
+                          MakeBooleanAccessor(&DefaultEmlsrManager::m_auxPhyToSleep),
                           MakeBooleanChecker());
     return tid;
 }
 
 DefaultEmlsrManager::DefaultEmlsrManager()
+    : m_mainPhySwitchInfo{}
 {
     NS_LOG_FUNCTION(this);
 }
@@ -96,19 +94,49 @@
 }
 
 void
-DefaultEmlsrManager::NotifyMainPhySwitch(uint8_t currLinkId, uint8_t nextLinkId)
-{
-    NS_LOG_FUNCTION(this << currLinkId << nextLinkId);
+DefaultEmlsrManager::NotifyMainPhySwitch(std::optional<uint8_t> currLinkId,
+                                         uint8_t nextLinkId,
+                                         Time duration)
+{
+    NS_LOG_FUNCTION(this << (currLinkId ? std::to_string(*currLinkId) : "") << nextLinkId
+                         << duration.As(Time::US));
+
+    // if currLinkId has no value (i.e., the main PHY is not operating on any link), it means that
+    // the main PHY is switching
+    const auto now = Simulator::Now();
+    NS_ASSERT_MSG(currLinkId || m_mainPhySwitchInfo.end >= now,
+                  "No current link ID provided nor valid main PHY switch information stored");
+    m_mainPhySwitchInfo.from = currLinkId.value_or(m_mainPhySwitchInfo.from);
+    m_mainPhySwitchInfo.end = now + duration;
 
     if (m_switchAuxPhy)
     {
-        // switch channel on Aux PHY so that it operates on the link on which the main PHY was
+        // cancel any previously requested aux PHY switch
+        m_auxPhySwitchEvent.Cancel();
+
+        if (nextLinkId == m_mainPhySwitchInfo.from)
+        {
+            // the main PHY is now switching to the link where it is coming from; nothing else
+            // needs to be done
+            return;
+        }
+
+        // schedule Aux PHY switch so that it operates on the link on which the main PHY was
         // operating
-        SwitchAuxPhy(nextLinkId, currLinkId);
+        auto auxPhy = GetStaMac()->GetWifiPhy(nextLinkId);
+
+        NS_LOG_DEBUG("Aux PHY (" << auxPhy << ") operating on link " << +nextLinkId
+                                 << " will switch to link " << +currLinkId.value() << " in "
+                                 << duration.As(Time::US));
+
+        m_auxPhySwitchEvent =
+            Simulator::Schedule(duration, [=, this, prevLinkId = m_mainPhySwitchInfo.from]() {
+                SwitchAuxPhy(auxPhy, nextLinkId, prevLinkId);
+            });
         return;
     }
 
-    if (currLinkId != GetMainPhyId())
+    if (currLinkId.has_value() && currLinkId != GetMainPhyId())
     {
         // the main PHY is leaving a non-primary link, hence an aux PHY needs to be reconnected
         NS_ASSERT_MSG(
@@ -116,18 +144,40 @@
             "There should be an aux PHY to reconnect when the main PHY leaves a non-primary link");
 
         // the Aux PHY is not actually switching (hence no switching delay)
-        GetStaMac()->NotifySwitchingEmlsrLink(m_auxPhyToReconnect, currLinkId, Seconds(0));
-        SetCcaEdThresholdOnLinkSwitch(m_auxPhyToReconnect, currLinkId);
-        m_auxPhyToReconnect = nullptr;
+        GetStaMac()->NotifySwitchingEmlsrLink(m_auxPhyToReconnect, *currLinkId, Seconds(0));
+        // resume aux PHY from sleep (once reconnected to its original link)
+        m_auxPhyToReconnect->ResumeFromSleep();
+        SetCcaEdThresholdOnLinkSwitch(m_auxPhyToReconnect, *currLinkId);
     }
 
+    // if currLinkId has no value, it means that the main PHY switch is interrupted, hence reset
+    // the aux PHY to reconnect and cancel the event to put the aux PHY to sleep. Doing so when
+    // the main PHY is leaving the primary link makes no harm (the aux PHY to reconnect and the
+    // event to put the aux PHY to sleep are set below), thus no need to add an 'if' condition
+    m_auxPhyToReconnect = nullptr;
+    m_auxPhyToSleepEvent.Cancel();
+
     if (nextLinkId != GetMainPhyId())
     {
         // the main PHY is moving to a non-primary link and the aux PHY does not switch link
         m_auxPhyToReconnect = GetStaMac()->GetWifiPhy(nextLinkId);
+
+        if (m_auxPhyToSleep)
+        {
+            // aux PHY can be put into sleep mode when the main PHY completes the channel switch
+            m_auxPhyToSleepEvent =
+                Simulator::Schedule(duration, &WifiPhy::SetSleepMode, m_auxPhyToReconnect);
+        }
     }
 }
 
+std::pair<bool, Time>
+DefaultEmlsrManager::DoGetDelayUntilAccessRequest(uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << linkId);
+    return {true, Time{0}}; // start the TXOP
+}
+
 void
 DefaultEmlsrManager::DoNotifyIcfReceived(uint8_t linkId)
 {
@@ -146,34 +196,128 @@
     NS_LOG_FUNCTION(this << linkId);
 
     // switch main PHY to the previous link, if needed
-    if (!m_switchAuxPhy && m_auxPhyToReconnect)
+    if (!m_switchAuxPhy)
     {
-        auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+        SwitchMainPhyBackToPrimaryLink(linkId);
+    }
+}
 
-        // the main PHY may be switching at the end of a TXOP when, e.g., the main PHY starts
-        // switching to a link on which an aux PHY gained a TXOP and sent an RTS, but the CTS
-        // is not received and the UL TXOP ends before the main PHY channel switch is completed.
-        // In such cases, wait until the main PHY channel switch is completed before requesting
-        // a new channel switch.
-        // Backoff shall not be reset on the link left by the main PHY because a TXOP ended and
-        // a new backoff value must be generated.
-        if (!mainPhy->IsStateSwitching())
-        {
-            SwitchMainPhy(GetMainPhyId(), false, DONT_RESET_BACKOFF, REQUEST_ACCESS);
-        }
-        else
+void
+DefaultEmlsrManager::SwitchMainPhyBackToPrimaryLink(uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << linkId);
+
+    NS_ABORT_MSG_IF(m_switchAuxPhy, "This method can only be called when SwitchAuxPhy is false");
+
+    if (!m_auxPhyToReconnect)
+    {
+        return;
+    }
+
+    auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+
+    // the main PHY may be switching at the end of a TXOP when, e.g., the main PHY starts
+    // switching to a link on which an aux PHY gained a TXOP and sent an RTS, but the CTS
+    // is not received and the UL TXOP ends before the main PHY channel switch is completed.
+    // In such cases, wait until the main PHY channel switch is completed before requesting
+    // a new channel switch and cancel the event to put the aux PHY to sleep.
+    // Backoff shall not be reset on the link left by the main PHY because a TXOP ended and
+    // a new backoff value must be generated.
+    if (!mainPhy->IsStateSwitching())
+    {
+        SwitchMainPhy(GetMainPhyId(), false, DONT_RESET_BACKOFF, REQUEST_ACCESS);
+    }
+    else
+    {
+        m_auxPhyToSleepEvent.Cancel();
+        Simulator::Schedule(mainPhy->GetDelayUntilIdle(), [=, this]() {
+            // request the main PHY to switch back to the primary link only if in the meantime
+            // no TXOP started on another link (which will require the main PHY to switch link)
+            if (!GetEhtFem(linkId)->UsingOtherEmlsrLink())
+            {
+                SwitchMainPhy(GetMainPhyId(), false, DONT_RESET_BACKOFF, REQUEST_ACCESS);
+            }
+        });
+    }
+}
+
+void
+DefaultEmlsrManager::SwitchMainPhyIfTxopGainedByAuxPhy(uint8_t linkId, AcIndex aci)
+{
+    NS_LOG_FUNCTION(this << linkId << aci);
+    NS_LOG_DEBUG("Do nothing, aux PHY is not TX capable");
+}
+
+Time
+DefaultEmlsrManager::GetTimeToCtsEnd(uint8_t linkId) const
+{
+    NS_LOG_FUNCTION(this << linkId);
+
+    auto phy = GetStaMac()->GetWifiPhy(linkId);
+    NS_ASSERT_MSG(phy, "No PHY operating on link " << +linkId);
+
+    // we have to check whether the main PHY can switch to take over the UL TXOP
+    const auto stationManager = GetStaMac()->GetWifiRemoteStationManager(linkId);
+    const auto bssid = GetEhtFem(linkId)->GetBssid();
+    const auto allowedWidth = GetEhtFem(linkId)->GetAllowedWidth();
+
+    const auto rtsTxVector = stationManager->GetRtsTxVector(bssid, allowedWidth);
+    const auto rtsTxTime = phy->CalculateTxDuration(GetRtsSize(), rtsTxVector, phy->GetPhyBand());
+    const auto ctsTxVector = stationManager->GetCtsTxVector(bssid, rtsTxVector.GetMode());
+    const auto ctsTxTime = phy->CalculateTxDuration(GetCtsSize(), ctsTxVector, phy->GetPhyBand());
+
+    // the main PHY shall terminate the channel switch at the end of CTS reception;
+    // the time remaining to the end of CTS reception includes two propagation delays
+    return rtsTxTime + phy->GetSifs() + ctsTxTime + MicroSeconds(2 * MAX_PROPAGATION_DELAY_USEC);
+}
+
+std::pair<bool, Time>
+DefaultEmlsrManager::GetDelayUnlessMainPhyTakesOverUlTxop(uint8_t linkId)
+{
+    NS_LOG_FUNCTION(this << linkId);
+
+    auto mainPhy = GetStaMac()->GetDevice()->GetPhy(m_mainPhyId);
+    auto timeToCtsEnd = GetTimeToCtsEnd(linkId);
+    auto switchingTime = mainPhy->GetChannelSwitchDelay();
+
+    switch (mainPhy->GetState()->GetState())
+    {
+    case WifiPhyState::SWITCHING:
+        // the main PHY is switching (to another link), hence the remaining time to
+        // the end of the current channel switch needs to be added up
+        switchingTime += mainPhy->GetDelayUntilIdle();
+        [[fallthrough]];
+    case WifiPhyState::RX:
+    case WifiPhyState::IDLE:
+    case WifiPhyState::CCA_BUSY:
+        if (switchingTime > timeToCtsEnd)
         {
-            Simulator::Schedule(mainPhy->GetDelayUntilIdle(), [=, this]() {
-                // request the main PHY to switch back to the primary link only if in the meantime
-                // no TXOP started on another link (which will require the main PHY to switch link)
-                if (!GetEhtFem(linkId)->UsingOtherEmlsrLink())
-                {
-                    SwitchMainPhy(GetMainPhyId(), false, DONT_RESET_BACKOFF, REQUEST_ACCESS);
-                }
-            });
+            // switching takes longer than RTS/CTS exchange, release channel
+            NS_LOG_DEBUG("Not enough time for main PHY to switch link (main PHY state: "
+                         << mainPhy->GetState()->GetState() << ")");
+            // retry channel access when the CTS was expected to be received
+            return {false, timeToCtsEnd};
         }
-        return;
+        break;
+    default:
+        NS_ABORT_MSG("Main PHY cannot be in state " << mainPhy->GetState()->GetState());
     }
+
+    // TXOP can be started, schedule main PHY switch. Main PHY shall terminate the channel switch
+    // at the end of CTS reception
+    const auto delay = timeToCtsEnd - mainPhy->GetChannelSwitchDelay();
+
+    NS_ASSERT(delay.IsPositive());
+    NS_LOG_DEBUG("Schedule main Phy switch in " << delay.As(Time::US));
+    m_ulMainPhySwitch[linkId] = Simulator::Schedule(delay,
+                                                    &DefaultEmlsrManager::SwitchMainPhy,
+                                                    this,
+                                                    linkId,
+                                                    false,
+                                                    RESET_BACKOFF,
+                                                    DONT_REQUEST_ACCESS);
+
+    return {true, Time{0}};
 }
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/default-emlsr-manager.h ns-3.43/src/wifi/model/eht/default-emlsr-manager.h
--- ns-3.42/src/wifi/model/eht/default-emlsr-manager.h	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/eht/default-emlsr-manager.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -47,20 +36,55 @@
   protected:
     uint8_t GetLinkToSendEmlOmn() override;
     std::optional<uint8_t> ResendNotification(Ptr<const WifiMpdu> mpdu) override;
+    std::pair<bool, Time> DoGetDelayUntilAccessRequest(uint8_t linkId) override;
+    void SwitchMainPhyIfTxopGainedByAuxPhy(uint8_t linkId, AcIndex aci) override;
+    std::pair<bool, Time> GetDelayUnlessMainPhyTakesOverUlTxop(uint8_t linkId) override;
+
+    /**
+     * This function is intended to be called when an aux PHY is about to transmit an RTS on
+     * the given link to calculate the time remaining to the end of the CTS reception.
+     *
+     * \param linkId the ID of the given link
+     * \return the time remaining to the end of the CTS reception
+     */
+    Time GetTimeToCtsEnd(uint8_t linkId) const;
+
+    /**
+     * This method can only be called when aux PHYs do not switch link. Switch the main PHY back
+     * to the primary link and reconnect the aux PHY that was operating on the link left by the
+     * main PHY.
+     *
+     * \param linkId the ID of the link that the main PHY is leaving
+     */
+    void SwitchMainPhyBackToPrimaryLink(uint8_t linkId);
+
+    /// Store information about a main PHY switch.
+    struct MainPhySwitchInfo
+    {
+        Time end;     //!< end of channel switching
+        uint8_t from; //!< ID of the link which the main PHY is/has been leaving
+    };
+
+    bool m_switchAuxPhy;  /**< whether Aux PHY should switch channel to operate on the link on which
+                               the Main PHY was operating before moving to the link of the Aux PHY */
+    bool m_auxPhyToSleep; //!< whether Aux PHY should be put into sleep mode while the Main PHY
+                          //!< is operating on the same link as the Aux PHY
+    EventId m_auxPhyToSleepEvent;     //!< the event scheduled to put an Aux PHY into sleep mode
+    Ptr<WifiPhy> m_auxPhyToReconnect; //!< Aux PHY the ChannelAccessManager of the link on which
+                                      //!< the main PHY is operating has to connect a listener to
+                                      //!< when the main PHY is back operating on its previous link
+    EventId m_auxPhySwitchEvent;      //!< event scheduled for an aux PHY to switch link
+    MainPhySwitchInfo m_mainPhySwitchInfo; //!< main PHY switch info
 
   private:
     void DoNotifyMgtFrameReceived(Ptr<const WifiMpdu> mpdu, uint8_t linkId) override;
     void NotifyEmlsrModeChanged() override;
-    void NotifyMainPhySwitch(uint8_t currLinkId, uint8_t nextLinkId) override;
+    void NotifyMainPhySwitch(std::optional<uint8_t> currLinkId,
+                             uint8_t nextLinkId,
+                             Time duration) override;
     void DoNotifyIcfReceived(uint8_t linkId) override;
     void DoNotifyUlTxopStart(uint8_t linkId) override;
     void DoNotifyTxopEnd(uint8_t linkId) override;
-
-    bool m_switchAuxPhy; /**< whether Aux PHY should switch channel to operate on the link on which
-                              the Main PHY was operating before moving to the link of the Aux PHY */
-    Ptr<WifiPhy> m_auxPhyToReconnect; //!< Aux PHY the ChannelAccessManager of the link on which
-                                      //!< the main PHY is operating has to connect a listener to
-                                      //!< when the main PHY is back operating on its previous link
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-capabilities.cc ns-3.43/src/wifi/model/eht/eht-capabilities.cc
--- ns-3.42/src/wifi/model/eht/eht-capabilities.cc	2024-05-29 15:29:47.196073800 -0700
+++ ns-3.43/src/wifi/model/eht/eht-capabilities.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-capabilities.h ns-3.43/src/wifi/model/eht/eht-capabilities.h
--- ns-3.42/src/wifi/model/eht/eht-capabilities.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-capabilities.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -255,7 +244,8 @@
      * Constructor
      *
      * \param is2_4Ghz indicating whether PHY is operating in 2.4 GHz based on previously serialized
-     * IEs \param heCapabilities the optional HE capabilities contained in the same management frame
+     * IEs
+     * \param heCapabilities the optional HE capabilities contained in the same management frame
      */
     EhtCapabilities(bool is2_4Ghz, const std::optional<HeCapabilities>& heCapabilities);
     // Implementations of pure virtual methods, or overridden from base class.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-configuration.cc ns-3.43/src/wifi/model/eht/eht-configuration.cc
--- ns-3.42/src/wifi/model/eht/eht-configuration.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-configuration.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
  *          Stefano Avallone <stavallo@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-configuration.h ns-3.43/src/wifi/model/eht/eht-configuration.h
--- ns-3.42/src/wifi/model/eht/eht-configuration.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-configuration.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
  *          Stefano Avallone <stavallo@unina.it>
@@ -51,16 +40,22 @@
     ANY_LINK_SET = 3
 };
 
+/**
+ * Deprecated link mapping support enums.
+ *
+ * Use `WifiTidToLinkMappingNegSupport` class enum values instead.
+ * @{
+ */
 NS_DEPRECATED_3_42("Use WifiTidToLinkMappingNegSupport::NOT_SUPPORTED instead")
-static constexpr auto WIFI_TID_TO_LINK_MAPPING_NOT_SUPPORTED = WifiTidToLinkMappingNegSupport::
-    NOT_SUPPORTED; //!< \deprecated See WifiTidToLinkMappingNegSupport::NOT_SUPPORTED
+static constexpr auto WIFI_TID_TO_LINK_MAPPING_NOT_SUPPORTED =
+    WifiTidToLinkMappingNegSupport::NOT_SUPPORTED;
 NS_DEPRECATED_3_42("Use WifiTidToLinkMappingNegSupport::SAME_LINK_SET instead")
-static constexpr auto WIFI_TID_TO_LINK_MAPPING_SAME_LINK_SET = WifiTidToLinkMappingNegSupport::
-    SAME_LINK_SET; //!< \deprecated See WifiTidToLinkMappingNegSupport::SAME_LINK_SET
+static constexpr auto WIFI_TID_TO_LINK_MAPPING_SAME_LINK_SET =
+    WifiTidToLinkMappingNegSupport::SAME_LINK_SET;
 NS_DEPRECATED_3_42("Use WifiTidToLinkMappingNegSupport::ANY_LINK_SET instead")
 static constexpr auto WIFI_TID_TO_LINK_MAPPING_ANY_LINK_SET =
-    WifiTidToLinkMappingNegSupport::ANY_LINK_SET; //!< \deprecated See
-                                                  //!< WifiTidToLinkMappingNegSupport::ANY_LINK_SET
+    WifiTidToLinkMappingNegSupport::ANY_LINK_SET;
+/**@}*/
 
 /**
  * \brief Stream insertion operator.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-frame-exchange-manager.cc ns-3.43/src/wifi/model/eht/eht-frame-exchange-manager.cc
--- ns-3.42/src/wifi/model/eht/eht-frame-exchange-manager.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-frame-exchange-manager.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,24 +1,14 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
 
 #include "eht-frame-exchange-manager.h"
 
+#include "ap-emlsr-manager.h"
 #include "eht-phy.h"
 #include "emlsr-manager.h"
 
@@ -26,9 +16,13 @@
 #include "ns3/ap-wifi-mac.h"
 #include "ns3/log.h"
 #include "ns3/mgt-action-headers.h"
+#include "ns3/spectrum-signal-parameters.h"
 #include "ns3/sta-wifi-mac.h"
 #include "ns3/wifi-mac-queue.h"
 #include "ns3/wifi-net-device.h"
+#include "ns3/wifi-spectrum-phy-interface.h"
+
+#include <algorithm>
 
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT WIFI_FEM_NS_LOG_APPEND_CONTEXT
@@ -36,9 +30,7 @@
 namespace ns3
 {
 
-/// aRxPHYStartDelay value to use when waiting for a new frame in the context of EMLSR operations
-/// (Sec. 35.3.17 of 802.11be D3.1)
-static constexpr uint8_t RX_PHY_START_DELAY_USEC = 20;
+const Time EMLSR_RX_PHY_START_DELAY = MicroSeconds(20);
 
 /**
  * Additional time (exceeding 20 us) to wait for a PHY-RXSTART.indication when the PHY is
@@ -173,10 +165,12 @@
 }
 
 bool
-EhtFrameExchangeManager::StartTransmission(Ptr<Txop> edca, uint16_t allowedWidth)
+EhtFrameExchangeManager::StartTransmission(Ptr<Txop> edca, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << edca << allowedWidth);
 
+    m_allowedWidth = allowedWidth;
+
     if (m_apMac)
     {
         for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
@@ -281,64 +275,26 @@
             return false;
         }
 
-        if (auto mainPhy = m_staMac->GetDevice()->GetPhy(emlsrManager->GetMainPhyId());
-            mainPhy != m_phy)
-        {
-            // an aux PHY is operating on this link
-            if (!emlsrManager->GetAuxPhyTxCapable())
-            {
-                NS_LOG_DEBUG("Aux PHY is not capable of transmitting a PPDU");
-                NotifyChannelReleased(edca);
-                return false;
-            }
-
-            if (mainPhy->IsStateRx())
-            {
-                NS_LOG_DEBUG(
-                    "Main PHY is receiving a PPDU (may be, e.g., an ICF or a Beacon); do not "
-                    "transmit to avoid dropping that PPDU due to the main PHY switching to this "
-                    "link to take over the TXOP");
-                // Note that we do not prevent a (main or aux) PHY from starting a TXOP when
-                // an(other) aux PHY is receiving a PPDU. The reason is that if the aux PHY is
-                // receiving a Beacon frame, the aux PHY will not be affected by the start of
-                // a TXOP; if the aux PHY is receiving an ICF, the ICF will be dropped by
-                // ReceiveMpdu because another EMLSR link is being used.
-                NotifyChannelReleased(edca);
-                return false;
-            }
-
-            const auto rtsTxVector =
-                GetWifiRemoteStationManager()->GetRtsTxVector(m_bssid, allowedWidth);
-            const auto rtsTxTime =
-                m_phy->CalculateTxDuration(GetRtsSize(), rtsTxVector, m_phy->GetPhyBand());
-            const auto ctsTxVector =
-                GetWifiRemoteStationManager()->GetCtsTxVector(m_bssid, rtsTxVector.GetMode());
-            const auto ctsTxTime =
-                m_phy->CalculateTxDuration(GetCtsSize(), ctsTxVector, m_phy->GetPhyBand());
-
-            // the main PHY shall terminate the channel switch at the end of CTS reception;
-            // the time remaining to the end of CTS reception includes two propagation delays
-            timeToCtsEnd = rtsTxTime + m_phy->GetSifs() + ctsTxTime +
-                           MicroSeconds(2 * MAX_PROPAGATION_DELAY_USEC);
-
-            auto switchingTime = mainPhy->GetChannelSwitchDelay();
-
-            if (mainPhy->IsStateSwitching())
-            {
-                // the main PHY is switching (to another link), hence the remaining time to the
-                // end of the current channel switch needs to be added up
-                switchingTime += mainPhy->GetDelayUntilIdle();
-            }
+        // let EMLSR manager decide whether to prevent or allow this UL TXOP
+        if (const auto [startTxop, delay] = emlsrManager->GetDelayUntilAccessRequest(
+                m_linkId,
+                DynamicCast<QosTxop>(edca)->GetAccessCategory());
+            !startTxop)
 
-            if (switchingTime > timeToCtsEnd)
+        {
+            if (delay.IsStrictlyPositive())
             {
-                // switching takes longer than RTS/CTS exchange, do not transmit anything to
-                // avoid that the main PHY is requested to switch while already switching
-                NS_LOG_DEBUG("Main PHY will still be switching channel when RTS/CTS ends, thus it "
-                             "will not be able to take over this TXOP");
                 NotifyChannelReleased(edca);
-                return false;
+                Simulator::Schedule(
+                    delay,
+                    &Txop::StartAccessAfterEvent,
+                    edca,
+                    m_linkId,
+                    Txop::DIDNT_HAVE_FRAMES_TO_TRANSMIT, // queued frames cannot be
+                                                         // transmitted until RX ends
+                    Txop::CHECK_MEDIUM_BUSY);            // generate backoff if medium busy
             }
+            return false;
         }
     }
 
@@ -348,7 +304,7 @@
     {
         // notify the EMLSR Manager of the UL TXOP start on an EMLSR link
         NS_ASSERT(m_staMac->GetEmlsrManager());
-        m_staMac->GetEmlsrManager()->NotifyUlTxopStart(m_linkId, timeToCtsEnd);
+        m_staMac->GetEmlsrManager()->NotifyUlTxopStart(m_linkId);
     }
 
     if (started)
@@ -378,10 +334,13 @@
     HeFrameExchangeManager::ForwardPsduDown(psdu, txVector);
     UpdateTxopEndOnTxStart(txDuration, psdu->GetDuration());
 
-    if (m_apMac)
+    if (m_apMac && m_apMac->GetApEmlsrManager())
     {
-        // check if the EMLSR clients shall switch back to listening operation at the end of this
-        // PPDU
+        auto delay = m_apMac->GetApEmlsrManager()->GetDelayOnTxPsduNotForEmlsr(psdu,
+                                                                               txVector,
+                                                                               m_phy->GetPhyBand());
+
+        // check if the EMLSR clients shall switch back to listening operation
         for (auto clientIt = m_protectedStas.begin(); clientIt != m_protectedStas.end();)
         {
             auto aid = GetWifiRemoteStationManager()->GetAssociationId(*clientIt);
@@ -389,7 +348,7 @@
             if (GetWifiRemoteStationManager()->GetEmlsrEnabled(*clientIt) &&
                 GetEmlsrSwitchToListening(psdu, aid, *clientIt))
             {
-                EmlsrSwitchToListening(*clientIt, txDuration);
+                EmlsrSwitchToListening(*clientIt, delay);
                 // this client is no longer involved in the current TXOP
                 clientIt = m_protectedStas.erase(clientIt);
             }
@@ -399,6 +358,21 @@
             }
         }
     }
+    else if (m_staMac && m_staMac->IsEmlsrLink(m_linkId) &&
+             m_staMac->GetEmlsrManager()->GetInDeviceInterference())
+    {
+        for (const auto linkId : m_staMac->GetLinkIds())
+        {
+            if (auto phy = m_mac->GetWifiPhy(linkId);
+                phy && linkId != m_linkId && m_staMac->IsEmlsrLink(linkId))
+            {
+                auto txPowerDbm = phy->GetPower(txVector.GetTxPowerLevel()) + phy->GetTxGain();
+                // generate in-device interference on the other EMLSR link for the duration of this
+                // transmission
+                GenerateInDeviceInterference(linkId, txDuration, DbmToW(txPowerDbm));
+            }
+        }
+    }
 }
 
 void
@@ -434,6 +408,49 @@
             }
         }
     }
+    else if (m_staMac && m_staMac->IsEmlsrLink(m_linkId) &&
+             m_staMac->GetEmlsrManager()->GetInDeviceInterference())
+    {
+        for (const auto linkId : m_staMac->GetLinkIds())
+        {
+            if (auto phy = m_mac->GetWifiPhy(linkId);
+                phy && linkId != m_linkId && m_staMac->IsEmlsrLink(linkId))
+            {
+                auto txPowerDbm = phy->GetPower(txVector.GetTxPowerLevel()) + phy->GetTxGain();
+                // generate in-device interference on the other EMLSR link for the duration of this
+                // transmission
+                GenerateInDeviceInterference(linkId, txDuration, DbmToW(txPowerDbm));
+            }
+        }
+    }
+}
+
+void
+EhtFrameExchangeManager::GenerateInDeviceInterference(uint8_t linkId, Time duration, Watt_u txPower)
+{
+    NS_LOG_FUNCTION(this << linkId << duration.As(Time::US) << txPower);
+
+    auto rxPhy = DynamicCast<SpectrumWifiPhy>(m_mac->GetWifiPhy(linkId));
+
+    if (!rxPhy)
+    {
+        NS_LOG_DEBUG("No spectrum PHY operating on link " << +linkId);
+        return;
+    }
+
+    auto txPhy = DynamicCast<SpectrumWifiPhy>(m_phy);
+    NS_ASSERT(txPhy);
+
+    auto psd = Create<SpectrumValue>(rxPhy->GetCurrentInterface()->GetRxSpectrumModel());
+    *psd = txPower;
+
+    auto spectrumSignalParams = Create<SpectrumSignalParameters>();
+    spectrumSignalParams->duration = duration;
+    spectrumSignalParams->txPhy = txPhy->GetCurrentInterface();
+    spectrumSignalParams->txAntenna = txPhy->GetAntenna();
+    spectrumSignalParams->psd = psd;
+
+    rxPhy->StartRx(spectrumSignalParams, rxPhy->GetCurrentInterface());
 }
 
 void
@@ -578,7 +595,7 @@
     m_mac->GetQosTxop(AC_VO)->Queue(Create<WifiMpdu>(packet, hdr));
 }
 
-std::optional<double>
+std::optional<dBm_u>
 EhtFrameExchangeManager::GetMostRecentRssi(const Mac48Address& address) const
 {
     auto optRssi = HeFrameExchangeManager::GetMostRecentRssi(address);
@@ -692,6 +709,10 @@
 {
     NS_LOG_FUNCTION(this << *muRts << txVector);
 
+    // check if all the clients solicited by the MU-RTS are EMLSR clients that have sent (or
+    // are sending) a frame to the AP
+    auto crossLinkCollision = true;
+
     // we blocked transmissions on the other EMLSR links for the EMLSR clients we sent the ICF to.
     // Given that no client responded, we can unblock transmissions for a client if there is no
     // ongoing UL TXOP held by that client
@@ -699,33 +720,61 @@
     {
         if (!GetWifiRemoteStationManager()->GetEmlsrEnabled(address))
         {
+            crossLinkCollision = false;
             continue;
         }
 
         auto mldAddress = GetWifiRemoteStationManager()->GetMldAddress(address);
         NS_ASSERT(mldAddress);
 
-        if (m_ongoingTxopEnd.IsPending() && m_txopHolder &&
-            m_mac->GetMldAddress(*m_txopHolder) == mldAddress)
-        {
-            continue;
-        }
-
-        std::set<uint8_t> linkIds;
+        std::set<uint8_t> linkIds; // all EMLSR links of EMLSR client
         for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
         {
-            if (linkId != m_linkId &&
-                m_mac->GetWifiRemoteStationManager(linkId)->GetEmlsrEnabled(*mldAddress))
+            if (m_mac->GetWifiRemoteStationManager(linkId)->GetEmlsrEnabled(*mldAddress))
             {
                 linkIds.insert(linkId);
             }
         }
+
+        if (std::any_of(linkIds.cbegin(),
+                        linkIds.cend(),
+                        /* lambda returning true if an UL TXOP is ongoing on the given link ID */
+                        [=, this](uint8_t id) {
+                            auto ehtFem = StaticCast<EhtFrameExchangeManager>(
+                                m_mac->GetFrameExchangeManager(id));
+                            return ehtFem->m_ongoingTxopEnd.IsPending() && ehtFem->m_txopHolder &&
+                                   m_mac->GetMldAddress(ehtFem->m_txopHolder.value()) == mldAddress;
+                        }))
+        {
+            // an UL TXOP is ongoing on one EMLSR link, do not unblock links
+            continue;
+        }
+
+        // no UL TXOP is ongoing on any EMLSR link; if the EMLSR client is not transmitting a
+        // frame to the AP on any EMLSR link, then the lack of response to the MU-RTS was not
+        // caused by a simultaneous UL transmission
+        if (std::none_of(linkIds.cbegin(),
+                         linkIds.cend(),
+                         /* lambda returning true if an MPDU from the EMLSR client is being received
+                            on the given link ID */
+                         [=, this](uint8_t id) {
+                             auto macHdr = m_mac->GetFrameExchangeManager(id)->GetReceivedMacHdr();
+                             return macHdr.has_value() &&
+                                    m_mac->GetMldAddress(macHdr->get().GetAddr2()) == mldAddress;
+                         }))
+        {
+            crossLinkCollision = false;
+        }
+
+        linkIds.erase(m_linkId);
         m_mac->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK,
                                        *mldAddress,
                                        linkIds);
     }
 
-    HeFrameExchangeManager::CtsAfterMuRtsTimeout(muRts, txVector);
+    auto updateFailedCw =
+        crossLinkCollision ? m_apMac->GetApEmlsrManager()->UpdateCwAfterFailedIcf() : true;
+    DoCtsAfterMuRtsTimeout(muRts, txVector, updateFailedCw);
 }
 
 void
@@ -959,6 +1008,11 @@
 
     HeFrameExchangeManager::PostProcessFrame(psdu, txVector);
 
+    if (m_apMac && m_apMac->GetApEmlsrManager())
+    {
+        m_apMac->GetApEmlsrManager()->NotifyPsduRxOk(m_linkId, psdu);
+    }
+
     if (m_apMac && m_txopHolder == psdu->GetAddr2() &&
         GetWifiRemoteStationManager()->GetEmlsrEnabled(*m_txopHolder))
     {
@@ -1050,6 +1104,23 @@
     return true;
 }
 
+EventId&
+EhtFrameExchangeManager::GetOngoingTxopEndEvent()
+{
+    return m_ongoingTxopEnd;
+}
+
+void
+EhtFrameExchangeManager::PsduRxError(Ptr<const WifiPsdu> psdu)
+{
+    NS_LOG_FUNCTION(this << psdu);
+
+    if (m_apMac && m_apMac->GetApEmlsrManager())
+    {
+        m_apMac->GetApEmlsrManager()->NotifyPsduRxError(m_linkId, psdu);
+    }
+}
+
 void
 EhtFrameExchangeManager::ReceiveMpdu(Ptr<const WifiMpdu> mpdu,
                                      RxSignalInfo rxSignalInfo,
@@ -1091,57 +1162,14 @@
         if (trigger.IsMuRts() && m_staMac->IsEmlsrLink(m_linkId))
         {
             // this is an initial Control frame
-            if (UsingOtherEmlsrLink())
+            if (DropReceivedIcf())
             {
-                // we received an ICF on a link that is blocked because another EMLSR link is
-                // being used. This is likely because transmission on the other EMLSR link
-                // started before the reception of the ICF ended. We drop this ICF and let the
-                // UL TXOP continue.
-                NS_LOG_DEBUG("Drop ICF because another EMLSR link is being used");
                 return;
             }
 
-            /**
-             * It might happen that, while the aux PHY is receiving an ICF, the main PHY is
-             * completing a TXOP on another link or is returning to the primary link after a TXOP
-             * is completed on another link. In order to respond to the ICF, it is necessary that
-             * the main PHY has enough time to switch and be ready to operate on this link by the
-             * end of the ICF padding.
-             *
-             *                        TXOP end
-             *                            │
-             *                        ┌───┐                               another
-             *   AP MLD               │ACK│                               link
-             *  ───────────┬─────────┬┴───┴───────────────────────────────────────
-             *   EMLSR     │   QoS   │    │                            main PHY
-             *   client    │  Data   │    │
-             *             └─────────┘    │
-             *                      ┌─────┬───┐                           this
-             *   AP MLD             │ ICF │pad│                           link
-             *  ────────────────────┴─────┴───┴───────────────────────────────────
-             *                                                          aux PHY
-             */
-
             auto emlsrManager = m_staMac->GetEmlsrManager();
             NS_ASSERT(emlsrManager);
 
-            if (auto mainPhy = m_staMac->GetDevice()->GetPhy(emlsrManager->GetMainPhyId());
-                mainPhy != m_phy)
-            {
-                const auto delay = mainPhy->GetChannelSwitchDelay();
-
-                if (mainPhy->GetState()->GetLastTime({WifiPhyState::TX,
-                                                      // WifiPhyState::RX, comment out for now
-                                                      WifiPhyState::SWITCHING,
-                                                      WifiPhyState::SLEEP}) >
-                    Simulator::Now() - delay)
-                {
-                    NS_LOG_DEBUG("Drop ICF due to not enough time for the main PHY to switch link");
-                    return;
-                }
-            }
-
-            emlsrManager->NotifyIcfReceived(m_linkId);
             icfReceived = true;
 
             // we just got involved in a DL TXOP. Check if we are still involved in the TXOP in a
@@ -1172,6 +1200,114 @@
     }
 
     HeFrameExchangeManager::ReceiveMpdu(mpdu, rxSignalInfo, txVector, inAmpdu);
+
+    if (icfReceived)
+    {
+        m_staMac->GetEmlsrManager()->NotifyIcfReceived(m_linkId);
+    }
+}
+
+bool
+EhtFrameExchangeManager::DropReceivedIcf()
+{
+    NS_LOG_FUNCTION(this);
+
+    auto emlsrManager = m_staMac->GetEmlsrManager();
+    NS_ASSERT(emlsrManager);
+
+    if (UsingOtherEmlsrLink())
+    {
+        // we received an ICF on a link that is blocked because another EMLSR link is
+        // being used. Check if there is an ongoing DL TXOP on the other EMLSR link
+        auto apMldAddress = GetWifiRemoteStationManager()->GetMldAddress(m_bssid);
+        NS_ASSERT_MSG(apMldAddress, "MLD address not found for " << m_bssid);
+
+        if (auto it = std::find_if(
+                m_staMac->GetLinkIds().cbegin(),
+                m_staMac->GetLinkIds().cend(),
+                /* lambda to find an EMLSR link on which there is an ongoing DL TXOP */
+                [=, this](uint8_t linkId) {
+                    auto ehtFem =
+                        StaticCast<EhtFrameExchangeManager>(m_mac->GetFrameExchangeManager(linkId));
+                    return linkId != m_linkId && m_staMac->IsEmlsrLink(linkId) &&
+                           ehtFem->m_ongoingTxopEnd.IsPending() && ehtFem->m_txopHolder &&
+                           m_mac->GetWifiRemoteStationManager(linkId)->GetMldAddress(
+                               *ehtFem->m_txopHolder) == apMldAddress;
+                });
+            it != m_staMac->GetLinkIds().cend())
+        {
+            // AP is not expected to send ICFs on two links. If an ICF
+            // has been received on this link, it means that the DL TXOP
+            // on the other link terminated (e.g., the AP did not
+            // receive our response)
+            StaticCast<EhtFrameExchangeManager>(m_mac->GetFrameExchangeManager(*it))
+                ->m_ongoingTxopEnd.Cancel();
+            // we are going to start a TXOP on this link; unblock
+            // transmissions on this link, the other links will be
+            // blocked subsequently
+            m_staMac->UnblockTxOnLink({m_linkId}, WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK);
+        }
+        else
+        {
+            // We get here likely because transmission on the other EMLSR link
+            // started before the reception of the ICF ended. We drop this ICF and let the
+            // UL TXOP continue.
+            NS_LOG_DEBUG("Drop ICF because another EMLSR link is being used");
+            m_icfDropCallback(WifiIcfDrop::USING_OTHER_LINK, m_linkId);
+            return true;
+        }
+    }
+    /**
+     * It might happen that, while the aux PHY is receiving an ICF, the main PHY is
+     * completing a TXOP on another link or is returning to the primary link after a TXOP
+     * is completed on another link. In order to respond to the ICF, it is necessary that
+     * the main PHY has enough time to switch and be ready to operate on this link by the
+     * end of the ICF padding.
+     *
+     *                        TXOP end
+     *                            │
+     *                        ┌───┐                               another
+     *   AP MLD               │ACK│                               link
+     *  ───────────┬─────────┬┴───┴───────────────────────────────────────
+     *   EMLSR     │   QoS   │    │                            main PHY
+     *   client    │  Data   │    │
+     *             └─────────┘    │
+     *                      ┌─────┬───┐                           this
+     *   AP MLD             │ ICF │pad│                           link
+     *  ────────────────────┴─────┴───┴───────────────────────────────────
+     *                                                          aux PHY
+     */
+    else if (auto mainPhy = m_staMac->GetDevice()->GetPhy(emlsrManager->GetMainPhyId());
+             mainPhy != m_phy)
+    {
+        const auto delay = mainPhy->GetChannelSwitchDelay();
+        auto lastTime = mainPhy->GetState()->GetLastTime({WifiPhyState::TX});
+        auto reason = WifiIcfDrop::NOT_ENOUGH_TIME_TX;
+
+        if (auto lastSwitch = mainPhy->GetState()->GetLastTime({WifiPhyState::SWITCHING});
+            lastSwitch > lastTime)
+        {
+            lastTime = lastSwitch;
+            reason = WifiIcfDrop::NOT_ENOUGH_TIME_SWITCH;
+        }
+        if (auto lastSleep = mainPhy->GetState()->GetLastTime({WifiPhyState::SLEEP});
+            lastSleep > lastTime)
+        {
+            lastTime = lastSleep;
+            reason = WifiIcfDrop::NOT_ENOUGH_TIME_SLEEP;
+        }
+        // ignore RX state for now
+
+        if (lastTime > Simulator::Now() - delay)
+        {
+            NS_LOG_DEBUG(
+                "Drop ICF due to not enough time for the main PHY to switch link; reason = "
+                << reason);
+            m_icfDropCallback(reason, m_linkId);
+            return true;
+        }
+    }
+    return false;
 }
 
 void
@@ -1179,7 +1315,7 @@
 {
     NS_LOG_FUNCTION(this << txopHolder.has_value());
 
-    if (m_phy->IsReceivingPhyHeader())
+    if (m_phy && m_phy->IsReceivingPhyHeader())
     {
         // we may get here because the PHY has not issued the PHY-RXSTART.indication before
         // the expiration of the timer started to detect new received frames, but the PHY is
@@ -1238,8 +1374,7 @@
         // transmitting a CTS after ICS). The TXOP holder may transmit a frame a SIFS
         // after the end of this PPDU, hence we need to postpone the TXOP end in order to
         // get the PHY-RXSTART.indication
-        delay = txDuration + m_phy->GetSifs() + m_phy->GetSlot() +
-                MicroSeconds(RX_PHY_START_DELAY_USEC);
+        delay = txDuration + m_phy->GetSifs() + m_phy->GetSlot() + EMLSR_RX_PHY_START_DELAY;
     }
 
     NS_LOG_DEBUG("Expected TXOP end=" << (Simulator::Now() + delay).As(Time::S));
@@ -1292,7 +1427,7 @@
 
     // we may send a response after a SIFS or we may receive another frame after a SIFS.
     // Postpone the TXOP end by considering the latter (which takes longer)
-    auto delay = m_phy->GetSifs() + m_phy->GetSlot() + MicroSeconds(RX_PHY_START_DELAY_USEC);
+    auto delay = m_phy->GetSifs() + m_phy->GetSlot() + EMLSR_RX_PHY_START_DELAY;
     NS_LOG_DEBUG("Expected TXOP end=" << (Simulator::Now() + delay).As(Time::S));
     m_ongoingTxopEnd =
         Simulator::Schedule(delay, &EhtFrameExchangeManager::TxopEnd, this, m_txopHolder);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-frame-exchange-manager.h ns-3.43/src/wifi/model/eht/eht-frame-exchange-manager.h
--- ns-3.42/src/wifi/model/eht/eht-frame-exchange-manager.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-frame-exchange-manager.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -28,10 +17,55 @@
 namespace ns3
 {
 
+/// aRxPHYStartDelay value to use when waiting for a new frame in the context of EMLSR operations
+/// (Sec. 35.3.17 of 802.11be D3.1)
+extern const Time EMLSR_RX_PHY_START_DELAY;
+
 class MgtEmlOmn;
 
 /**
  * \ingroup wifi
+ * Reasons for an EMLSR client to drop an ICF
+ */
+enum class WifiIcfDrop : uint8_t
+{
+    USING_OTHER_LINK = 0,   // another EMLSR link is being used
+    NOT_ENOUGH_TIME_TX,     // not enough time for the main PHY to switch (because in TX state)
+    NOT_ENOUGH_TIME_RX,     // not enough time for the main PHY to switch (because in RX state)
+    NOT_ENOUGH_TIME_SWITCH, // not enough time for the main PHY to switch (already switching)
+    NOT_ENOUGH_TIME_SLEEP,  // not enough time for the main PHY to switch (because in SLEEP state)
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the stream
+ * \param reason the reason for dropping the ICF
+ * \returns a reference to the stream
+ */
+inline std::ostream&
+operator<<(std::ostream& os, WifiIcfDrop reason)
+{
+    switch (reason)
+    {
+    case WifiIcfDrop::USING_OTHER_LINK:
+        return (os << "USING_OTHER_LINK");
+    case WifiIcfDrop::NOT_ENOUGH_TIME_TX:
+        return (os << "NOT_ENOUGH_TIME_TX");
+    case WifiIcfDrop::NOT_ENOUGH_TIME_RX:
+        return (os << "NOT_ENOUGH_TIME_RX");
+    case WifiIcfDrop::NOT_ENOUGH_TIME_SWITCH:
+        return (os << "NOT_ENOUGH_TIME_SWITCH");
+    case WifiIcfDrop::NOT_ENOUGH_TIME_SLEEP:
+        return (os << "NOT_ENOUGH_TIME_SLEEP");
+    default:
+        NS_FATAL_ERROR("Unknown wifi ICF drop reason");
+        return (os << "UNKNOWN");
+    }
+}
+
+/**
+ * \ingroup wifi
  *
  * EhtFrameExchangeManager handles the frame exchange sequences
  * for EHT stations.
@@ -49,7 +83,7 @@
 
     void SetLinkId(uint8_t linkId) override;
     Ptr<WifiMpdu> CreateAliasIfNeeded(Ptr<WifiMpdu> mpdu) const override;
-    bool StartTransmission(Ptr<Txop> edca, uint16_t allowedWidth) override;
+    bool StartTransmission(Ptr<Txop> edca, MHz_u allowedWidth) override;
 
     /**
      * Send an EML Operating Mode Notification frame to the given station.
@@ -60,15 +94,14 @@
     void SendEmlOmn(const Mac48Address& dest, const MgtEmlOmn& frame);
 
     /**
-     * Get the RSSI (in dBm) of the most recent packet received from the station having
-     * the given address. If there is no such information for the given station and the
-     * station is affiliated with an MLD, return the RSSI (in dBm) of the most recent
-     * packet received from another station of the same MLD.
+     * Get the RSSI of the most recent packet received from the station having the given address. If
+     * there is no such information for the given station and the station is affiliated with an MLD,
+     * return the RSSI of the most recent packet received from another station of the same MLD.
      *
      * \param address of the remote station
-     * \return the RSSI (in dBm) of the most recent packet received from the remote station
+     * \return the RSSI of the most recent packet received from the remote station
      */
-    std::optional<double> GetMostRecentRssi(const Mac48Address& address) const override;
+    std::optional<dBm_u> GetMostRecentRssi(const Mac48Address& address) const override;
 
     /**
      * \param psdu the given PSDU
@@ -97,6 +130,40 @@
      */
     bool UsingOtherEmlsrLink() const;
 
+    /**
+     * Check if the frame received (or being received) is sent by an EMLSR client to start an
+     * UL TXOP. If so, take the appropriate actions (e.g., block transmission to the EMLSR client
+     * on the other links). This method is intended to be called when an MPDU (possibly within
+     * an A-MPDU) is received or when the reception of the MAC header in an MPDU is notified.
+     *
+     * \param hdr the MAC header of the received (or being received) MPDU
+     * \param txVector the TXVECTOR used to transmit the frame received (or being received)
+     * \return whether the frame received (or being received) is sent by an EMLSR client to start
+     *         an UL TXOP
+     */
+    bool CheckEmlsrClientStartingTxop(const WifiMacHeader& hdr, const WifiTxVector& txVector);
+
+    /**
+     * This method is intended to be called when an AP MLD detects that an EMLSR client previously
+     * involved in the current TXOP will start waiting for the transition delay interval (to switch
+     * back to listening operation) after the given delay.
+     * This method blocks the transmissions on all the EMLSR links of the given EMLSR client until
+     * the transition delay advertised by the EMLSR client expires.
+     *
+     * \param address the link MAC address of the given EMLSR client
+     * \param delay the given delay
+     */
+    void EmlsrSwitchToListening(const Mac48Address& address, const Time& delay);
+
+    /**
+     * \return a reference to the event indicating the possible end of the current TXOP (of
+     *         which this device is not the holder)
+     */
+    EventId& GetOngoingTxopEndEvent();
+
+    /// ICF drop reason traced callback (WifiMac exposes this trace source)
+    TracedCallback<WifiIcfDrop, uint8_t> m_icfDropCallback;
+
   protected:
     void DoDispose() override;
     void RxStartIndication(WifiTxVector txVector, Time psduDuration) override;
@@ -119,32 +186,24 @@
     void NavResetTimeout() override;
     void IntraBssNavResetTimeout() override;
     void SendCtsAfterRts(const WifiMacHeader& rtsHdr, WifiMode rtsTxMode, double rtsSnr) override;
+    void PsduRxError(Ptr<const WifiPsdu> psdu) override;
 
+  private:
     /**
-     * This method is intended to be called when an AP MLD detects that an EMLSR client previously
-     * involved in the current TXOP will start waiting for the transition delay interval (to switch
-     * back to listening operation) after the given delay.
-     * This method blocks the transmissions on all the EMLSR links of the given EMLSR client until
-     * the transition delay advertised by the EMLSR client expires.
-     *
-     * \param address the link MAC address of the given EMLSR client
-     * \param delay the given delay
+     * \return whether the received ICF must be dropped because we are unable to process it
+     *         (e.g., another EMLSR link is being used or there is no time for main PHY switch)
      */
-    void EmlsrSwitchToListening(const Mac48Address& address, const Time& delay);
+    bool DropReceivedIcf();
 
-  private:
     /**
-     * Check if the frame received (or being received) is sent by an EMLSR client to start an
-     * UL TXOP. If so, take the appropriate actions (e.g., block transmission to the EMLSR client
-     * on the other links). This method is intended to be called when an MPDU (possibly within
-     * an A-MPDU) is received or when the reception of the MAC header in an MPDU is notified.
+     * Generate an in-device interference of the given power on the given link for the given
+     * duration.
      *
-     * \param hdr the MAC header of the received (or being received) MPDU
-     * \param txVector the TXVECTOR used to transmit the frame received (or being received)
-     * \return whether the frame received (or being received) is sent by an EMLSR client to start
-     *         an UL TXOP
+     * \param linkId the ID of the link on which in-device interference is generated
+     * \param duration the duration of the in-device interference
+     * \param txPower the TX power
      */
-    bool CheckEmlsrClientStartingTxop(const WifiMacHeader& hdr, const WifiTxVector& txVector);
+    void GenerateInDeviceInterference(uint8_t linkId, Time duration, Watt_u txPower);
 
     /**
      * Update the TXOP end timer when starting a frame transmission.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-operation.cc ns-3.43/src/wifi/model/eht/eht-operation.cc
--- ns-3.42/src/wifi/model/eht/eht-operation.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-operation.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sharan Naribole <sharan.naribole@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-operation.h ns-3.43/src/wifi/model/eht/eht-operation.h
--- ns-3.42/src/wifi/model/eht/eht-operation.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-operation.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sharan Naribole <sharan.naribole@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-phy.cc ns-3.43/src/wifi/model/eht/eht-phy.cc
--- ns-3.42/src/wifi/model/eht/eht-phy.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-phy.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -337,17 +326,17 @@
 }
 
 uint64_t
-EhtPhy::GetPhyRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
+EhtPhy::GetPhyRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
 {
-    WifiCodeRate codeRate = GetCodeRate(mcsValue);
-    uint64_t dataRate = GetDataRate(mcsValue, channelWidth, guardInterval, nss);
+    const auto codeRate = GetCodeRate(mcsValue);
+    const auto dataRate = GetDataRate(mcsValue, channelWidth, guardInterval, nss);
     return HtPhy::CalculatePhyRate(codeRate, dataRate);
 }
 
 uint64_t
 EhtPhy::GetPhyRateFromTxVector(const WifiTxVector& txVector, uint16_t staId /* = SU_STA_ID */)
 {
-    uint16_t bw = txVector.GetChannelWidth();
+    auto bw = txVector.GetChannelWidth();
     if (txVector.IsMu())
     {
         bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
@@ -361,7 +350,7 @@
 uint64_t
 EhtPhy::GetDataRateFromTxVector(const WifiTxVector& txVector, uint16_t staId /* = SU_STA_ID */)
 {
-    uint16_t bw = txVector.GetChannelWidth();
+    auto bw = txVector.GetChannelWidth();
     if (txVector.IsMu())
     {
         bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
@@ -373,11 +362,12 @@
 }
 
 uint64_t
-EhtPhy::GetDataRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
+EhtPhy::GetDataRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
 {
-    NS_ASSERT(guardInterval == 800 || guardInterval == 1600 || guardInterval == 3200);
+    [[maybe_unused]] const auto gi = guardInterval.GetNanoSeconds();
+    NS_ASSERT((gi == 800) || (gi == 1600) || (gi == 3200));
     NS_ASSERT(nss <= 8);
-    return HtPhy::CalculateDataRate(GetSymbolDuration(NanoSeconds(guardInterval)),
+    return HtPhy::CalculateDataRate(GetSymbolDuration(guardInterval),
                                     GetUsableSubcarriers(channelWidth),
                                     static_cast<uint16_t>(log2(GetConstellationSize(mcsValue))),
                                     HtPhy::GetCodeRatio(GetCodeRate(mcsValue)),
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-phy.h ns-3.43/src/wifi/model/eht/eht-phy.h
--- ns-3.42/src/wifi/model/eht/eht-phy.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-phy.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -192,15 +181,15 @@
      * and is mainly used as a callback for WifiMode operation.
      *
      * \param mcsValue the EHT MCS index
-     * \param channelWidth the considered channel width in MHz
-     * \param guardInterval the considered guard interval duration in nanoseconds
+     * \param channelWidth the considered channel width
+     * \param guardInterval the considered guard interval duration
      * \param nss the considered number of stream
      *
      * \return the physical bit rate of this signal in bps.
      */
     static uint64_t GetPhyRate(uint8_t mcsValue,
-                               uint16_t channelWidth,
-                               uint16_t guardInterval,
+                               MHz_u channelWidth,
+                               Time guardInterval,
                                uint8_t nss);
 
     /**
@@ -232,14 +221,14 @@
      * streams.
      *
      * \param mcsValue the EHT MCS index
-     * \param channelWidth the channel width in MHz
-     * \param guardInterval the guard interval duration in nanoseconds
+     * \param channelWidth the channel width
+     * \param guardInterval the guard interval duration
      * \param nss the number of spatial streams
      * \return the data bit rate in bps.
      */
     static uint64_t GetDataRate(uint8_t mcsValue,
-                                uint16_t channelWidth,
-                                uint16_t guardInterval,
+                                MHz_u channelWidth,
+                                Time guardInterval,
                                 uint8_t nss);
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-ppdu.cc ns-3.43/src/wifi/model/eht/eht-ppdu.cc
--- ns-3.42/src/wifi/model/eht/eht-ppdu.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-ppdu.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -171,7 +160,7 @@
 }
 
 std::pair<std::size_t, std::size_t>
-EhtPpdu::GetNumRusPerEhtSigBContentChannel(uint16_t channelWidth,
+EhtPpdu::GetNumRusPerEhtSigBContentChannel(MHz_u channelWidth,
                                            uint8_t ehtPpduType,
                                            const RuAllocation& ruAllocation,
                                            bool compression,
@@ -200,7 +189,7 @@
 }
 
 uint32_t
-EhtPpdu::GetEhtSigFieldSize(uint16_t channelWidth,
+EhtPpdu::GetEhtSigFieldSize(MHz_u channelWidth,
                             const RuAllocation& ruAllocation,
                             uint8_t ehtPpduType,
                             bool compression,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/eht-ppdu.h ns-3.43/src/wifi/model/eht/eht-ppdu.h
--- ns-3.42/src/wifi/model/eht/eht-ppdu.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/eht-ppdu.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -107,7 +96,7 @@
      * Get the number of RUs per EHT-SIG-B content channel.
      * This function will be used once EHT PHY headers are implemented.
      *
-     * \param channelWidth the channel width occupied by the PPDU (in MHz)
+     * \param channelWidth the channel width occupied by the PPDU
      * \param ehtPpduType the EHT_PPDU_TYPE used by the PPDU
      * \param ruAllocation 8 bit RU_ALLOCATION per 20 MHz
      * \param compression flag whether compression mode is used by the PPDU
@@ -115,7 +104,7 @@
      * \return a pair containing the number of RUs in each EHT-SIG-B content channel (resp. 1 and 2)
      */
     static std::pair<std::size_t, std::size_t> GetNumRusPerEhtSigBContentChannel(
-        uint16_t channelWidth,
+        MHz_u channelWidth,
         uint8_t ehtPpduType,
         const std::vector<uint8_t>& ruAllocation,
         bool compression,
@@ -134,14 +123,14 @@
 
     /**
      * Get variable length EHT-SIG field size
-     * \param channelWidth the channel width occupied by the PPDU (in MHz)
+     * \param channelWidth the channel width occupied by the PPDU
      * \param ruAllocation 8 bit RU_ALLOCATION per 20 MHz
      * \param ehtPpduType the EHT_PPDU_TYPE used by the PPDU
      * \param compression flag whether compression mode is used by the PPDU
      * \param numMuMimoUsers the number of MU-MIMO users addressed by the PPDU
      * \return field size in bytes
      */
-    static uint32_t GetEhtSigFieldSize(uint16_t channelWidth,
+    static uint32_t GetEhtSigFieldSize(MHz_u channelWidth,
                                        const std::vector<uint8_t>& ruAllocation,
                                        uint8_t ehtPpduType,
                                        bool compression,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/emlsr-manager.cc ns-3.43/src/wifi/model/eht/emlsr-manager.cc
--- ns-3.42/src/wifi/model/eht/emlsr-manager.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/emlsr-manager.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -76,7 +65,7 @@
                               TypeId::ATTR_CONSTRUCT, // prevent setting after construction
                           UintegerValue(20),
                           MakeUintegerAccessor(&EmlsrManager::m_auxPhyMaxWidth),
-                          MakeUintegerChecker<uint16_t>(20, 160))
+                          MakeUintegerChecker<MHz_u>(20, 160))
             .AddAttribute("AuxPhyMaxModClass",
                           "The maximum modulation class supported by Aux PHYs. Use "
                           "WIFI_MOD_CLASS_OFDM for non-HT.",
@@ -104,6 +93,14 @@
                           MakeBooleanAccessor(&EmlsrManager::SetAuxPhyTxCapable,
                                               &EmlsrManager::GetAuxPhyTxCapable),
                           MakeBooleanChecker())
+            .AddAttribute("InDeviceInterference",
+                          "Whether in-device interference is such that a PHY cannot decode "
+                          "anything and cannot decrease the backoff counter when another PHY "
+                          "of the same device is transmitting.",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&EmlsrManager::SetInDeviceInterference,
+                                              &EmlsrManager::GetInDeviceInterference),
+                          MakeBooleanChecker())
             .AddAttribute(
                 "EmlsrLinkSet",
                 "IDs of the links on which EMLSR mode will be enabled. An empty set "
@@ -169,6 +166,13 @@
     m_staMac->TraceConnectWithoutContext("AckedMpdu", MakeCallback(&EmlsrManager::TxOk, this));
     m_staMac->TraceConnectWithoutContext("DroppedMpdu",
                                          MakeCallback(&EmlsrManager::TxDropped, this));
+    DoSetWifiMac(mac);
+}
+
+void
+EmlsrManager::DoSetWifiMac(Ptr<StaWifiMac> mac)
+{
+    NS_LOG_FUNCTION(this << mac);
 }
 
 void
@@ -209,6 +213,18 @@
     return m_auxPhyTxCapable;
 }
 
+void
+EmlsrManager::SetInDeviceInterference(bool enable)
+{
+    m_inDeviceInterference = enable;
+}
+
+bool
+EmlsrManager::GetInDeviceInterference() const
+{
+    return m_inDeviceInterference;
+}
+
 const std::set<uint8_t>&
 EmlsrManager::GetEmlsrLinks() const
 {
@@ -366,20 +382,15 @@
         if (id != linkId && m_staMac->IsEmlsrLink(id))
         {
             m_staMac->BlockTxOnLink(id, WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK);
-            m_staMac->GetChannelAccessManager(id)->NotifyStartUsingOtherEmlsrLink();
         }
     }
 
     auto mainPhy = m_staMac->GetDevice()->GetPhy(m_mainPhyId);
     auto auxPhy = m_staMac->GetWifiPhy(linkId);
 
-    if (m_staMac->GetWifiPhy(linkId) == mainPhy)
+    if (m_staMac->GetWifiPhy(linkId) != mainPhy)
     {
-        // nothing to do, we received an ICF from the main PHY
-        return;
-    }
-
-    Simulator::ScheduleNow([=, this]() {
+        // an aux PHY received the ICF
         SwitchMainPhy(linkId,
                       true, // channel switch should occur instantaneously
                       RESET_BACKOFF,
@@ -388,13 +399,49 @@
         // aux PHY received the ICF but main PHY will send the response
         auto uid = auxPhy->GetPreviouslyRxPpduUid();
         mainPhy->SetPreviouslyRxPpduUid(uid);
+    }
 
-        DoNotifyIcfReceived(linkId);
-    });
+    DoNotifyIcfReceived(linkId);
+}
+
+std::pair<bool, Time>
+EmlsrManager::GetDelayUntilAccessRequest(uint8_t linkId, AcIndex aci)
+{
+    auto phy = m_staMac->GetWifiPhy(linkId);
+    NS_ASSERT_MSG(phy, "No PHY operating on link " << +linkId);
+
+    auto mainPhy = m_staMac->GetDevice()->GetPhy(m_mainPhyId);
+
+    // check possible reasons to give up the TXOP that apply to both main PHY and aux PHYs
+    if (const auto [startTxop, delay] = DoGetDelayUntilAccessRequest(linkId); !startTxop)
+    {
+        return {false, delay};
+    }
+
+    if (phy == mainPhy)
+    {
+        // no more constraints to check if medium was gained by main PHY
+        return {true, Time{0}};
+    }
+
+    // an aux PHY is operating on the given link; call the appropriate method depending on
+    // whether the aux PHY is TX capable or not
+    if (!m_auxPhyTxCapable)
+    {
+        SwitchMainPhyIfTxopGainedByAuxPhy(linkId, aci);
+        // if the aux PHY is not TX capable, we don't have to request channel access: if the main
+        // PHY switches link, the UL TXOP will be started; if the main PHY does not switch, it is
+        // because it is going to start an UL TXOP on another link and this link will be restarted
+        // at the end of that UL TXOP when this link will be unblocked
+        NS_LOG_DEBUG("Aux PHY is not capable of transmitting a PPDU");
+        return {false, Time{0}};
+    }
+
+    return GetDelayUnlessMainPhyTakesOverUlTxop(linkId);
 }
 
 void
-EmlsrManager::NotifyUlTxopStart(uint8_t linkId, std::optional<Time> timeToCtsEnd)
+EmlsrManager::NotifyUlTxopStart(uint8_t linkId)
 {
     NS_LOG_FUNCTION(this << linkId);
 
@@ -410,39 +457,9 @@
         if (id != linkId && m_staMac->IsEmlsrLink(id))
         {
             m_staMac->BlockTxOnLink(id, WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK);
-            m_staMac->GetChannelAccessManager(id)->NotifyStartUsingOtherEmlsrLink();
         }
     }
 
-    // if this TXOP is being started by an aux PHY, schedule a channel switch for the main PHY
-    // such that the channel switch is completed by the time the CTS response is received. The
-    // delay has been passed by the FEM.
-    if (m_staMac->GetLinkForPhy(m_mainPhyId) != linkId)
-    {
-        auto stateHelper = m_staMac->GetWifiPhy(linkId)->GetState();
-        NS_ASSERT(stateHelper);
-        NS_ASSERT_MSG(stateHelper->GetState() == WifiPhyState::TX,
-                      "Expecting the aux PHY to be transmitting (an RTS frame)");
-        NS_ASSERT_MSG(timeToCtsEnd.has_value(),
-                      "Aux PHY is sending RTS, expected to get the time to CTS end");
-
-        auto mainPhy = m_staMac->GetDevice()->GetPhy(m_mainPhyId);
-
-        // the main PHY shall terminate the channel switch at the end of CTS reception;
-        // the time remaining to the end of CTS reception includes two propagation delays
-        const auto delay = *timeToCtsEnd - mainPhy->GetChannelSwitchDelay();
-
-        NS_ASSERT(delay.IsPositive());
-        NS_LOG_DEBUG("Schedule main Phy switch in " << delay.As(Time::US));
-        m_ulMainPhySwitch[linkId] = Simulator::Schedule(delay,
-                                                        &EmlsrManager::SwitchMainPhy,
-                                                        this,
-                                                        linkId,
-                                                        false,
-                                                        RESET_BACKOFF,
-                                                        DONT_REQUEST_ACCESS);
-    }
-
     DoNotifyUlTxopStart(linkId);
 }
 
@@ -497,7 +514,6 @@
         {
             if ((id != linkId) && m_staMac->IsEmlsrLink(id))
             {
-                m_staMac->GetChannelAccessManager(id)->NotifyStopUsingOtherEmlsrLink();
                 linkIds.insert(id);
             }
         }
@@ -549,24 +565,24 @@
     NS_ASSERT_MSG(mainPhy != m_staMac->GetWifiPhy(linkId),
                   "Main PHY is already operating on link " << +linkId);
 
-    if (mainPhy->IsStateSwitching())
-    {
-        NS_LOG_DEBUG("Main PHY is already switching, ignore new switching request");
-        return;
-    }
-
     // find the link on which the main PHY is operating
     auto currMainPhyLinkId = m_staMac->GetLinkForPhy(mainPhy);
-    NS_ASSERT_MSG(currMainPhyLinkId, "Current link ID for main PHY not found");
 
-    auto newMainPhyChannel = GetChannelForMainPhy(linkId);
+    NS_ASSERT_MSG(currMainPhyLinkId.has_value() || mainPhy->IsStateSwitching(),
+                  "If the main PHY is not operating on a link, it must be switching");
+
+    const auto newMainPhyChannel = GetChannelForMainPhy(linkId);
 
     NS_LOG_DEBUG("Main PHY (" << mainPhy << ") is about to switch to " << newMainPhyChannel
                               << " to operate on link " << +linkId);
 
-    // notify the channel access manager of the upcoming channel switch(es)
-    m_staMac->GetChannelAccessManager(*currMainPhyLinkId)
-        ->NotifySwitchingEmlsrLink(mainPhy, newMainPhyChannel, linkId);
+    // if the main PHY is operating on a link, notify the channel access manager of the upcoming
+    // channel switch
+    if (currMainPhyLinkId.has_value())
+    {
+        m_staMac->GetChannelAccessManager(*currMainPhyLinkId)
+            ->NotifySwitchingEmlsrLink(mainPhy, newMainPhyChannel, linkId);
+    }
 
     // this assert also ensures that the actual channel switch is not delayed
     NS_ASSERT_MSG(!mainPhy->GetState()->IsStateTx(),
@@ -597,14 +613,21 @@
         mainPhy->SetSlot(MicroSeconds(9));
     }
 
-    if (resetBackoff)
+    const auto timeToSwitchEnd = noSwitchDelay ? Seconds(0) : delay;
+
+    // if the main PHY is not operating on any link (because it was switching), it is not connected
+    // to a channel access manager, hence we must notify the MAC of the new link switch
+    if (!currMainPhyLinkId.has_value())
+    {
+        m_staMac->NotifySwitchingEmlsrLink(mainPhy, linkId, timeToSwitchEnd);
+    }
+
+    if (resetBackoff && currMainPhyLinkId.has_value())
     {
         // reset the backoffs on the link left by the main PHY
         m_staMac->GetChannelAccessManager(*currMainPhyLinkId)->ResetAllBackoffs();
     }
 
-    const auto timeToSwitchEnd = noSwitchDelay ? Seconds(0) : mainPhy->GetChannelSwitchDelay();
-
     if (requestAccess)
     {
         // schedule channel access request on the new link when switch is completed
@@ -620,15 +643,13 @@
     }
 
     SetCcaEdThresholdOnLinkSwitch(mainPhy, linkId);
-    NotifyMainPhySwitch(*currMainPhyLinkId, linkId);
+    NotifyMainPhySwitch(currMainPhyLinkId, linkId, timeToSwitchEnd);
 }
 
 void
-EmlsrManager::SwitchAuxPhy(uint8_t currLinkId, uint8_t nextLinkId)
+EmlsrManager::SwitchAuxPhy(Ptr<WifiPhy> auxPhy, uint8_t currLinkId, uint8_t nextLinkId)
 {
-    NS_LOG_FUNCTION(this << currLinkId << nextLinkId);
-
-    auto auxPhy = GetStaMac()->GetWifiPhy(currLinkId);
+    NS_LOG_FUNCTION(this << auxPhy << currLinkId << nextLinkId);
 
     auto newAuxPhyChannel = GetChannelForAuxPhy(nextLinkId);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/emlsr-manager.h ns-3.43/src/wifi/model/eht/emlsr-manager.h
--- ns-3.42/src/wifi/model/eht/emlsr-manager.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/emlsr-manager.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -29,6 +18,9 @@
 #include <map>
 #include <optional>
 #include <set>
+#include <utility>
+
+class EmlsrCcaBusyTest;
 
 namespace ns3
 {
@@ -45,6 +37,9 @@
  */
 class EmlsrManager : public Object
 {
+    /// Allow test cases to access private members
+    friend class ::EmlsrCcaBusyTest;
+
   public:
     /**
      * \brief Get the type ID.
@@ -148,6 +143,18 @@
     bool GetCamStateReset() const;
 
     /**
+     * Notify that an UL TXOP is gained on the given link by the given AC. This method has to
+     * determine whether to start the UL TXOP or release the channel.
+     *
+     * \param linkId the ID of the given link
+     * \param aci the index of the given AC
+     * \return a pair consisting of a boolean value indicating whether the UL TXOP can be started
+     *         and a Time value indicating the delay after which the EMLSR client must restart
+     *         channel access (if needed) in case the UL TXOP is not started
+     */
+    std::pair<bool, Time> GetDelayUntilAccessRequest(uint8_t linkId, AcIndex aci);
+
+    /**
      * Set the member variable indicating whether Aux PHYs are capable of transmitting PPDUs.
      *
      * \param capable whether Aux PHYs are capable of transmitting PPDUs
@@ -160,6 +167,21 @@
     bool GetAuxPhyTxCapable() const;
 
     /**
+     * Set the member variable indicating whether in-device interference is such that a PHY cannot
+     * decode anything and cannot decrease the backoff counter when another PHY is transmitting.
+     *
+     * \param enable whether in-device interference is such that a PHY cannot decode anything
+     *               and cannot decrease the backoff counter when another PHY is transmitting
+     */
+    void SetInDeviceInterference(bool enable);
+
+    /**
+     * \return whether in-device interference is such that a PHY cannot decode anything and cannot
+     *         decrease the backoff counter when another PHY is transmitting
+     */
+    bool GetInDeviceInterference() const;
+
+    /**
      * Notify the reception of a management frame addressed to us.
      *
      * \param mpdu the received MPDU
@@ -178,10 +200,8 @@
      * Notify the start of an UL TXOP on the given link
      *
      * \param linkId the ID of the given link
-     * \param timeToCtsEnd time remaining to the end of CTS reception, in case the UL TXOP is
-     *                     started by an aux PHY
      */
-    void NotifyUlTxopStart(uint8_t linkId, std::optional<Time> timeToCtsEnd);
+    void NotifyUlTxopStart(uint8_t linkId);
 
     /**
      * Notify the end of a TXOP on the given link.
@@ -246,6 +266,13 @@
     void DoDispose() override;
 
     /**
+     * Allow subclasses to take actions when the MAC is set.
+     *
+     * \param mac the wifi MAC
+     */
+    virtual void DoSetWifiMac(Ptr<StaWifiMac> mac);
+
+    /**
      * \return the MAC of the non-AP MLD managed by this EMLSR Manager.
      */
     Ptr<StaWifiMac> GetStaMac() const;
@@ -306,10 +333,11 @@
      * Switch channel on the Aux PHY operating on the given current link so that it operates
      * on the given next link.
      *
+     * \param auxPhy the Aux PHY
      * \param currLinkId the ID of the link on which the aux PHY is currently operating
      * \param nextLinkId the ID of the link on which the aux PHY will be operating
      */
-    void SwitchAuxPhy(uint8_t currLinkId, uint8_t nextLinkId);
+    void SwitchAuxPhy(Ptr<WifiPhy> auxPhy, uint8_t currLinkId, uint8_t nextLinkId);
 
     /**
      * Set the CCA ED threshold (if needed) on the given PHY that is switching channel to
@@ -325,12 +353,52 @@
      */
     MgtEmlOmn GetEmlOmn();
 
+    /**
+     * Subclasses have to provide an implementation for this method, that is called by the base
+     * class when the EMLSR client gets channel access on the given link. This method has to
+     * check possible reasons to give up the TXOP that apply to both main PHY and aux PHYs.
+     *
+     * \param linkId the ID of the given link
+     * \return a pair consisting of a boolean value indicating whether the UL TXOP can be started
+     *         and a Time value indicating the delay after which the EMLSR client must restart
+     *         channel access (if needed) in case the UL TXOP is not started
+     */
+    virtual std::pair<bool, Time> DoGetDelayUntilAccessRequest(uint8_t linkId) = 0;
+
+    /**
+     * Subclasses have to provide an implementation for this method, that is called by the base
+     * class when the given AC of the EMLSR client gets channel access on the given link, on which
+     * an aux PHY that is not TX capable is operating. This method has to request the main PHY to
+     * switch to the given link to take over the TXOP, unless it is decided to give up the TXOP.
+     *
+     * \param linkId the ID of the given link
+     * \param aci the index of the given AC
+     */
+    virtual void SwitchMainPhyIfTxopGainedByAuxPhy(uint8_t linkId, AcIndex aci) = 0;
+
+    /**
+     * Subclasses have to provide an implementation for this method, that is called by the base
+     * class when the EMLSR client gets channel access on the given link, on which an aux PHY that
+     * is TX capable is operating. This method has to request the main PHY to switch to the
+     * given link to take over the TXOP, if possible, or determine the delay after which the
+     * EMLSR client restarts channel access on the given link, otherwise.
+     *
+     * \param linkId the ID of the given link
+     * \return a pair consisting of a boolean value indicating whether the UL TXOP can be started
+     *         and a Time value indicating the delay after which the EMLSR client must restart
+     *         channel access (if needed) in case the UL TXOP is not started
+     */
+    virtual std::pair<bool, Time> GetDelayUnlessMainPhyTakesOverUlTxop(uint8_t linkId) = 0;
+
     Time m_emlsrPaddingDelay;    //!< EMLSR Padding delay
     Time m_emlsrTransitionDelay; //!< EMLSR Transition delay
     uint8_t m_mainPhyId; //!< ID of main PHY (position in the vector of PHYs held by WifiNetDevice)
-    uint16_t m_auxPhyMaxWidth;               //!< max channel width (MHz) supported by aux PHYs
+    MHz_u m_auxPhyMaxWidth;                  //!< max channel width supported by aux PHYs
     WifiModulationClass m_auxPhyMaxModClass; //!< max modulation class supported by aux PHYs
     bool m_auxPhyTxCapable;                  //!< whether Aux PHYs are capable of transmitting PPDUs
+    std::map<uint8_t, EventId> m_ulMainPhySwitch; //!< link ID-indexed map of timers started when
+                                                  //!< an aux PHY gains an UL TXOP and schedules
+                                                  //!< a channel switch for the main PHY
 
   private:
     /**
@@ -434,10 +502,13 @@
     /**
      * Notify subclass that the main PHY is switching channel to operate on another link.
      *
-     * \param currLinkId the ID of the link on which the main PHY is operating
+     * \param currLinkId the ID of the link on which the main PHY is operating (if any)
      * \param nextLinkId the ID of the link on which the main PHY will be operating
+     * \param duration the channel switch duration
      */
-    virtual void NotifyMainPhySwitch(uint8_t currLinkId, uint8_t nextLinkId) = 0;
+    virtual void NotifyMainPhySwitch(std::optional<uint8_t> currLinkId,
+                                     uint8_t nextLinkId,
+                                     Time duration) = 0;
 
     /**
      * Information about the status of the MediumSyncDelay timer associated with a link.
@@ -458,10 +529,10 @@
 
     std::map<uint8_t, MediumSyncDelayStatus>
         m_mediumSyncDelayStatus; //!< the status of MediumSyncDelay timers (link ID-indexed)
-    std::map<Ptr<WifiPhy>, double> m_prevCcaEdThreshold; //!< the CCA sensitivity threshold (dBm)
-                                                         //!< to restore once the MediumSyncDelay
-                                                         //!< timer expires or the PHY moves to a
-                                                         //!< link on which the timer is not running
+    std::map<Ptr<WifiPhy>, dBm_u> m_prevCcaEdThreshold; //!< the CCA sensitivity threshold
+                                                        //!< to restore once the MediumSyncDelay
+                                                        //!< timer expires or the PHY moves to a
+                                                        //!< link on which the timer is not running
 
     std::set<uint8_t> m_emlsrLinks; //!< ID of the EMLSR links (empty if EMLSR mode is disabled)
     std::optional<std::set<uint8_t>> m_nextEmlsrLinks; /**< ID of the links that will become the
@@ -472,13 +543,13 @@
     EventId m_transitionTimeoutEvent; /**< Timer started after the successful transmission of an
                                            EML Operating Mode Notification frame */
     bool m_resetCamState; //!< whether to reset the state of CAM when main PHY switches channel
+    bool m_inDeviceInterference; //!< whether in-device interference is such that a PHY cannot
+                                 //!< decode anything  and cannot decrease the backoff counter
+                                 //!< when another PHY is transmitting
     std::map<uint8_t, WifiPhyOperatingChannel>
         m_mainPhyChannels; //!< link ID-indexed map of operating channels for the main PHY
     std::map<uint8_t, WifiPhyOperatingChannel>
         m_auxPhyChannels; //!< link ID-indexed map of operating channels for the aux PHYs
-    std::map<uint8_t, EventId> m_ulMainPhySwitch; //!< link ID-indexed map of timers started when
-                                                  //!< an aux PHY gains an UL TXOP and schedules
-                                                  //!< a channel switch for the main PHY
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/multi-link-element.cc ns-3.43/src/wifi/model/eht/multi-link-element.cc
--- ns-3.42/src/wifi/model/eht/multi-link-element.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/multi-link-element.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/multi-link-element.h ns-3.43/src/wifi/model/eht/multi-link-element.h
--- ns-3.42/src/wifi/model/eht/multi-link-element.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/multi-link-element.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/tid-to-link-mapping-element.cc ns-3.43/src/wifi/model/eht/tid-to-link-mapping-element.cc
--- ns-3.42/src/wifi/model/eht/tid-to-link-mapping-element.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/tid-to-link-mapping-element.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sharan Naribole <sharan.naribole@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/eht/tid-to-link-mapping-element.h ns-3.43/src/wifi/model/eht/tid-to-link-mapping-element.h
--- ns-3.42/src/wifi/model/eht/tid-to-link-mapping-element.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/eht/tid-to-link-mapping-element.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sharan Naribole <sharan.naribole@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/error-rate-model.cc ns-3.43/src/wifi/model/error-rate-model.cc
--- ns-3.42/src/wifi/model/error-rate-model.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/error-rate-model.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -73,7 +62,7 @@
     if (mode.GetModulationClass() == WIFI_MOD_CLASS_DSSS ||
         mode.GetModulationClass() == WIFI_MOD_CLASS_HR_DSSS)
     {
-        switch (mode.GetDataRate(22, 0, 1))
+        switch (mode.GetDataRate(22))
         {
         case 1000000:
             return DsssErrorRateModel::GetDsssDbpskSuccessRate(snr, nbits);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/error-rate-model.h ns-3.43/src/wifi/model/error-rate-model.h
--- ns-3.42/src/wifi/model/error-rate-model.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/error-rate-model.h	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/extended-capabilities.cc ns-3.43/src/wifi/model/extended-capabilities.cc
--- ns-3.42/src/wifi/model/extended-capabilities.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/extended-capabilities.cc	2024-10-09 16:41:10.116656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -79,9 +68,7 @@
       m_protectedQloadReport(0),
       m_tdlsWiderBandwidth(0),
       m_operatingModeNotification(0),
-      m_maxNumberOfMsdusInAmsdu(0),
-      m_htSupported(0),
-      m_vhtSupported(0)
+      m_maxNumberOfMsdusInAmsdu(0)
 {
 }
 
@@ -97,27 +84,9 @@
     os << "Extended Capabilities=" << +GetExtendedCapabilitiesByte1();
 }
 
-void
-ExtendedCapabilities::SetHtSupported(uint8_t htSupported)
-{
-    m_htSupported = htSupported;
-}
-
-void
-ExtendedCapabilities::SetVhtSupported(uint8_t vhtSupported)
-{
-    m_vhtSupported = vhtSupported;
-}
-
 uint16_t
 ExtendedCapabilities::GetInformationFieldSize() const
 {
-    // we should not be here if it is not supported
-    NS_ASSERT(m_htSupported > 0 || m_vhtSupported > 0);
-    if (!m_vhtSupported)
-    {
-        return 1;
-    }
     return 8;
 }
 
@@ -334,23 +303,15 @@
 void
 ExtendedCapabilities::SerializeInformationField(Buffer::Iterator start) const
 {
-    if (m_htSupported > 0 && m_vhtSupported == 0)
-    {
-        // write the corresponding value for each bit
-        start.WriteU8(GetExtendedCapabilitiesByte1() & 0x7f);
-    }
-    else if (m_vhtSupported > 0)
-    {
-        // write the corresponding value for each bit
-        start.WriteU8(GetExtendedCapabilitiesByte1());
-        start.WriteU8(GetExtendedCapabilitiesByte2());
-        start.WriteU8(GetExtendedCapabilitiesByte3());
-        start.WriteU8(GetExtendedCapabilitiesByte4());
-        start.WriteU8(GetExtendedCapabilitiesByte5());
-        start.WriteU8(GetExtendedCapabilitiesByte6());
-        start.WriteU8(GetExtendedCapabilitiesByte7());
-        start.WriteU8(GetExtendedCapabilitiesByte8());
-    }
+    // write the corresponding value for each bit
+    start.WriteU8(GetExtendedCapabilitiesByte1());
+    start.WriteU8(GetExtendedCapabilitiesByte2());
+    start.WriteU8(GetExtendedCapabilitiesByte3());
+    start.WriteU8(GetExtendedCapabilitiesByte4());
+    start.WriteU8(GetExtendedCapabilitiesByte5());
+    start.WriteU8(GetExtendedCapabilitiesByte6());
+    start.WriteU8(GetExtendedCapabilitiesByte7());
+    start.WriteU8(GetExtendedCapabilitiesByte8());
 }
 
 uint16_t
@@ -358,24 +319,21 @@
 {
     Buffer::Iterator i = start;
     uint8_t byte1 = i.ReadU8();
+    uint8_t byte2 = i.ReadU8();
+    uint8_t byte3 = i.ReadU8();
+    uint8_t byte4 = i.ReadU8();
+    uint8_t byte5 = i.ReadU8();
+    uint8_t byte6 = i.ReadU8();
+    uint8_t byte7 = i.ReadU8();
+    uint8_t byte8 = i.ReadU8();
     SetExtendedCapabilitiesByte1(byte1);
-    if (m_vhtSupported > 0)
-    {
-        uint8_t byte2 = i.ReadU8();
-        uint8_t byte3 = i.ReadU8();
-        uint8_t byte4 = i.ReadU8();
-        uint8_t byte5 = i.ReadU8();
-        uint8_t byte6 = i.ReadU8();
-        uint8_t byte7 = i.ReadU8();
-        uint8_t byte8 = i.ReadU8();
-        SetExtendedCapabilitiesByte2(byte2);
-        SetExtendedCapabilitiesByte3(byte3);
-        SetExtendedCapabilitiesByte4(byte4);
-        SetExtendedCapabilitiesByte5(byte5);
-        SetExtendedCapabilitiesByte6(byte6);
-        SetExtendedCapabilitiesByte7(byte7);
-        SetExtendedCapabilitiesByte8(byte8);
-    }
+    SetExtendedCapabilitiesByte2(byte2);
+    SetExtendedCapabilitiesByte3(byte3);
+    SetExtendedCapabilitiesByte4(byte4);
+    SetExtendedCapabilitiesByte5(byte5);
+    SetExtendedCapabilitiesByte6(byte6);
+    SetExtendedCapabilitiesByte7(byte7);
+    SetExtendedCapabilitiesByte8(byte8);
     return length;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/extended-capabilities.h ns-3.43/src/wifi/model/extended-capabilities.h
--- ns-3.42/src/wifi/model/extended-capabilities.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/extended-capabilities.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -42,18 +31,6 @@
     void SerializeInformationField(Buffer::Iterator start) const override;
     uint16_t DeserializeInformationField(Buffer::Iterator start, uint16_t length) override;
     void Print(std::ostream& os) const override;
-    /**
-     * Set the HT Supported flag.
-     *
-     * \param htSupported flag whether HT is supported
-     */
-    void SetHtSupported(uint8_t htSupported);
-    /**
-     * Set the VHT Supported flag.
-     *
-     * \param vhtSupported flag whether VHT is supported
-     */
-    void SetVhtSupported(uint8_t vhtSupported);
 
     /**
      * Set the first byte in the Extended Capabilities information element.
@@ -160,7 +137,6 @@
     uint8_t m_psmpCapability;                        ///< PSMP Capability
     uint8_t m_spsmpSupport;                          ///< S-PSMP Support
 
-    // fields if VHT supported
     uint8_t m_event;                           ///< Event
     uint8_t m_diagnostics;                     ///< Diagnostics
     uint8_t m_multicastDiagnostics;            ///< Multicast Diagnostics
@@ -220,11 +196,6 @@
     uint8_t m_tdlsWiderBandwidth;         ///< TDLS Wider Bandwidth
     uint8_t m_operatingModeNotification;  ///< Operating Mode Notification
     uint8_t m_maxNumberOfMsdusInAmsdu;    ///< Max Number Of MSDUs In A-MSDU
-
-    uint8_t m_htSupported;  ///< Flag to indicate HT is supported in order to decide whether this
-                            ///< element should be added to the frame or not
-    uint8_t m_vhtSupported; ///< Flag to indicate VHT is supported in order to decide whether this
-                            ///< element should be added to the frame or not
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/fcfs-wifi-queue-scheduler.cc ns-3.43/src/wifi/model/fcfs-wifi-queue-scheduler.cc
--- ns-3.42/src/wifi/model/fcfs-wifi-queue-scheduler.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/fcfs-wifi-queue-scheduler.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/fcfs-wifi-queue-scheduler.h ns-3.43/src/wifi/model/fcfs-wifi-queue-scheduler.h
--- ns-3.42/src/wifi/model/fcfs-wifi-queue-scheduler.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/fcfs-wifi-queue-scheduler.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/frame-capture-model.cc ns-3.43/src/wifi/model/frame-capture-model.cc
--- ns-3.42/src/wifi/model/frame-capture-model.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/frame-capture-model.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/frame-capture-model.h ns-3.43/src/wifi/model/frame-capture-model.h
--- ns-3.42/src/wifi/model/frame-capture-model.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/frame-capture-model.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/frame-exchange-manager.cc ns-3.43/src/wifi/model/frame-exchange-manager.cc
--- ns-3.42/src/wifi/model/frame-exchange-manager.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/frame-exchange-manager.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -80,6 +69,8 @@
     m_navEnd = Simulator::Now();
     m_mpdu = nullptr;
     m_txParams.Clear();
+    m_ongoingRxInfo.macHdr.reset();
+    m_ongoingRxInfo.endOfPsduRx = Time{};
     m_dcf = nullptr;
 }
 
@@ -173,7 +164,10 @@
     m_phy = phy;
     m_phy->TraceConnectWithoutContext("PhyRxPayloadBegin",
                                       MakeCallback(&FrameExchangeManager::RxStartIndication, this));
+    m_phy->TraceConnectWithoutContext("PhyRxMacHeaderEnd",
+                                      MakeCallback(&FrameExchangeManager::ReceivedMacHdr, this));
     m_phy->SetReceiveOkCallback(MakeCallback(&FrameExchangeManager::Receive, this));
+    m_phy->SetReceiveErrorCallback(MakeCallback(&FrameExchangeManager::PsduRxError, this));
 }
 
 void
@@ -185,6 +179,9 @@
         m_phy->TraceDisconnectWithoutContext(
             "PhyRxPayloadBegin",
             MakeCallback(&FrameExchangeManager::RxStartIndication, this));
+        m_phy->TraceDisconnectWithoutContext(
+            "PhyRxMacHeaderEnd",
+            MakeCallback(&FrameExchangeManager::ReceivedMacHdr, this));
         if (m_phy->GetState())
         {
             m_phy->SetReceiveOkCallback(MakeNullCallback<void,
@@ -192,8 +189,11 @@
                                                          RxSignalInfo,
                                                          WifiTxVector,
                                                          std::vector<bool>>());
+            m_phy->SetReceiveErrorCallback(MakeNullCallback<void, Ptr<const WifiPsdu>>());
         }
         m_phy = nullptr;
+        m_ongoingRxInfo.macHdr.reset();
+        m_ongoingRxInfo.endOfPsduRx = Time{};
     }
 }
 
@@ -226,6 +226,12 @@
     return m_bssid;
 }
 
+MHz_u
+FrameExchangeManager::GetAllowedWidth() const
+{
+    return m_allowedWidth;
+}
+
 void
 FrameExchangeManager::SetDroppedMpduCallback(DroppedMpdu callback)
 {
@@ -261,10 +267,8 @@
 void
 FrameExchangeManager::NotifyPacketDiscarded(Ptr<const WifiMpdu> mpdu)
 {
-    if (!m_droppedMpduCallback.IsNull())
-    {
-        m_droppedMpduCallback(WIFI_MAC_DROP_REACHED_RETRY_LIMIT, mpdu);
-    }
+    NS_ASSERT(!m_droppedMpduCallback.IsNull());
+    m_droppedMpduCallback(WIFI_MAC_DROP_REACHED_RETRY_LIMIT, mpdu);
 }
 
 void
@@ -292,10 +296,41 @@
     {
         m_navResetEvent.Cancel();
     }
+
+    m_ongoingRxInfo = {std::nullopt, txVector, Simulator::Now() + psduDuration};
+}
+
+void
+FrameExchangeManager::ReceivedMacHdr(const WifiMacHeader& macHdr,
+                                     const WifiTxVector& txVector,
+                                     Time psduDuration)
+{
+    NS_LOG_FUNCTION(this << macHdr << txVector << psduDuration.As(Time::MS));
+    m_ongoingRxInfo = {macHdr, txVector, Simulator::Now() + psduDuration};
+}
+
+std::optional<std::reference_wrapper<const FrameExchangeManager::OngoingRxInfo>>
+FrameExchangeManager::GetOngoingRxInfo() const
+{
+    if (m_ongoingRxInfo.endOfPsduRx >= Simulator::Now())
+    {
+        return m_ongoingRxInfo;
+    }
+    return std::nullopt;
+}
+
+std::optional<std::reference_wrapper<const WifiMacHeader>>
+FrameExchangeManager::GetReceivedMacHdr() const
+{
+    if (auto info = GetOngoingRxInfo(); info.has_value() && info->get().macHdr.has_value())
+    {
+        return info->get().macHdr.value();
+    }
+    return std::nullopt;
 }
 
 bool
-FrameExchangeManager::StartTransmission(Ptr<Txop> dcf, uint16_t allowedWidth)
+FrameExchangeManager::StartTransmission(Ptr<Txop> dcf, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << dcf << allowedWidth);
 
@@ -1107,6 +1142,12 @@
 }
 
 void
+FrameExchangeManager::PsduRxError(Ptr<const WifiPsdu> psdu)
+{
+    NS_LOG_FUNCTION(this << psdu);
+}
+
+void
 FrameExchangeManager::Receive(Ptr<const WifiPsdu> psdu,
                               RxSignalInfo rxSignalInfo,
                               WifiTxVector txVector,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/frame-exchange-manager.h ns-3.43/src/wifi/model/frame-exchange-manager.h
--- ns-3.42/src/wifi/model/frame-exchange-manager.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/frame-exchange-manager.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -37,6 +26,9 @@
 
 #include "ns3/object.h"
 
+#include <functional>
+#include <optional>
+
 #define WIFI_FEM_NS_LOG_APPEND_CONTEXT                                                             \
     std::clog << "[link=" << +m_linkId << "][mac=" << m_self << "] "
 
@@ -52,6 +44,14 @@
  *
  * FrameExchangeManager is a base class handling the basic frame exchange
  * sequences for non-QoS stations.
+ *
+ * The fragmentation policy implemented uses a simple fragmentation
+ * threshold: any packet bigger than this threshold is fragmented
+ * in fragments whose size is smaller than the threshold.
+ *
+ * The retransmission policy is also very simple: every packet is
+ * retransmitted until it is either successfully transmitted or
+ * it has been retransmitted up until the SSRC or SLRC thresholds.
  */
 class FrameExchangeManager : public Object
 {
@@ -78,10 +78,10 @@
      *
      * \param dcf the channel access function that gained channel access. It is
      *            the DCF on non-QoS stations and an EDCA on QoS stations.
-     * \param allowedWidth the allowed width in MHz for the frame exchange sequence
+     * \param allowedWidth the allowed width for the frame exchange sequence
      * \return true if a frame exchange sequence was started, false otherwise
      */
-    virtual bool StartTransmission(Ptr<Txop> dcf, uint16_t allowedWidth);
+    virtual bool StartTransmission(Ptr<Txop> dcf, MHz_u allowedWidth);
 
     /**
      * This method is intended to be called by the PHY layer every time an MPDU
@@ -100,6 +100,31 @@
                  std::vector<bool> perMpduStatus);
 
     /**
+     * Information about the MPDU being received. The TXVECTOR is populated upon
+     * PHY-RXSTART indication; the MAC header is populated when notified by the PHY.
+     */
+    struct OngoingRxInfo
+    {
+        std::optional<WifiMacHeader> macHdr; //!< MAC header of the MPDU being received
+        WifiTxVector txVector;               //!< TXVECTOR of the MPDU being received
+        Time endOfPsduRx;                    //!< time when reception of PSDU ends
+    };
+
+    /**
+     * \return the information about the MPDU being received by the PHY, if any. This information
+     *         is available from the time the PHY-RXSTART.indication is received until the end
+     *         of PSDU reception
+     */
+    std::optional<std::reference_wrapper<const OngoingRxInfo>> GetOngoingRxInfo() const;
+
+    /**
+     * \return the information about the MAC header of the MPDU being received by the PHY, if any.
+     *         The MAC header is available from the time its reception is completed until the end
+     *         of PSDU reception
+     */
+    std::optional<std::reference_wrapper<const WifiMacHeader>> GetReceivedMacHdr() const;
+
+    /**
      * Set the ID of the link this Frame Exchange Manager is associated with.
      *
      * \param linkId the ID of the link this Frame Exchange Manager is associated with
@@ -176,6 +201,10 @@
      */
     Mac48Address GetBssid() const;
     /**
+     * \return the width of the channel that the FEM is allowed to use for the current transmission
+     */
+    MHz_u GetAllowedWidth() const;
+    /**
      * Set the callback to invoke when an MPDU is dropped.
      *
      * \param callback the callback to invoke when an MPDU is dropped
@@ -333,6 +362,13 @@
     virtual void NavResetTimeout();
 
     /**
+     * This method is called when the reception of a PSDU fails.
+     *
+     * \param psdu the PSDU whose reception failed
+     */
+    virtual void PsduRxError(Ptr<const WifiPsdu> psdu);
+
+    /**
      * This method handles the reception of an MPDU (possibly included in an A-MPDU)
      *
      * \param mpdu the received MPDU
@@ -479,10 +515,10 @@
     std::set<Mac48Address> m_sentRtsTo; //!< the STA(s) which we sent an RTS to (waiting for CTS)
     std::set<Mac48Address> m_protectedStas; //!< STAs that have replied to an RTS in this TXOP
     uint8_t m_linkId;                       //!< the ID of the link this object is associated with
-    uint16_t m_allowedWidth;           //!< the allowed width in MHz for the current transmission
-    bool m_promisc;                    //!< Flag if the device is operating in promiscuous mode
-    DroppedMpdu m_droppedMpduCallback; //!< the dropped MPDU callback
-    AckedMpdu m_ackedMpduCallback;     //!< the acknowledged MPDU callback
+    MHz_u m_allowedWidth;                   //!< the allowed width for the current transmission
+    bool m_promisc;                         //!< Flag if the device is operating in promiscuous mode
+    DroppedMpdu m_droppedMpduCallback;      //!< the dropped MPDU callback
+    AckedMpdu m_ackedMpduCallback;          //!< the acknowledged MPDU callback
 
     /**
      * Finalize the MAC header of the MPDUs in the given PSDU before transmission. Tasks
@@ -650,6 +686,17 @@
      */
     virtual void RxStartIndication(WifiTxVector txVector, Time psduDuration);
 
+    /**
+     * Store information about the MAC header of the MPDU being received.
+     *
+     * \param macHdr the MAC header of the MPDU being received
+     * \param txVector the TXVECTOR used to transmit the PSDU
+     * \param psduDuration the remaining duration of the PSDU
+     */
+    virtual void ReceivedMacHdr(const WifiMacHeader& macHdr,
+                                const WifiTxVector& txVector,
+                                Time psduDuration);
+
   private:
     /**
      * Send the current MPDU, which can be acknowledged by a Normal Ack.
@@ -662,6 +709,9 @@
     bool m_moreFragments;           //!< true if a fragment has to be sent after a SIFS
     Ptr<WifiProtectionManager> m_protectionManager; //!< Protection manager
     Ptr<WifiAckManager> m_ackManager;               //!< Acknowledgment manager
+
+    OngoingRxInfo
+        m_ongoingRxInfo{}; //!< information about the MAC header of the MPDU being received
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/constant-obss-pd-algorithm.cc ns-3.43/src/wifi/model/he/constant-obss-pd-algorithm.cc
--- ns-3.42/src/wifi/model/he/constant-obss-pd-algorithm.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/constant-obss-pd-algorithm.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -72,7 +61,7 @@
 void
 ConstantObssPdAlgorithm::ReceiveHeSigA(HeSigAParameters params)
 {
-    NS_LOG_FUNCTION(this << +params.bssColor << WToDbm(params.rssiW));
+    NS_LOG_FUNCTION(this << +params.bssColor << params.rssi);
 
     Ptr<StaWifiMac> mac = m_device->GetMac()->GetObject<StaWifiMac>();
     if (mac && !mac->IsAssociated())
@@ -100,12 +89,12 @@
     bool isObss = (bssColor != params.bssColor);
     if (isObss)
     {
-        const double obssPdLevel = GetObssPdLevel();
-        if (WToDbm(params.rssiW) < obssPdLevel)
+        const auto obssPdLevel = GetObssPdLevel();
+        if (params.rssi < obssPdLevel)
         {
-            NS_LOG_DEBUG("Frame is OBSS and RSSI " << WToDbm(params.rssiW)
-                                                   << " is below OBSS-PD level of " << obssPdLevel
-                                                   << "; reset PHY to IDLE");
+            NS_LOG_DEBUG("Frame is OBSS and RSSI "
+                         << params.rssi << " dBm is below OBSS-PD level of " << obssPdLevel
+                         << " dBm; reset PHY to IDLE");
             ResetPhy(params);
         }
         else
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/constant-obss-pd-algorithm.h ns-3.43/src/wifi/model/he/constant-obss-pd-algorithm.h
--- ns-3.42/src/wifi/model/he/constant-obss-pd-algorithm.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/constant-obss-pd-algorithm.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-6ghz-band-capabilities.cc ns-3.43/src/wifi/model/he/he-6ghz-band-capabilities.cc
--- ns-3.42/src/wifi/model/he/he-6ghz-band-capabilities.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-6ghz-band-capabilities.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rami Abdallah <abdallah.rami@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-6ghz-band-capabilities.h ns-3.43/src/wifi/model/he/he-6ghz-band-capabilities.h
--- ns-3.42/src/wifi/model/he/he-6ghz-band-capabilities.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-6ghz-band-capabilities.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rami Abdallah <abdallah.rami@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-capabilities.cc ns-3.43/src/wifi/model/he/he-capabilities.cc
--- ns-3.42/src/wifi/model/he/he-capabilities.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-capabilities.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-capabilities.h ns-3.43/src/wifi/model/he/he-capabilities.h
--- ns-3.42/src/wifi/model/he/he-capabilities.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-capabilities.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-configuration.cc ns-3.43/src/wifi/model/he/he-configuration.cc
--- ns-3.42/src/wifi/model/he/he-configuration.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-configuration.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
@@ -188,8 +177,8 @@
 HeConfiguration::SetGuardInterval(Time guardInterval)
 {
     NS_LOG_FUNCTION(this << guardInterval);
-    NS_ASSERT(guardInterval == NanoSeconds(800) || guardInterval == NanoSeconds(1600) ||
-              guardInterval == NanoSeconds(3200));
+    [[maybe_unused]] const auto gi = guardInterval.GetNanoSeconds();
+    NS_ASSERT((gi == 800) || (gi == 1600) || (gi == 3200));
     m_guardInterval = guardInterval;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-configuration.h ns-3.43/src/wifi/model/he/he-configuration.h
--- ns-3.42/src/wifi/model/he/he-configuration.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-configuration.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-frame-exchange-manager.cc ns-3.43/src/wifi/model/he/he-frame-exchange-manager.cc
--- ns-3.42/src/wifi/model/he/he-frame-exchange-manager.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-frame-exchange-manager.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -399,6 +388,15 @@
 HeFrameExchangeManager::CtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts, const WifiTxVector& txVector)
 {
     NS_LOG_FUNCTION(this << *muRts << txVector);
+    DoCtsAfterMuRtsTimeout(muRts, txVector, true);
+}
+
+void
+HeFrameExchangeManager::DoCtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts,
+                                               const WifiTxVector& txVector,
+                                               bool updateFailedCw)
+{
+    NS_LOG_FUNCTION(this << *muRts << txVector << updateFailedCw);
 
     if (m_psduMap.empty())
     {
@@ -446,7 +444,10 @@
     else
     {
         NS_LOG_DEBUG("Missed CTS, retransmit MPDUs");
-        m_edca->UpdateFailedCw(m_linkId);
+        if (updateFailedCw)
+        {
+            m_edca->UpdateFailedCw(m_linkId);
+        }
     }
     // Make the sequence numbers of the MPDUs available again if the MPDUs have never
     // been transmitted, both in case the MPDUs have been discarded and in case the
@@ -1189,7 +1190,7 @@
 
     auto userInfoIt = trigger.FindUserInfoWithAid(staId);
     NS_ASSERT_MSG(userInfoIt != trigger.end(), "User Info field for AID=" << staId << " not found");
-    uint16_t bw = 0;
+    MHz_u bw = 0;
 
     if (uint8_t ru = userInfoIt->GetMuRtsRuAllocation(); ru < 65)
     {
@@ -1488,39 +1489,38 @@
         trigger.GetApTxPower() -
         static_cast<int8_t>(
             *optRssi); // cast RSSI to be on equal footing with AP Tx power information
-    auto reqTxPowerDbm = static_cast<double>(userInfoIt->GetUlTargetRssi() + pathLossDb);
+    auto reqTxPower = static_cast<dBm_u>(userInfoIt->GetUlTargetRssi() + pathLossDb);
 
     // Convert the transmit power to a power level
     uint8_t numPowerLevels = m_phy->GetNTxPower();
     if (numPowerLevels > 1)
     {
-        double stepDbm = (m_phy->GetTxPowerEnd() - m_phy->GetTxPowerStart()) / (numPowerLevels - 1);
+        dBm_u step = (m_phy->GetTxPowerEnd() - m_phy->GetTxPowerStart()) / (numPowerLevels - 1);
         powerLevel = static_cast<uint8_t>(
-            ceil((reqTxPowerDbm - m_phy->GetTxPowerStart()) /
-                 stepDbm)); // better be slightly above so as to satisfy target UL RSSI
+            ceil((reqTxPower - m_phy->GetTxPowerStart()) /
+                 step)); // better be slightly above so as to satisfy target UL RSSI
         if (powerLevel > numPowerLevels)
         {
             powerLevel = numPowerLevels; // capping will trigger warning below
         }
     }
-    if (reqTxPowerDbm > m_phy->GetPowerDbm(powerLevel))
+    if (reqTxPower > m_phy->GetPower(powerLevel))
     {
-        NS_LOG_WARN("The requested power level ("
-                    << reqTxPowerDbm << "dBm) cannot be satisfied (max: " << m_phy->GetTxPowerEnd()
-                    << "dBm)");
+        NS_LOG_WARN("The requested power level (" << reqTxPower << "dBm) cannot be satisfied (max: "
+                                                  << m_phy->GetTxPowerEnd() << "dBm)");
     }
     v.SetTxPowerLevel(powerLevel);
     NS_LOG_LOGIC("UL power control: "
-                 << "input {pathLoss=" << pathLossDb << "dB, reqTxPower=" << reqTxPowerDbm << "dBm}"
-                 << " output {powerLevel=" << +powerLevel << " -> "
-                 << m_phy->GetPowerDbm(powerLevel) << "dBm}"
+                 << "input {pathLoss=" << pathLossDb << "dB, reqTxPower=" << reqTxPower << "dBm}"
+                 << " output {powerLevel=" << +powerLevel << " -> " << m_phy->GetPower(powerLevel)
+                 << "dBm}"
                  << " PHY power capa {min=" << m_phy->GetTxPowerStart() << "dBm, max="
                  << m_phy->GetTxPowerEnd() << "dBm, levels:" << +numPowerLevels << "}");
 
     return v;
 }
 
-std::optional<double>
+std::optional<dBm_u>
 HeFrameExchangeManager::GetMostRecentRssi(const Mac48Address& address) const
 {
     return GetWifiRemoteStationManager()->GetMostRecentRssi(address);
@@ -1533,7 +1533,7 @@
     NS_ASSERT(m_apMac);
 
     trigger.SetApTxPower(static_cast<int8_t>(
-        m_phy->GetPowerDbm(GetWifiRemoteStationManager()->GetDefaultTxPowerLevel())));
+        m_phy->GetPower(GetWifiRemoteStationManager()->GetDefaultTxPowerLevel())));
     for (auto& userInfo : trigger)
     {
         const auto staList = m_apMac->GetStaList(m_linkId);
@@ -1830,9 +1830,11 @@
         return;
     }
 
+    const auto addr1 =
+        GetWifiRemoteStationManager()->GetMldAddress(hdr.GetAddr2()).value_or(hdr.GetAddr2());
     WifiMacHeader header(WIFI_MAC_QOSDATA_NULL);
-    header.SetAddr1(hdr.GetAddr2());
-    header.SetAddr2(m_self);
+    header.SetAddr1(addr1);
+    header.SetAddr2(m_mac->GetAddress());
     header.SetAddr3(hdr.GetAddr2());
     header.SetDsTo();
     header.SetDsNotFrom();
@@ -1869,6 +1871,7 @@
         // TX parameters below.
         header.SetQosTid(tid);
         auto mpdu = Create<WifiMpdu>(Create<Packet>(), header);
+        mpdu = CreateAliasIfNeeded(mpdu);
         txParams.AddMpdu(mpdu);
         UpdateTxDuration(header.GetAddr1(), txParams);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-frame-exchange-manager.h ns-3.43/src/wifi/model/he/he-frame-exchange-manager.h
--- ns-3.42/src/wifi/model/he/he-frame-exchange-manager.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-frame-exchange-manager.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -110,13 +99,13 @@
     virtual void SetTargetRssi(CtrlTriggerHeader& trigger) const;
 
     /**
-     * Get the RSSI (in dBm) of the most recent packet received from the station having
+     * Get the RSSI of the most recent packet received from the station having
      * the given address.
      *
      * \param address of the remote station
-     * \return the RSSI (in dBm) of the most recent packet received from the remote station
+     * \return the RSSI of the most recent packet received from the remote station
      */
-    virtual std::optional<double> GetMostRecentRssi(const Mac48Address& address) const;
+    virtual std::optional<dBm_u> GetMostRecentRssi(const Mac48Address& address) const;
 
     /**
      * Return whether the received frame is classified as intra-BSS. It is assumed that
@@ -214,6 +203,17 @@
     virtual void CtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts, const WifiTxVector& txVector);
 
     /**
+     * Called when no CTS frame is received after an MU-RTS.
+     *
+     * \param muRts the MU-RTS that solicited CTS responses
+     * \param txVector the TXVECTOR used to transmit the MU-RTS frame
+     * \param updateFailedCw whether to update CW in case of retransmission after TX failure
+     */
+    void DoCtsAfterMuRtsTimeout(Ptr<WifiMpdu> muRts,
+                                const WifiTxVector& txVector,
+                                bool updateFailedCw);
+
+    /**
      * Send CTS after receiving an MU-RTS.
      *
      * \param muRtsHdr the MAC header of the received MU-RTS
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-operation.cc ns-3.43/src/wifi/model/he/he-operation.cc
--- ns-3.42/src/wifi/model/he/he-operation.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-operation.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
  *          Stefano Avallone <stavallo@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-operation.h ns-3.43/src/wifi/model/he/he-operation.h
--- ns-3.42/src/wifi/model/he/he-operation.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-operation.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
  *          Stefano Avallone <stavallo@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-phy.cc ns-3.43/src/wifi/model/he/he-phy.cc
--- ns-3.42/src/wifi/model/he/he-phy.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-phy.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy and
@@ -29,10 +18,10 @@
 #include "ns3/interference-helper.h"
 #include "ns3/log.h"
 #include "ns3/simulator.h"
+#include "ns3/spectrum-wifi-phy.h"
 #include "ns3/sta-wifi-mac.h"
 #include "ns3/vht-configuration.h"
 #include "ns3/wifi-net-device.h"
-#include "ns3/wifi-phy.h"
 #include "ns3/wifi-psdu.h"
 #include "ns3/wifi-utils.h"
 
@@ -238,13 +227,13 @@
 Time
 HePhy::GetSigBDuration(const WifiTxVector& txVector) const
 {
-    if (auto sigBSize = GetSigBSize(txVector); sigBSize > 0)
+    if (const auto sigBSize = GetSigBSize(txVector); sigBSize > 0)
     {
-        auto symbolDuration = MicroSeconds(4);
+        const auto symbolDuration = MicroSeconds(4);
         // Number of data bits per symbol
-        auto ndbps =
-            GetSigBMode(txVector).GetDataRate(20, 800, 1) * symbolDuration.GetNanoSeconds() / 1e9;
-        auto numSymbols = ceil((sigBSize) / ndbps);
+        const auto ndbps =
+            GetSigBMode(txVector).GetDataRate(20) * symbolDuration.GetNanoSeconds() / 1e9;
+        const auto numSymbols = ceil((sigBSize) / ndbps);
 
         return FemtoSeconds(static_cast<uint64_t>(numSymbols * symbolDuration.GetFemtoSeconds()));
     }
@@ -258,8 +247,8 @@
 Time
 HePhy::GetValidPpduDuration(Time ppduDuration, const WifiTxVector& txVector, WifiPhyBand band)
 {
-    Time tSymbol = NanoSeconds(12800 + txVector.GetGuardInterval());
-    Time preambleDuration = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
+    const auto tSymbol = GetSymbolDuration(txVector.GetGuardInterval());
+    const auto preambleDuration = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
     uint8_t sigExtension = (band == WIFI_PHY_BAND_2_4GHZ ? 6 : 0);
     uint32_t nSymbols =
         floor(static_cast<double>((ppduDuration - preambleDuration).GetNanoSeconds() -
@@ -329,16 +318,17 @@
 Time
 HePhy::GetSymbolDuration(const WifiTxVector& txVector) const
 {
-    uint16_t gi = txVector.GetGuardInterval();
+    const auto guardInterval = txVector.GetGuardInterval();
+    [[maybe_unused]] const auto gi = guardInterval.GetNanoSeconds();
     NS_ASSERT(gi == 800 || gi == 1600 || gi == 3200);
-    return GetSymbolDuration(NanoSeconds(gi));
+    return GetSymbolDuration(guardInterval);
 }
 
 void
 HePhy::SetTrigVector(const WifiTxVector& trigVector, Time validity)
 {
     NS_LOG_FUNCTION(this << trigVector << validity);
-    NS_ASSERT_MSG(trigVector.GetGuardInterval() > 800,
+    NS_ASSERT_MSG(trigVector.GetGuardInterval().GetNanoSeconds() > 800,
                   "Invalid guard interval " << trigVector.GetGuardInterval());
     if (auto mac = m_wifiPhy->GetDevice()->GetMac(); mac && mac->GetTypeOfStation() != AP)
     {
@@ -378,7 +368,7 @@
         {
             // AP or STA has already received non-HE portion, switch to HE portion, and schedule
             // reception of payload (will be canceled for STAs by StartPayload)
-            bool hePortionStarted = !m_beginMuPayloadRxEvents.empty();
+            const auto hePortionStarted = !m_beginMuPayloadRxEvents.empty();
             NS_LOG_INFO("Switch to HE portion (already started? "
                         << (hePortionStarted ? "Y" : "N") << ") "
                         << "and schedule payload reception in "
@@ -612,9 +602,10 @@
     NS_LOG_FUNCTION(this << *event << status);
     // Notify end of SIG-A (in all cases)
     const auto& txVector = event->GetPpdu()->GetTxVector();
-    HeSigAParameters params;
-    params.rssiW = GetRxPowerWForPpdu(event);
-    params.bssColor = txVector.GetBssColor();
+    HeSigAParameters params{
+        .rssi = WToDbm(GetRxPowerForPpdu(event)),
+        .bssColor = txVector.GetBssColor(),
+    };
     NotifyEndOfHeSigA(params); // if OBSS_PD CCA_RESET, set power restriction first and wait till
                                // field is processed before switching to IDLE
 
@@ -757,9 +748,9 @@
     }
 
     const auto& txVector = ppdu->GetTxVector();
-    uint16_t staId = GetStaId(ppdu);
-    WifiMode txMode = txVector.GetMode(staId);
-    uint8_t nss = txVector.GetNssMax();
+    const auto staId = GetStaId(ppdu);
+    const auto txMode = txVector.GetMode(staId);
+    auto nss = txVector.GetNssMax();
     if (txVector.IsDlMu())
     {
         NS_ASSERT(txVector.GetModulationClass() >= WIFI_MOD_CLASS_HE);
@@ -842,7 +833,7 @@
     else
     {
         NS_LOG_DEBUG("Receiving PSDU in HE TB PPDU");
-        uint16_t staId = GetStaId(ppdu);
+        const auto staId = GetStaId(ppdu);
         m_signalNoiseMap.insert({{ppdu->GetUid(), staId}, SignalNoiseDbm()});
         m_statusPerMpduMap.insert({{ppdu->GetUid(), staId}, std::vector<bool>()});
         // for HE TB PPDUs, ScheduleEndOfMpdus and EndReceive are scheduled by
@@ -934,7 +925,7 @@
 {
     NS_LOG_FUNCTION(this << event);
     Ptr<const WifiPpdu> ppdu = event->GetPpdu();
-    const RxPowerWattPerChannelBand& rxPowersW = event->GetRxPowerWPerBand();
+    const RxPowerWattPerChannelBand& rxPowersW = event->GetRxPowerPerBand();
     // The total RX power corresponds to the maximum over all the bands.
     // Only perform this computation if the result needs to be logged.
     auto it = rxPowersW.end();
@@ -957,20 +948,20 @@
     NS_ASSERT(itEvent != m_beginMuPayloadRxEvents.end() && itEvent->second.IsExpired());
     m_beginMuPayloadRxEvents.erase(itEvent);
 
-    Time payloadDuration =
+    auto payloadDuration =
         ppdu->GetTxDuration() - CalculatePhyPreambleAndHeaderDuration(ppdu->GetTxVector());
-    Ptr<const WifiPsdu> psdu = GetAddressedPsduInPpdu(ppdu);
+    auto psdu = GetAddressedPsduInPpdu(ppdu);
     ScheduleEndOfMpdus(event);
     m_endRxPayloadEvents.push_back(
         Simulator::Schedule(payloadDuration, &HePhy::EndReceivePayload, this, event));
-    uint16_t staId = GetStaId(ppdu);
+    const auto staId = GetStaId(ppdu);
     m_signalNoiseMap.insert({{ppdu->GetUid(), staId}, SignalNoiseDbm()});
     m_statusPerMpduMap.insert({{ppdu->GetUid(), staId}, std::vector<bool>()});
     // Notify the MAC about the start of a new HE TB PPDU, so that it can reschedule the timeout
     NotifyPayloadBegin(ppdu->GetTxVector(), payloadDuration);
 }
 
-std::pair<uint16_t, WifiSpectrumBandInfo>
+std::pair<MHz_u, WifiSpectrumBandInfo>
 HePhy::GetChannelWidthAndBand(const WifiTxVector& txVector, uint16_t staId) const
 {
     if (txVector.IsMu())
@@ -989,7 +980,7 @@
 {
     NS_ASSERT(txVector.IsMu());
     HeRu::RuSpec ru = txVector.GetRu(staId);
-    uint16_t channelWidth = txVector.GetChannelWidth();
+    const auto channelWidth = txVector.GetChannelWidth();
     NS_ASSERT(channelWidth <= m_wifiPhy->GetChannelWidth());
     HeRu::SubcarrierGroup group = HeRu::GetSubcarrierGroup(
         channelWidth,
@@ -997,13 +988,21 @@
         ru.GetPhyIndex(channelWidth, m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(20)));
     // for a TX spectrum, the guard bandwidth is a function of the transmission channel width
     // and the spectrum width equals the transmission channel width (hence bandIndex equals 0)
-    auto indices = ConvertHeRuSubcarriers(channelWidth,
-                                          GetGuardBandwidth(channelWidth),
-                                          m_wifiPhy->GetSubcarrierSpacing(),
-                                          {group.front().first, group.back().second},
-                                          0);
-    auto frequencies = m_wifiPhy->ConvertIndicesToFrequencies(indices);
-    return {indices, frequencies};
+    const auto indices = ConvertHeRuSubcarriers(channelWidth,
+                                                GetGuardBandwidth(channelWidth),
+                                                m_wifiPhy->GetOperatingChannel().GetFrequencies(),
+                                                m_wifiPhy->GetChannelWidth(),
+                                                m_wifiPhy->GetSubcarrierSpacing(),
+                                                {group.front().first, group.back().second},
+                                                0);
+    WifiSpectrumBandInfo ruBandForTx{};
+    for (const auto& indicesPerSegment : indices)
+    {
+        ruBandForTx.indices.emplace_back(indicesPerSegment);
+        ruBandForTx.frequencies.emplace_back(
+            m_wifiPhy->ConvertIndicesToFrequencies(indicesPerSegment));
+    }
+    return ruBandForTx;
 }
 
 WifiSpectrumBandInfo
@@ -1011,7 +1010,7 @@
 {
     NS_ASSERT(txVector.IsMu());
     HeRu::RuSpec ru = txVector.GetRu(staId);
-    uint16_t channelWidth = txVector.GetChannelWidth();
+    const auto channelWidth = txVector.GetChannelWidth();
     NS_ASSERT(channelWidth <= m_wifiPhy->GetChannelWidth());
     HeRu::SubcarrierGroup group = HeRu::GetSubcarrierGroup(
         channelWidth,
@@ -1019,25 +1018,33 @@
         ru.GetPhyIndex(channelWidth, m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(20)));
     // for an RX spectrum, the guard bandwidth is a function of the operating channel width
     // and the spectrum width equals the operating channel width
-    auto indices = ConvertHeRuSubcarriers(
+    const auto indices = ConvertHeRuSubcarriers(
         channelWidth,
         GetGuardBandwidth(m_wifiPhy->GetChannelWidth()),
+        m_wifiPhy->GetOperatingChannel().GetFrequencies(),
+        m_wifiPhy->GetChannelWidth(),
         m_wifiPhy->GetSubcarrierSpacing(),
         {group.front().first, group.back().second},
         m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(channelWidth));
-    auto frequencies = m_wifiPhy->ConvertIndicesToFrequencies(indices);
-    return {indices, frequencies};
+    WifiSpectrumBandInfo ruBandForRx{};
+    for (const auto& indicesPerSegment : indices)
+    {
+        ruBandForRx.indices.emplace_back(indicesPerSegment);
+        ruBandForRx.frequencies.emplace_back(
+            m_wifiPhy->ConvertIndicesToFrequencies(indicesPerSegment));
+    }
+    return ruBandForRx;
 }
 
 WifiSpectrumBandInfo
 HePhy::GetNonOfdmaBand(const WifiTxVector& txVector, uint16_t staId) const
 {
     NS_ASSERT(txVector.IsUlMu() && (txVector.GetModulationClass() >= WIFI_MOD_CLASS_HE));
-    uint16_t channelWidth = txVector.GetChannelWidth();
+    const auto channelWidth = txVector.GetChannelWidth();
     NS_ASSERT(channelWidth <= m_wifiPhy->GetChannelWidth());
 
     HeRu::RuSpec ru = txVector.GetRu(staId);
-    uint16_t nonOfdmaWidth = GetNonOfdmaWidth(ru);
+    const auto nonOfdmaWidth = GetNonOfdmaWidth(ru);
 
     // Find the RU that encompasses the non-OFDMA part of the HE TB PPDU for the STA-ID
     HeRu::RuSpec nonOfdmaRu =
@@ -1048,17 +1055,25 @@
         nonOfdmaRu.GetRuType(),
         nonOfdmaRu.GetPhyIndex(channelWidth,
                                m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(20)));
-    auto indices = ConvertHeRuSubcarriers(
+    const auto indices = ConvertHeRuSubcarriers(
         channelWidth,
         GetGuardBandwidth(m_wifiPhy->GetChannelWidth()),
+        m_wifiPhy->GetOperatingChannel().GetFrequencies(),
+        m_wifiPhy->GetChannelWidth(),
         m_wifiPhy->GetSubcarrierSpacing(),
         {groupPreamble.front().first, groupPreamble.back().second},
         m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(channelWidth));
-    auto frequencies = m_wifiPhy->ConvertIndicesToFrequencies(indices);
-    return {indices, frequencies};
+    WifiSpectrumBandInfo nonOfdmaBand{};
+    for (const auto& indicesPerSegment : indices)
+    {
+        nonOfdmaBand.indices.emplace_back(indicesPerSegment);
+        nonOfdmaBand.frequencies.emplace_back(
+            m_wifiPhy->ConvertIndicesToFrequencies(indicesPerSegment));
+    }
+    return nonOfdmaBand;
 }
 
-uint16_t
+MHz_u
 HePhy::GetNonOfdmaWidth(HeRu::RuSpec ru) const
 {
     if (ru.GetRuType() == HeRu::RU_26_TONE && ru.GetIndex() == 19)
@@ -1067,7 +1082,7 @@
         // any 20 MHz channel, but only by an 80 MHz channel
         return 80;
     }
-    return std::max<uint16_t>(HeRu::GetBandwidth(ru.GetRuType()), 20);
+    return std::max<MHz_u>(HeRu::GetBandwidth(ru.GetRuType()), 20);
 }
 
 uint64_t
@@ -1076,10 +1091,10 @@
     return m_currentMuPpduUid;
 }
 
-uint16_t
+MHz_u
 HePhy::GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const
 {
-    uint16_t channelWidth = OfdmPhy::GetMeasurementChannelWidth(ppdu);
+    auto channelWidth = OfdmPhy::GetMeasurementChannelWidth(ppdu);
     /**
      * The PHY shall not issue a PHY-RXSTART.indication primitive in response to a PPDU that does
      * not overlap the primary channel unless the PHY at an AP receives the HE TB PPDU solicited by
@@ -1094,7 +1109,7 @@
     return channelWidth;
 }
 
-double
+dBm_u
 HePhy::GetCcaThreshold(const Ptr<const WifiPpdu> ppdu, WifiChannelListType channelType) const
 {
     if (!ppdu)
@@ -1112,9 +1127,9 @@
         return VhtPhy::GetCcaThreshold(ppdu, channelType);
     }
 
-    const uint16_t ppduBw = ppdu->GetTxVector().GetChannelWidth();
-    double obssPdLevel = m_obssPdAlgorithm->GetObssPdLevel();
-    uint16_t bw = ppduBw;
+    const auto ppduBw = ppdu->GetTxVector().GetChannelWidth();
+    auto obssPdLevel = m_obssPdAlgorithm->GetObssPdLevel();
+    auto bw = ppduBw;
     while (bw > 20)
     {
         obssPdLevel += 3;
@@ -1200,15 +1215,15 @@
          * aCCATime after the signal starts and shall continue to indicate the 20 MHz subchannel is
          * busy while the threshold continues to be exceeded.
          */
-        double ccaThresholdDbm = -62;
-        Time delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThresholdDbm, band);
+        dBm_u ccaThreshold = -62;
+        auto delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, band);
 
         if (ppdu)
         {
-            const uint16_t subchannelMinFreq =
+            const MHz_u subchannelMinFreq =
                 m_wifiPhy->GetFrequency() - (m_wifiPhy->GetChannelWidth() / 2) + (index * 20);
-            const uint16_t subchannelMaxFreq = subchannelMinFreq + 20;
-            const uint16_t ppduBw = ppdu->GetTxVector().GetChannelWidth();
+            const MHz_u subchannelMaxFreq = subchannelMinFreq + 20;
+            const auto ppduBw = ppdu->GetTxVector().GetChannelWidth();
 
             if (ppduBw <= m_wifiPhy->GetChannelWidth() &&
                 ppdu->DoesOverlapChannel(subchannelMinFreq, subchannelMaxFreq))
@@ -1218,7 +1233,7 @@
                 {
                     obssPdLevel = m_obssPdAlgorithm->GetObssPdLevel();
                 }
-                switch (ppduBw)
+                switch (static_cast<uint16_t>(ppduBw))
                 {
                 case 20:
                 case 22:
@@ -1228,7 +1243,7 @@
                      * The PHY shall indicate that the 20 MHz subchannel is busy with > 90%
                      * probability within a period aCCAMidTime.
                      */
-                    ccaThresholdDbm =
+                    ccaThreshold =
                         obssPdLevel.has_value() ? std::max(-72.0, obssPdLevel.value()) : -72.0;
                     band = m_wifiPhy->GetBand(20, index);
                     break;
@@ -1239,7 +1254,7 @@
                      * the receiver's antenna(s) is present. The PHY shall indicate that the 20 MHz
                      * subchannel is busy with > 90% probability within a period aCCAMidTime.
                      */
-                    ccaThresholdDbm =
+                    ccaThreshold =
                         obssPdLevel.has_value() ? std::max(-72.0, obssPdLevel.value() + 3) : -72.0;
                     band = m_wifiPhy->GetBand(40, std::floor(index / 2));
                     break;
@@ -1250,7 +1265,7 @@
                      * receiver's antenna(s) is present. The PHY shall indicate that the 20 MHz
                      * subchannel is busy with > 90% probability within a period aCCAMidTime.
                      */
-                    ccaThresholdDbm =
+                    ccaThreshold =
                         obssPdLevel.has_value() ? std::max(-69.0, obssPdLevel.value() + 6) : -69.0;
                     band = m_wifiPhy->GetBand(80, std::floor(index / 4));
                     break;
@@ -1261,7 +1276,7 @@
                     NS_ASSERT_MSG(false, "Invalid channel width: " << ppduBw);
                 }
             }
-            Time ppduCcaDuration = GetDelayUntilCcaEnd(ccaThresholdDbm, band);
+            const auto ppduCcaDuration = GetDelayUntilCcaEnd(ccaThreshold, band);
             delayUntilCcaEnd = std::max(delayUntilCcaEnd, ppduCcaDuration);
         }
         per20MhzDurations.push_back(delayUntilCcaEnd);
@@ -1310,23 +1325,32 @@
 }
 
 Ptr<SpectrumValue>
-HePhy::GetTxPowerSpectralDensity(double txPowerW, Ptr<const WifiPpdu> ppdu) const
+HePhy::GetTxPowerSpectralDensity(Watt_u txPower, Ptr<const WifiPpdu> ppdu) const
 {
     auto hePpdu = DynamicCast<const HePpdu>(ppdu);
     NS_ASSERT(hePpdu);
     HePpdu::TxPsdFlag flag = hePpdu->GetTxPsdFlag();
-    return GetTxPowerSpectralDensity(txPowerW, ppdu, flag);
+    return GetTxPowerSpectralDensity(txPower, ppdu, flag);
 }
 
 Ptr<SpectrumValue>
-HePhy::GetTxPowerSpectralDensity(double txPowerW,
+HePhy::GetTxPowerSpectralDensity(Watt_u txPower,
                                  Ptr<const WifiPpdu> ppdu,
                                  HePpdu::TxPsdFlag flag) const
 {
     const auto& txVector = ppdu->GetTxVector();
-    uint16_t centerFrequency = GetCenterFrequencyForChannelWidth(txVector);
-    uint16_t channelWidth = txVector.GetChannelWidth();
-    NS_LOG_FUNCTION(this << centerFrequency << channelWidth << txPowerW << txVector);
+    const auto& centerFrequencies = ppdu->GetTxCenterFreqs();
+    auto channelWidth = txVector.GetChannelWidth();
+    auto printFrequencies = [](const std::vector<MHz_u>& v) {
+        std::stringstream ss;
+        for (const auto& centerFrequency : v)
+        {
+            ss << centerFrequency << " ";
+        }
+        return ss.str();
+    };
+    NS_LOG_FUNCTION(this << printFrequencies(centerFrequencies) << channelWidth << txPower
+                         << txVector);
     const auto& puncturedSubchannels = txVector.GetInactiveSubchannels();
     if (!puncturedSubchannels.empty())
     {
@@ -1344,14 +1368,13 @@
         if (flag == HePpdu::PSD_NON_HE_PORTION)
         {
             // non-HE portion is sent only on the 20 MHz channels covering the RU
-            const uint16_t staId = GetStaId(ppdu);
-            centerFrequency = GetCenterFrequencyForNonHePart(txVector, staId);
-            const uint16_t ruWidth = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
+            const auto staId = GetStaId(ppdu);
+            const auto ruWidth = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
             channelWidth = (ruWidth < 20) ? 20 : ruWidth;
             return WifiSpectrumValueHelper::CreateDuplicated20MhzTxPowerSpectralDensity(
-                centerFrequency,
+                GetCenterFrequenciesForNonHePart(ppdu, staId),
                 channelWidth,
-                txPowerW,
+                txPower,
                 GetGuardBandwidth(channelWidth),
                 std::get<0>(txMaskRejectionParams),
                 std::get<1>(txMaskRejectionParams),
@@ -1362,9 +1385,9 @@
         {
             const auto band = GetRuBandForTx(txVector, GetStaId(ppdu)).indices;
             return WifiSpectrumValueHelper::CreateHeMuOfdmTxPowerSpectralDensity(
-                centerFrequency,
+                centerFrequencies,
                 channelWidth,
-                txPowerW,
+                txPower,
                 GetGuardBandwidth(channelWidth),
                 band);
         }
@@ -1373,9 +1396,9 @@
         if (flag == HePpdu::PSD_NON_HE_PORTION)
         {
             return WifiSpectrumValueHelper::CreateDuplicated20MhzTxPowerSpectralDensity(
-                centerFrequency,
+                centerFrequencies,
                 channelWidth,
-                txPowerW,
+                txPower,
                 GetGuardBandwidth(channelWidth),
                 std::get<0>(txMaskRejectionParams),
                 std::get<1>(txMaskRejectionParams),
@@ -1385,9 +1408,9 @@
         else
         {
             return WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(
-                centerFrequency,
+                centerFrequencies,
                 channelWidth,
-                txPowerW,
+                txPower,
                 GetGuardBandwidth(channelWidth),
                 std::get<0>(txMaskRejectionParams),
                 std::get<1>(txMaskRejectionParams),
@@ -1399,9 +1422,9 @@
     default: {
         NS_ASSERT(puncturedSubchannels.empty());
         return WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(
-            centerFrequency,
+            centerFrequencies,
             channelWidth,
-            txPowerW,
+            txPower,
             GetGuardBandwidth(channelWidth),
             std::get<0>(txMaskRejectionParams),
             std::get<1>(txMaskRejectionParams),
@@ -1410,24 +1433,25 @@
     }
 }
 
-uint16_t
-HePhy::GetCenterFrequencyForNonHePart(const WifiTxVector& txVector, uint16_t staId) const
+std::vector<MHz_u>
+HePhy::GetCenterFrequenciesForNonHePart(Ptr<const WifiPpdu> ppdu, uint16_t staId) const
 {
-    NS_LOG_FUNCTION(this << txVector << staId);
+    NS_LOG_FUNCTION(this << ppdu << staId);
+    const auto& txVector = ppdu->GetTxVector();
     NS_ASSERT(txVector.IsUlMu() && (txVector.GetModulationClass() >= WIFI_MOD_CLASS_HE));
-    uint16_t centerFrequency = GetCenterFrequencyForChannelWidth(txVector);
-    uint16_t currentWidth = txVector.GetChannelWidth();
+    auto centerFrequencies = ppdu->GetTxCenterFreqs();
+    const auto currentWidth = txVector.GetChannelWidth();
 
     HeRu::RuSpec ru = txVector.GetRu(staId);
-    uint16_t nonOfdmaWidth = GetNonOfdmaWidth(ru);
+    const auto nonOfdmaWidth = GetNonOfdmaWidth(ru);
     if (nonOfdmaWidth != currentWidth)
     {
         // Obtain the index of the non-OFDMA portion
         HeRu::RuSpec nonOfdmaRu =
             HeRu::FindOverlappingRu(currentWidth, ru, HeRu::GetRuType(nonOfdmaWidth));
 
-        uint16_t startingFrequency = centerFrequency - (currentWidth / 2);
-        centerFrequency =
+        const MHz_u startingFrequency = centerFrequencies.front() - (currentWidth / 2);
+        centerFrequencies.front() =
             startingFrequency +
             nonOfdmaWidth * (nonOfdmaRu.GetPhyIndex(
                                  currentWidth,
@@ -1435,7 +1459,7 @@
                              1) +
             nonOfdmaWidth / 2;
     }
-    return centerFrequency;
+    return centerFrequencies;
 }
 
 void
@@ -1449,14 +1473,14 @@
     }
     if (ppdu->GetType() == WIFI_PPDU_TYPE_UL_MU || ppdu->GetType() == WIFI_PPDU_TYPE_DL_MU)
     {
-        auto nonHeTxPowerDbm = m_wifiPhy->GetTxPowerForTransmission(ppdu) + m_wifiPhy->GetTxGain();
+        dBm_u nonHeTxPower = m_wifiPhy->GetTxPowerForTransmission(ppdu) + m_wifiPhy->GetTxGain();
 
         // temporarily set WifiPpdu flag to PSD_HE_PORTION for correct calculation of TX power for
         // the HE portion
         auto hePpdu = DynamicCast<const HePpdu>(ppdu);
         NS_ASSERT(hePpdu);
         hePpdu->SetTxPsdFlag(HePpdu::PSD_HE_PORTION);
-        auto heTxPowerDbm = m_wifiPhy->GetTxPowerForTransmission(ppdu) + m_wifiPhy->GetTxGain();
+        dBm_u heTxPower = m_wifiPhy->GetTxPowerForTransmission(ppdu) + m_wifiPhy->GetTxGain();
         hePpdu->SetTxPsdFlag(HePpdu::PSD_NON_HE_PORTION);
 
         // non-HE portion
@@ -1464,22 +1488,22 @@
                                         ? CalculateNonHeDurationForHeTb(txVector)
                                         : CalculateNonHeDurationForHeMu(txVector);
         auto nonHeTxPowerSpectrum =
-            GetTxPowerSpectralDensity(DbmToW(nonHeTxPowerDbm), ppdu, HePpdu::PSD_NON_HE_PORTION);
+            GetTxPowerSpectralDensity(DbmToW(nonHeTxPower), ppdu, HePpdu::PSD_NON_HE_PORTION);
         Transmit(nonHePortionDuration,
                  ppdu,
-                 nonHeTxPowerDbm,
+                 nonHeTxPower,
                  nonHeTxPowerSpectrum,
                  "non-HE portion transmission");
 
         // HE portion
         auto hePortionDuration = ppdu->GetTxDuration() - nonHePortionDuration;
         auto heTxPowerSpectrum =
-            GetTxPowerSpectralDensity(DbmToW(heTxPowerDbm), ppdu, HePpdu::PSD_HE_PORTION);
+            GetTxPowerSpectralDensity(DbmToW(heTxPower), ppdu, HePpdu::PSD_HE_PORTION);
         Simulator::Schedule(nonHePortionDuration,
                             &HePhy::StartTxHePortion,
                             this,
                             ppdu,
-                            heTxPowerDbm,
+                            heTxPower,
                             heTxPowerSpectrum,
                             hePortionDuration);
     }
@@ -1491,19 +1515,19 @@
 
 void
 HePhy::StartTxHePortion(Ptr<const WifiPpdu> ppdu,
-                        double txPowerDbm,
+                        dBm_u txPower,
                         Ptr<SpectrumValue> txPowerSpectrum,
                         Time hePortionDuration)
 {
-    NS_LOG_FUNCTION(this << ppdu << txPowerDbm << hePortionDuration);
+    NS_LOG_FUNCTION(this << ppdu << txPower << hePortionDuration);
     auto hePpdu = DynamicCast<const HePpdu>(ppdu);
     NS_ASSERT(hePpdu);
     hePpdu->SetTxPsdFlag(HePpdu::PSD_HE_PORTION);
-    Transmit(hePortionDuration, ppdu, txPowerDbm, txPowerSpectrum, "HE portion transmission");
+    Transmit(hePortionDuration, ppdu, txPower, txPowerSpectrum, "HE portion transmission");
 }
 
 Time
-HePhy::CalculateTxDuration(WifiConstPsduMap psduMap,
+HePhy::CalculateTxDuration(const WifiConstPsduMap& psduMap,
                            const WifiTxVector& txVector,
                            WifiPhyBand band) const
 {
@@ -1638,17 +1662,17 @@
 }
 
 uint64_t
-HePhy::GetPhyRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
+HePhy::GetPhyRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
 {
-    WifiCodeRate codeRate = GetCodeRate(mcsValue);
-    uint64_t dataRate = GetDataRate(mcsValue, channelWidth, guardInterval, nss);
+    const auto codeRate = GetCodeRate(mcsValue);
+    const auto dataRate = GetDataRate(mcsValue, channelWidth, guardInterval, nss);
     return HtPhy::CalculatePhyRate(codeRate, dataRate);
 }
 
 uint64_t
 HePhy::GetPhyRateFromTxVector(const WifiTxVector& txVector, uint16_t staId /* = SU_STA_ID */)
 {
-    uint16_t bw = txVector.GetChannelWidth();
+    auto bw = txVector.GetChannelWidth();
     if (txVector.IsMu())
     {
         bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
@@ -1662,7 +1686,7 @@
 uint64_t
 HePhy::GetDataRateFromTxVector(const WifiTxVector& txVector, uint16_t staId /* = SU_STA_ID */)
 {
-    uint16_t bw = txVector.GetChannelWidth();
+    auto bw = txVector.GetChannelWidth();
     if (txVector.IsMu())
     {
         bw = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
@@ -1674,11 +1698,12 @@
 }
 
 uint64_t
-HePhy::GetDataRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
+HePhy::GetDataRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
 {
-    NS_ASSERT(guardInterval == 800 || guardInterval == 1600 || guardInterval == 3200);
+    [[maybe_unused]] const auto gi = guardInterval.GetNanoSeconds();
+    NS_ASSERT((gi == 800) || (gi == 1600) || (gi == 3200));
     NS_ASSERT(nss <= 8);
-    return HtPhy::CalculateDataRate(GetSymbolDuration(NanoSeconds(guardInterval)),
+    return HtPhy::CalculateDataRate(GetSymbolDuration(guardInterval),
                                     GetUsableSubcarriers(channelWidth),
                                     static_cast<uint16_t>(log2(GetConstellationSize(mcsValue))),
                                     HtPhy::GetCodeRatio(GetCodeRate(mcsValue)),
@@ -1686,9 +1711,9 @@
 }
 
 uint16_t
-HePhy::GetUsableSubcarriers(uint16_t channelWidth)
+HePhy::GetUsableSubcarriers(MHz_u channelWidth)
 {
-    switch (channelWidth)
+    switch (static_cast<uint16_t>(channelWidth))
     {
     case 2: // 26-tone RU
         return 24;
@@ -1717,8 +1742,8 @@
 uint64_t
 HePhy::GetNonHtReferenceRate(uint8_t mcsValue)
 {
-    WifiCodeRate codeRate = GetCodeRate(mcsValue);
-    uint16_t constellationSize = GetConstellationSize(mcsValue);
+    const auto codeRate = GetCodeRate(mcsValue);
+    const auto constellationSize = GetConstellationSize(mcsValue);
     return CalculateNonHtReferenceRate(codeRate, constellationSize);
 }
 
@@ -1816,18 +1841,29 @@
     return VhtPhy::GetRxPpduFromTxPpdu(ppdu);
 }
 
-WifiSpectrumBandIndices
-HePhy::ConvertHeRuSubcarriers(uint16_t bandWidth,
-                              uint16_t guardBandwidth,
-                              uint32_t subcarrierSpacing,
+std::vector<WifiSpectrumBandIndices>
+HePhy::ConvertHeRuSubcarriers(MHz_u bandWidth,
+                              MHz_u guardBandwidth,
+                              const std::vector<MHz_u>& centerFrequencies,
+                              MHz_u totalWidth,
+                              Hz_u subcarrierSpacing,
                               HeRu::SubcarrierRange subcarrierRange,
                               uint8_t bandIndex)
 {
-    WifiSpectrumBandIndices convertedSubcarriers;
-    auto nGuardBands =
+    NS_ASSERT_MSG(bandWidth <= totalWidth,
+                  "Bandwidth (" << bandWidth << ") cannot exceed total operating channel width ("
+                                << totalWidth << ")");
+    std::vector<WifiSpectrumBandIndices> convertedSubcarriers{};
+    guardBandwidth /= centerFrequencies.size();
+    const auto nGuardBands =
         static_cast<uint32_t>(((2 * guardBandwidth * 1e6) / subcarrierSpacing) + 0.5);
+    if (bandWidth > (totalWidth / centerFrequencies.size()))
+    {
+        NS_ASSERT(bandIndex == 0);
+        bandWidth /= centerFrequencies.size();
+    }
     uint32_t centerFrequencyIndex = 0;
-    switch (bandWidth)
+    switch (static_cast<uint16_t>(bandWidth))
     {
     case 20:
         centerFrequencyIndex = (nGuardBands / 2) + 6 + 122;
@@ -1846,11 +1882,30 @@
         break;
     }
 
-    auto numBandsInBand = static_cast<size_t>(bandWidth * 1e6 / subcarrierSpacing);
+    const auto numBandsInBand = static_cast<size_t>(bandWidth * 1e6 / subcarrierSpacing);
     centerFrequencyIndex += numBandsInBand * bandIndex;
-
-    convertedSubcarriers.first = centerFrequencyIndex + subcarrierRange.first;
-    convertedSubcarriers.second = centerFrequencyIndex + subcarrierRange.second;
+    // start and stop subcarriers might be in different frequency segments, hence define a low and a
+    // high center frequency
+    auto centerFrequencyIndexLow = centerFrequencyIndex;
+    auto centerFrequencyIndexHigh = centerFrequencyIndex;
+    if (centerFrequencies.size() > 1)
+    {
+        const auto numBandsBetweenSegments =
+            SpectrumWifiPhy::GetNumBandsBetweenSegments(centerFrequencies,
+                                                        totalWidth,
+                                                        subcarrierSpacing);
+        if (subcarrierRange.first > 0)
+        {
+            centerFrequencyIndexLow += numBandsBetweenSegments;
+        }
+        if (subcarrierRange.second > 0)
+        {
+            centerFrequencyIndexHigh += numBandsBetweenSegments;
+        }
+    }
+    convertedSubcarriers.emplace_back(centerFrequencyIndexLow + subcarrierRange.first,
+                                      centerFrequencyIndexHigh + subcarrierRange.second);
+    ++bandIndex;
     return convertedSubcarriers;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-phy.h ns-3.43/src/wifi/model/he/he-phy.h
--- ns-3.42/src/wifi/model/he/he-phy.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-phy.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy and
@@ -27,6 +16,7 @@
 #include "ns3/callback.h"
 #include "ns3/vht-phy.h"
 #include "ns3/wifi-phy-band.h"
+#include "ns3/wifi-types.h"
 
 #include <optional>
 
@@ -52,7 +42,7 @@
  */
 struct HeSigAParameters
 {
-    double rssiW;     ///< RSSI in W
+    dBm_u rssi;       ///< RSSI
     uint8_t bssColor; ///< BSS color
 };
 
@@ -105,14 +95,14 @@
                               Time rxDuration) override;
     void CancelAllEvents() override;
     uint16_t GetStaId(const Ptr<const WifiPpdu> ppdu) const override;
-    uint16_t GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const override;
+    MHz_u GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const override;
     void StartTx(Ptr<const WifiPpdu> ppdu) override;
-    Time CalculateTxDuration(WifiConstPsduMap psduMap,
+    Time CalculateTxDuration(const WifiConstPsduMap& psduMap,
                              const WifiTxVector& txVector,
                              WifiPhyBand band) const override;
     void SwitchMaybeToCcaBusy(const Ptr<const WifiPpdu> ppdu) override;
-    double GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
-                           WifiChannelListType channelType) const override;
+    dBm_u GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
+                          WifiChannelListType channelType) const override;
     void NotifyCcaBusy(const Ptr<const WifiPpdu> ppdu,
                        Time duration,
                        WifiChannelListType channelType) override;
@@ -193,12 +183,12 @@
      */
     WifiSpectrumBandInfo GetNonOfdmaBand(const WifiTxVector& txVector, uint16_t staId) const;
     /**
-     * Get the width in MHz of the non-OFDMA portion of an HE TB PPDU
+     * Get the width of the non-OFDMA portion of an HE TB PPDU
      *
      * \param ru the RU in which the HE TB PPDU is sent
-     * \return the width in MHz of the non-OFDMA portion of an HE TB PPDU
+     * \return the width of the non-OFDMA portion of an HE TB PPDU
      */
-    uint16_t GetNonOfdmaWidth(HeRu::RuSpec ru) const;
+    MHz_u GetNonOfdmaWidth(HeRu::RuSpec ru) const;
 
     /**
      * \return the UID of the HE TB PPDU being received
@@ -215,15 +205,15 @@
     void SetTrigVector(const WifiTxVector& trigVector, Time validity);
 
     /**
-     * Get the center frequency of the non-HE portion of the current TxVector for the
-     * given STA-ID.
-     * Note this method is only to be used for UL MU.
+     * Get the center frequency per segment of the non-HE portion of the current PPDU for the given
+     * STA-ID. Note this method is only to be used for UL MU.
      *
-     * \param txVector the TXVECTOR that has the RU allocation
+     * \param ppdu the PPDU
      * \param staId the STA-ID of the station taking part of the UL MU
-     * \return the center frequency in MHz corresponding to the non-HE portion of the HE TB PPDU
+     * \return the center frequency corresponding to the non-HE portion of the HE TB PPDU
      */
-    uint16_t GetCenterFrequencyForNonHePart(const WifiTxVector& txVector, uint16_t staId) const;
+    std::vector<MHz_u> GetCenterFrequenciesForNonHePart(const Ptr<const WifiPpdu> ppdu,
+                                                        uint16_t staId) const;
 
     /**
      * Sets the OBSS-PD algorithm.
@@ -366,15 +356,15 @@
      * and is mainly used as a callback for WifiMode operation.
      *
      * \param mcsValue the HE MCS index
-     * \param channelWidth the considered channel width in MHz
-     * \param guardInterval the considered guard interval duration in nanoseconds
+     * \param channelWidth the considered channel width
+     * \param guardInterval the considered guard interval duration
      * \param nss the considered number of stream
      *
      * \return the physical bit rate of this signal in bps.
      */
     static uint64_t GetPhyRate(uint8_t mcsValue,
-                               uint16_t channelWidth,
-                               uint16_t guardInterval,
+                               MHz_u channelWidth,
+                               Time guardInterval,
                                uint8_t nss);
     /**
      * Return the PHY rate corresponding to
@@ -403,14 +393,14 @@
      * streams.
      *
      * \param mcsValue the MCS index
-     * \param channelWidth the channel width in MHz
-     * \param guardInterval the guard interval duration in nanoseconds
+     * \param channelWidth the channel width
+     * \param guardInterval the guard interval duration
      * \param nss the number of spatial streams
      * \return the data bit rate in bps.
      */
     static uint64_t GetDataRate(uint8_t mcsValue,
-                                uint16_t channelWidth,
-                                uint16_t guardInterval,
+                                MHz_u channelWidth,
+                                Time guardInterval,
                                 uint8_t nss);
     /**
      * Calculate the rate in bps of the non-HT Reference Rate corresponding
@@ -441,22 +431,34 @@
     static WifiMode CreateHeMcs(uint8_t index);
 
     /**
-     * \param bandWidth the width (MHz) of the band used for the OFDMA transmission. Must be
-     *                  a multiple of 20 MHz
-     * \param guardBandwidth width of the guard band (MHz)
-     * \param subcarrierSpacing the subcarrier spacing (MHz)
+     * \param guardInterval the guard interval duration
+     * \return the symbol duration
+     */
+    static Time GetSymbolDuration(Time guardInterval);
+
+    /**
+     * \param bandWidth the width of the band used for the OFDMA transmission. Must be a multiple of
+     * 20 MHz
+     * \param guardBandwidth width of the guard band
+     * \param centerFrequencies the center frequency of each segment
+     * \param totalWidth the width of the operating channel
+     * \param subcarrierSpacing the subcarrier spacing
      * \param subcarrierRange the subcarrier range of the HE RU
      * \param bandIndex the index (starting at 0) of the band within the operating channel
      * \return the converted subcarriers
      *
      * This is a helper function to convert HE RU subcarriers, which are relative to the center
-     * frequency subcarrier, to the indexes used by the Spectrum model.
+     * frequency subcarrier, to the indexes used by the Spectrum model. The size of the returned
+     * vector corresponds to the number of segments covered by the HE RU.
      */
-    static WifiSpectrumBandIndices ConvertHeRuSubcarriers(uint16_t bandWidth,
-                                                          uint16_t guardBandwidth,
-                                                          uint32_t subcarrierSpacing,
-                                                          HeRu::SubcarrierRange subcarrierRange,
-                                                          uint8_t bandIndex = 0);
+    static std::vector<WifiSpectrumBandIndices> ConvertHeRuSubcarriers(
+        MHz_u bandWidth,
+        MHz_u guardBandwidth,
+        const std::vector<MHz_u>& centerFrequencies,
+        MHz_u totalWidth,
+        Hz_u subcarrierSpacing,
+        HeRu::SubcarrierRange subcarrierRange,
+        uint8_t bandIndex = 0);
 
   protected:
     PhyFieldRxStatus ProcessSig(Ptr<Event> event,
@@ -465,8 +467,8 @@
     Ptr<Event> DoGetEvent(Ptr<const WifiPpdu> ppdu, RxPowerWattPerChannelBand& rxPowersW) override;
     bool IsConfigSupported(Ptr<const WifiPpdu> ppdu) const override;
     Time DoStartReceivePayload(Ptr<Event> event) override;
-    std::pair<uint16_t, WifiSpectrumBandInfo> GetChannelWidthAndBand(const WifiTxVector& txVector,
-                                                                     uint16_t staId) const override;
+    std::pair<MHz_u, WifiSpectrumBandInfo> GetChannelWidthAndBand(const WifiTxVector& txVector,
+                                                                  uint16_t staId) const override;
     void RxPayloadSucceeded(Ptr<const WifiPsdu> psdu,
                             RxSignalInfo rxSignalInfo,
                             const WifiTxVector& txVector,
@@ -480,7 +482,7 @@
     void DoAbortCurrentReception(WifiPhyRxfailureReason reason) override;
     uint64_t ObtainNextUid(const WifiTxVector& txVector) override;
     Time GetMaxDelayPpduSameUid(const WifiTxVector& txVector) override;
-    Ptr<SpectrumValue> GetTxPowerSpectralDensity(double txPowerW,
+    Ptr<SpectrumValue> GetTxPowerSpectralDensity(Watt_u txPower,
                                                  Ptr<const WifiPpdu> ppdu) const override;
     uint32_t GetMaxPsduSize() const override;
     WifiConstPsduMap GetWifiConstPsduMap(Ptr<const WifiPsdu> psdu,
@@ -542,16 +544,10 @@
     static uint64_t CalculateNonHtReferenceRate(WifiCodeRate codeRate, uint16_t constellationSize);
 
     /**
-     * \param channelWidth the channel width in MHz
+     * \param channelWidth the channel width
      * \return the number of usable subcarriers for data
      */
-    static uint16_t GetUsableSubcarriers(uint16_t channelWidth);
-
-    /**
-     * \param guardInterval the guard interval duration
-     * \return the symbol duration
-     */
-    static Time GetSymbolDuration(Time guardInterval);
+    static uint16_t GetUsableSubcarriers(MHz_u channelWidth);
 
     uint64_t m_previouslyTxPpduUid; //!< UID of the previously sent PPDU, used by AP to recognize
                                     //!< response HE TB PPDUs
@@ -575,12 +571,12 @@
     /**
      * This is a helper function to create the TX PSD of the non-HE and HE portions.
      *
-     * \param txPowerW power in W to spread across the bands
+     * \param txPower power to spread across the bands
      * \param ppdu the PPDU that will be transmitted
      * \param flag flag indicating whether the PSD is for non-HE portion or HE portion
      * \return Pointer to SpectrumValue
      */
-    Ptr<SpectrumValue> GetTxPowerSpectralDensity(double txPowerW,
+    Ptr<SpectrumValue> GetTxPowerSpectralDensity(Watt_u txPower,
                                                  Ptr<const WifiPpdu> ppdu,
                                                  HePpdu::TxPsdFlag flag) const;
 
@@ -588,12 +584,12 @@
      * Start the transmission of the HE portion of the MU PPDU.
      *
      * \param ppdu the PPDU
-     * \param txPowerDbm the total TX power in dBm
+     * \param txPower the total TX power
      * \param txPowerSpectrum the TX PSD
      * \param hePortionDuration the duration of the HE portion
      */
     void StartTxHePortion(Ptr<const WifiPpdu> ppdu,
-                          double txPowerDbm,
+                          dBm_u txPower,
                           Ptr<SpectrumValue> txPowerSpectrum,
                           Time hePortionDuration);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-ppdu.cc ns-3.43/src/wifi/model/he/he-ppdu.cc
--- ns-3.42/src/wifi/model/he/he-ppdu.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-ppdu.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
@@ -280,7 +269,7 @@
             }
             const auto ruBw = HeRu::GetBandwidth(ruType);
             auto primary80 = ruAllocIndex < 4;
-            auto num20MhzSubchannelsInRu = (ruBw < 20) ? 1 : (ruBw / 20);
+            const uint8_t num20MhzSubchannelsInRu = (ruBw < 20) ? 1 : (ruBw / 20);
             auto numRuAllocsInContentChannel = std::max(1, num20MhzSubchannelsInRu / 2);
             auto ruIndexOffset = (ruBw < 20) ? (ruSpecs.size() * ruAllocIndex)
                                              : (ruAllocIndex / num20MhzSubchannelsInRu);
@@ -316,7 +305,7 @@
     Time ppduDuration = Seconds(0);
     const auto& txVector = GetTxVector();
     const auto length = m_lSig.GetLength();
-    const auto tSymbol = NanoSeconds(12800 + txVector.GetGuardInterval());
+    const auto tSymbol = HePhy::GetSymbolDuration(txVector.GetGuardInterval());
     const auto preambleDuration = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
     NS_ASSERT(m_operatingChannel.IsSet());
     uint8_t sigExtension = (m_operatingChannel.GetPhyBand() == WIFI_PHY_BAND_2_4GHZ) ? 6 : 0;
@@ -414,15 +403,15 @@
     return m_psdus.begin()->first;
 }
 
-uint16_t
+MHz_u
 HePpdu::GetTxChannelWidth() const
 {
     if (const auto& txVector = GetTxVector();
         txVector.IsValid() && txVector.IsUlMu() && GetStaId() != SU_STA_ID)
     {
         TxPsdFlag flag = GetTxPsdFlag();
-        uint16_t ruWidth = HeRu::GetBandwidth(txVector.GetRu(GetStaId()).GetRuType());
-        uint16_t channelWidth = (flag == PSD_NON_HE_PORTION && ruWidth < 20) ? 20 : ruWidth;
+        const auto ruWidth = HeRu::GetBandwidth(txVector.GetRu(GetStaId()).GetRuType());
+        MHz_u channelWidth = (flag == PSD_NON_HE_PORTION && ruWidth < 20) ? 20 : ruWidth;
         NS_LOG_INFO("Use channelWidth=" << channelWidth << " MHz for HE TB from " << GetStaId()
                                         << " for " << flag);
         return channelWidth;
@@ -483,7 +472,7 @@
 }
 
 std::pair<std::size_t, std::size_t>
-HePpdu::GetNumRusPerHeSigBContentChannel(uint16_t channelWidth,
+HePpdu::GetNumRusPerHeSigBContentChannel(MHz_u channelWidth,
                                          const RuAllocation& ruAllocation,
                                          bool sigBCompression,
                                          uint8_t numMuMimoUsers)
@@ -511,10 +500,11 @@
     }
 
     NS_ASSERT_MSG(!ruAllocation.empty(), "RU allocation is not set");
-    NS_ASSERT_MSG(ruAllocation.size() == channelWidth / 20,
+    [[maybe_unused]] const std::size_t num20MhzSubchannels = channelWidth / 20;
+    NS_ASSERT_MSG(ruAllocation.size() == num20MhzSubchannels,
                   "RU allocation is not consistent with packet bandwidth");
 
-    switch (channelWidth)
+    switch (static_cast<uint16_t>(channelWidth))
     {
     case 40:
         chSize.second += HeRu::GetRuSpecs(ruAllocation[1]).size();
@@ -636,7 +626,7 @@
 }
 
 uint32_t
-HePpdu::GetSigBFieldSize(uint16_t channelWidth,
+HePpdu::GetSigBFieldSize(MHz_u channelWidth,
                          const RuAllocation& ruAllocation,
                          bool sigBCompression,
                          std::size_t numMuMimoUsers)
@@ -692,7 +682,7 @@
 }
 
 uint8_t
-HePpdu::GetChannelWidthEncodingFromMhz(uint16_t channelWidth)
+HePpdu::GetChannelWidthEncodingFromMhz(MHz_u channelWidth)
 {
     if (channelWidth == 160)
     {
@@ -712,7 +702,7 @@
     }
 }
 
-uint16_t
+MHz_u
 HePpdu::GetChannelWidthMhzFromEncoding(uint8_t bandwidth)
 {
     if (bandwidth == 3)
@@ -734,17 +724,18 @@
 }
 
 uint8_t
-HePpdu::GetGuardIntervalAndNltfEncoding(uint16_t gi, uint8_t nltf)
+HePpdu::GetGuardIntervalAndNltfEncoding(Time guardInterval, uint8_t nltf)
 {
-    if (gi == 800 && nltf == 1)
+    const auto gi = guardInterval.GetNanoSeconds();
+    if ((gi == 800) && (nltf == 1))
     {
         return 0;
     }
-    else if (gi == 800 && nltf == 2)
+    else if ((gi == 800) && (nltf == 2))
     {
         return 1;
     }
-    else if (gi == 1600 && nltf == 2)
+    else if ((gi == 1600) && (nltf == 2))
     {
         return 2;
     }
@@ -754,21 +745,21 @@
     }
 }
 
-uint16_t
+Time
 HePpdu::GetGuardIntervalFromEncoding(uint8_t giAndNltfSize)
 {
     if (giAndNltfSize == 3)
     {
         // we currently do not consider DCM nor STBC fields
-        return 3200;
+        return NanoSeconds(3200);
     }
     else if (giAndNltfSize == 2)
     {
-        return 1600;
+        return NanoSeconds(1600);
     }
     else
     {
-        return 800;
+        return NanoSeconds(800);
     }
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-ppdu.h ns-3.43/src/wifi/model/he/he-ppdu.h
--- ns-3.42/src/wifi/model/he/he-ppdu.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-ppdu.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
@@ -154,7 +143,7 @@
     Ptr<WifiPpdu> Copy() const override;
     WifiPpduType GetType() const override;
     uint16_t GetStaId() const override;
-    uint16_t GetTxChannelWidth() const override;
+    MHz_u GetTxChannelWidth() const override;
 
     /**
      * Get the payload of the PPDU.
@@ -193,14 +182,14 @@
      * This is applicable only for MU.
      * See section 27.3.10.8.3 of IEEE 802.11ax draft 4.0.
      *
-     * \param channelWidth the channel width occupied by the PPDU (in MHz)
+     * \param channelWidth the channel width occupied by the PPDU
      * \param ruAllocation 8 bit RU_ALLOCATION per 20 MHz
      * \param sigBCompression flag whether SIG-B compression is used by the PPDU
      * \param numMuMimoUsers the number of MU-MIMO users addressed by the PPDU
      * \return a pair containing the number of RUs in each HE-SIG-B content channel (resp. 1 and 2)
      */
     static std::pair<std::size_t, std::size_t> GetNumRusPerHeSigBContentChannel(
-        uint16_t channelWidth,
+        MHz_u channelWidth,
         const RuAllocation& ruAllocation,
         bool sigBCompression,
         uint8_t numMuMimoUsers);
@@ -218,13 +207,13 @@
 
     /**
      * Get variable length HE SIG-B field size
-     * \param channelWidth the channel width occupied by the PPDU (in MHz)
+     * \param channelWidth the channel width occupied by the PPDU
      * \param ruAllocation 8 bit RU_ALLOCATION per 20 MHz
      * \param sigBCompression flag whether SIG-B compression is used by the PPDU
      * \param numMuMimoUsers the number of MU-MIMO users addressed by the PPDU
      * \return field size in bytes
      */
-    static uint32_t GetSigBFieldSize(uint16_t channelWidth,
+    static uint32_t GetSigBFieldSize(MHz_u channelWidth,
                                      const RuAllocation& ruAllocation,
                                      bool sigBCompression,
                                      std::size_t numMuMimoUsers);
@@ -258,7 +247,7 @@
      * \param channelWidth the channel width in MHz
      * \return the value used to encode the bandwidth field in HE-SIG-A
      */
-    static uint8_t GetChannelWidthEncodingFromMhz(uint16_t channelWidth);
+    static uint8_t GetChannelWidthEncodingFromMhz(MHz_u channelWidth);
 
     /**
      * Convert number of spatial streams to NSTS field encoding in HE-SIG-A.
@@ -269,13 +258,13 @@
     static uint8_t GetNstsEncodingFromNss(uint8_t nss);
 
     /**
-     * Convert guard interval (in ns) and NLTF to its encoding in HE-SIG-A.
+     * Convert guard interval and NLTF to its encoding in HE-SIG-A.
      *
-     * \param gi the guard interval in nanoseconds
+     * \param guardInterval the guard interval
      * \param nltf the the number of long training symbols
      * \return the value used to encode the NSTS field in HE-SIG-A
      */
-    static uint8_t GetGuardIntervalAndNltfEncoding(uint16_t gi, uint8_t nltf);
+    static uint8_t GetGuardIntervalAndNltfEncoding(Time guardInterval, uint8_t nltf);
 
     /**
      * Convert number of spatial streams from NSTS field encoding in HE-SIG-A.
@@ -291,15 +280,15 @@
      * \param bandwidth the value of the bandwidth field in HE-SIG-A
      * \return the channel width in MHz
      */
-    static uint16_t GetChannelWidthMhzFromEncoding(uint8_t bandwidth);
+    static MHz_u GetChannelWidthMhzFromEncoding(uint8_t bandwidth);
 
     /**
-     * Convert guard interval (in ns) from its encoding in HE-SIG-A.
+     * Convert guard interval from its encoding in HE-SIG-A.
      *
      * \param giAndNltfSize the value used to encode the guard interval and NLTF field in HE-SIG-A
-     * \return the guard interval in nanoseconds
+     * \return the guard interval
      */
-    static uint16_t GetGuardIntervalFromEncoding(uint8_t giAndNltfSize);
+    static Time GetGuardIntervalFromEncoding(uint8_t giAndNltfSize);
 
     /**
      * Convert number of MU-MIMO users to its encoding in HE-SIG-A.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-ru.cc ns-3.43/src/wifi/model/he/he-ru.cc
--- ns-3.42/src/wifi/model/he/he-ru.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-ru.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -371,7 +360,7 @@
     // clang-format on
 };
 
-HeRu::RuSpecCompare::RuSpecCompare(uint16_t channelWidth, uint8_t p20Index)
+HeRu::RuSpecCompare::RuSpecCompare(MHz_u channelWidth, uint8_t p20Index)
     : m_channelWidth(channelWidth),
       m_p20Index(p20Index)
 {
@@ -476,7 +465,7 @@
 }
 
 std::size_t
-HeRu::RuSpec::GetPhyIndex(uint16_t bw, uint8_t p20Index) const
+HeRu::RuSpec::GetPhyIndex(MHz_u bw, uint8_t p20Index) const
 {
     bool primary80IsLower80 = (p20Index < bw / 40);
 
@@ -492,7 +481,7 @@
 }
 
 std::size_t
-HeRu::GetNRus(uint16_t bw, RuType ruType)
+HeRu::GetNRus(MHz_u bw, RuType ruType)
 {
     if (bw == 160 && ruType == RU_2x996_TONE)
     {
@@ -512,7 +501,7 @@
 }
 
 std::vector<HeRu::RuSpec>
-HeRu::GetRusOfType(uint16_t bw, HeRu::RuType ruType)
+HeRu::GetRusOfType(MHz_u bw, HeRu::RuType ruType)
 {
     if (ruType == HeRu::RU_2x996_TONE)
     {
@@ -542,7 +531,7 @@
 }
 
 std::vector<HeRu::RuSpec>
-HeRu::GetCentral26TonesRus(uint16_t bw, HeRu::RuType ruType)
+HeRu::GetCentral26TonesRus(MHz_u bw, HeRu::RuType ruType)
 {
     std::vector<std::size_t> indices;
 
@@ -588,7 +577,7 @@
 }
 
 HeRu::SubcarrierGroup
-HeRu::GetSubcarrierGroup(uint16_t bw, RuType ruType, std::size_t phyIndex)
+HeRu::GetSubcarrierGroup(MHz_u bw, RuType ruType, std::size_t phyIndex)
 {
     if (ruType == HeRu::RU_2x996_TONE) // handle special case of RU covering 160 MHz channel
     {
@@ -627,7 +616,7 @@
 }
 
 bool
-HeRu::DoesOverlap(uint16_t bw, RuSpec ru, const std::vector<RuSpec>& v)
+HeRu::DoesOverlap(MHz_u bw, RuSpec ru, const std::vector<RuSpec>& v)
 {
     // A 2x996-tone RU spans 160 MHz, hence it overlaps with any other RU
     if (bw == 160 && ru.GetRuType() == RU_2x996_TONE && !v.empty())
@@ -663,7 +652,7 @@
 }
 
 bool
-HeRu::DoesOverlap(uint16_t bw, RuSpec ru, const SubcarrierGroup& toneRanges, uint8_t p20Index)
+HeRu::DoesOverlap(MHz_u bw, RuSpec ru, const SubcarrierGroup& toneRanges, uint8_t p20Index)
 {
     for (const auto& range : toneRanges)
     {
@@ -686,7 +675,7 @@
 }
 
 HeRu::RuSpec
-HeRu::FindOverlappingRu(uint16_t bw, RuSpec referenceRu, RuType searchedRuType)
+HeRu::FindOverlappingRu(MHz_u bw, RuSpec referenceRu, RuType searchedRuType)
 {
     std::size_t numRus = HeRu::GetNRus(bw, searchedRuType);
 
@@ -763,7 +752,7 @@
     return os;
 }
 
-uint16_t
+MHz_u
 HeRu::GetBandwidth(RuType ruType)
 {
     switch (ruType)
@@ -789,9 +778,9 @@
 }
 
 HeRu::RuType
-HeRu::GetRuType(uint16_t bandwidth)
+HeRu::GetRuType(MHz_u bandwidth)
 {
-    switch (bandwidth)
+    switch (static_cast<uint16_t>(bandwidth))
     {
     case 2:
         return RU_26_TONE;
@@ -814,7 +803,7 @@
 }
 
 HeRu::RuType
-HeRu::GetEqualSizedRusForStations(uint16_t bandwidth,
+HeRu::GetEqualSizedRusForStations(MHz_u bandwidth,
                                   std::size_t& nStations,
                                   std::size_t& nCentral26TonesRus)
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/he-ru.h ns-3.43/src/wifi/model/he/he-ru.h
--- ns-3.42/src/wifi/model/he/he-ru.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/he-ru.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -20,6 +9,8 @@
 #ifndef HE_RU_H
 #define HE_RU_H
 
+#include "ns3/wifi-phy-common.h"
+
 #include <cstdint>
 #include <map>
 #include <ostream>
@@ -99,11 +90,11 @@
         /**
          * Get the RU PHY index
          *
-         * \param bw the width of the channel of which the RU is part (in MHz)
+         * \param bw the width of the channel of which the RU is part
          * \param p20Index the index of the primary20 channel
          * \return the RU PHY index
          */
-        std::size_t GetPhyIndex(uint16_t bw, uint8_t p20Index) const;
+        std::size_t GetPhyIndex(MHz_u bw, uint8_t p20Index) const;
 
         /**
          * Compare this RU to the given RU.
@@ -142,10 +133,10 @@
         /**
          * Constructor.
          *
-         * \param channelWidth the channel width in MHz
+         * \param channelWidth the channel width
          * \param p20Index the index of the primary20 channel
          */
-        RuSpecCompare(uint16_t channelWidth, uint8_t p20Index);
+        RuSpecCompare(MHz_u channelWidth, uint8_t p20Index);
         /**
          * Function call operator.
          *
@@ -158,39 +149,39 @@
         bool operator()(const RuSpec& lhs, const RuSpec& rhs) const;
 
       private:
-        uint16_t m_channelWidth; ///< The channel width in MHz
-        uint8_t m_p20Index;      ///< Primary20 channel index
+        MHz_u m_channelWidth; ///< The channel width
+        uint8_t m_p20Index;   ///< Primary20 channel index
     };
 
     /**
      * Get the number of distinct RUs of the given type (number of tones)
      * available in a HE PPDU of the given bandwidth.
      *
-     * \param bw the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160)
+     * \param bw the bandwidth of the HE PPDU (20, 40, 80, 160)
      * \param ruType the RU type (number of tones)
      * \return the number of distinct RUs available
      */
-    static std::size_t GetNRus(uint16_t bw, RuType ruType);
+    static std::size_t GetNRus(MHz_u bw, RuType ruType);
 
     /**
      * Get the set of distinct RUs of the given type (number of tones)
      * available in a HE PPDU of the given bandwidth.
      *
-     * \param bw the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160)
+     * \param bw the bandwidth of the HE PPDU (20, 40, 80, 160)
      * \param ruType the RU type (number of tones)
      * \return the set of distinct RUs available
      */
-    static std::vector<HeRu::RuSpec> GetRusOfType(uint16_t bw, HeRu::RuType ruType);
+    static std::vector<HeRu::RuSpec> GetRusOfType(MHz_u bw, HeRu::RuType ruType);
 
     /**
      * Get the set of 26-tone RUs that can be additionally allocated if the given
      * bandwidth is split in RUs of the given type.
      *
-     * \param bw the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160)
+     * \param bw the bandwidth of the HE PPDU (20, 40, 80, 160)
      * \param ruType the RU type (number of tones)
      * \return the set of 26-tone RUs that can be additionally allocated
      */
-    static std::vector<HeRu::RuSpec> GetCentral26TonesRus(uint16_t bw, HeRu::RuType ruType);
+    static std::vector<HeRu::RuSpec> GetCentral26TonesRus(MHz_u bw, HeRu::RuType ruType);
 
     /**
      * Get the subcarrier group of the RU having the given PHY index among all the
@@ -201,37 +192,37 @@
      * the 160 MHz channel (i.e. -1012 to 1012). The PHY index parameter is used to
      * distinguish between lower and higher 80 MHz subchannels.
      *
-     * \param bw the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160)
+     * \param bw the bandwidth of the HE PPDU (20, 40, 80, 160)
      * \param ruType the RU type (number of tones)
      * \param phyIndex the PHY index (starting at 1) of the RU
      * \return the subcarrier range of the specified RU
      */
-    static SubcarrierGroup GetSubcarrierGroup(uint16_t bw, RuType ruType, std::size_t phyIndex);
+    static SubcarrierGroup GetSubcarrierGroup(MHz_u bw, RuType ruType, std::size_t phyIndex);
 
     /**
      * Check whether the given RU overlaps with the given set of RUs.
      * Note that for channel width of 160 MHz the returned range is relative to
      * the 160 MHz channel (i.e. -1012 to 1012).
      *
-     * \param bw the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160)
+     * \param bw the bandwidth of the HE PPDU (20, 40, 80, 160)
      * \param ru the given RU allocation
      * \param v the given set of RUs
      * \return true if the given RU overlaps with the given set of RUs.
      */
-    static bool DoesOverlap(uint16_t bw, RuSpec ru, const std::vector<RuSpec>& v);
+    static bool DoesOverlap(MHz_u bw, RuSpec ru, const std::vector<RuSpec>& v);
 
     /**
      * Check whether the given RU overlaps with the given tone ranges.
      * Note that for channel width of 160 MHz the returned range is relative to
      * the 160 MHz channel (i.e. -1012 to 1012).
      *
-     * \param bw the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160)
+     * \param bw the bandwidth of the HE PPDU (20, 40, 80, 160)
      * \param ru the given RU allocation
      * \param toneRanges the given set of tone ranges
      * \param p20Index the index of the primary20 channel
      * \return true if the given RU overlaps with the given set of tone ranges.
      */
-    static bool DoesOverlap(uint16_t bw,
+    static bool DoesOverlap(MHz_u bw,
                             RuSpec ru,
                             const SubcarrierGroup& toneRanges,
                             uint8_t p20Index);
@@ -241,28 +232,28 @@
      * reference RU allocation.
      * Note that an assert is generated if the RU allocation is not found.
      *
-     * \param bw the bandwidth (MHz) of the HE PPDU (20, 40, 80, 160)
+     * \param bw the bandwidth of the HE PPDU (20, 40, 80, 160)
      * \param referenceRu the reference RU allocation
      * \param searchedRuType the searched RU type
      * \return the searched RU allocation.
      */
-    static RuSpec FindOverlappingRu(uint16_t bw, RuSpec referenceRu, RuType searchedRuType);
+    static RuSpec FindOverlappingRu(MHz_u bw, RuSpec referenceRu, RuType searchedRuType);
 
     /**
      * Get the approximate bandwidth occupied by a RU.
      *
      * \param ruType the RU type
-     * \return the approximate bandwidth (in MHz) occupied by the RU
+     * \return the approximate bandwidth occupied by the RU
      */
-    static uint16_t GetBandwidth(RuType ruType);
+    static MHz_u GetBandwidth(RuType ruType);
 
     /**
      * Get the RU corresponding to the approximate bandwidth.
      *
-     * \param bandwidth the approximate bandwidth (in MHz) occupied by the RU
+     * \param bandwidth the approximate bandwidth occupied by the RU
      * \return the RU type
      */
-    static RuType GetRuType(uint16_t bandwidth);
+    static RuType GetRuType(MHz_u bandwidth);
 
     /**
      * Given the channel bandwidth and the number of stations candidate for being
@@ -270,19 +261,19 @@
      * an RU subject to the constraint that all the stations must be assigned an RU
      * of the same size (in terms of number of tones).
      *
-     * \param bandwidth the channel bandwidth in MHz
+     * \param bandwidth the channel bandwidth
      * \param nStations the number of candidate stations. On return, it is set to
      *                  the number of stations that are assigned an RU
      * \param[out] nCentral26TonesRus the number of additional 26-tone RUs that can be
      *                                allocated if the returned RU size is greater than 26 tones
      * \return the RU type
      */
-    static RuType GetEqualSizedRusForStations(uint16_t bandwidth,
+    static RuType GetEqualSizedRusForStations(MHz_u bandwidth,
                                               std::size_t& nStations,
                                               std::size_t& nCentral26TonesRus);
 
     /// (bandwidth, number of tones) pair
-    typedef std::pair<uint8_t, RuType> BwTonesPair;
+    typedef std::pair<MHz_u, RuType> BwTonesPair;
 
     /// map (bandwidth, number of tones) pairs to the group of subcarrier ranges
     typedef std::map<BwTonesPair, std::vector<SubcarrierGroup>> SubcarrierGroups;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/mu-edca-parameter-set.cc ns-3.43/src/wifi/model/he/mu-edca-parameter-set.cc
--- ns-3.42/src/wifi/model/he/mu-edca-parameter-set.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/mu-edca-parameter-set.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/mu-edca-parameter-set.h ns-3.43/src/wifi/model/he/mu-edca-parameter-set.h
--- ns-3.42/src/wifi/model/he/mu-edca-parameter-set.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/mu-edca-parameter-set.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/multi-user-scheduler.cc ns-3.43/src/wifi/model/he/multi-user-scheduler.cc
--- ns-3.42/src/wifi/model/he/multi-user-scheduler.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/multi-user-scheduler.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -51,7 +40,8 @@
                           "even without DL traffic. A null duration indicates that such "
                           "requests shall not be made.",
                           TimeValue(Seconds(0)),
-                          MakeTimeAccessor(&MultiUserScheduler::m_accessReqInterval),
+                          MakeTimeAccessor(&MultiUserScheduler::SetAccessReqInterval,
+                                           &MultiUserScheduler::GetAccessReqInterval),
                           MakeTimeChecker())
             .AddAttribute("AccessReqAc",
                           "The Access Category for which the MultiUserScheduler makes requests "
@@ -94,7 +84,10 @@
     m_apMac = nullptr;
     m_edca = nullptr;
     m_lastTxInfo.clear();
-    m_accessReqTimer.Cancel();
+    for (auto& accessReqTimer : m_accessReqTimers)
+    {
+        accessReqTimer.Cancel();
+    }
     Object::DoDispose();
 }
 
@@ -122,8 +115,15 @@
 
     if (m_accessReqInterval.IsStrictlyPositive())
     {
-        m_accessReqTimer =
-            Simulator::Schedule(m_accessReqInterval, &MultiUserScheduler::AccessReqTimeout, this);
+        NS_ASSERT(m_accessReqTimers.empty());
+        for (uint8_t id = 0; id < m_apMac->GetNLinks(); ++id)
+        {
+            m_accessReqTimers.emplace_back(
+                Simulator::Schedule(m_accessReqInterval,
+                                    &MultiUserScheduler::AccessReqTimeout,
+                                    this,
+                                    id));
+        }
     }
 }
 
@@ -132,14 +132,29 @@
 {
     NS_LOG_FUNCTION(this << interval.As(Time::MS));
     m_accessReqInterval = interval;
-    // start the timer if past initialization
+    // if interval is non-zero, start the timers that are not running if we are past initialization
     if (m_accessReqInterval.IsStrictlyPositive() && IsInitialized())
     {
-        m_accessReqTimer =
-            Simulator::Schedule(m_accessReqInterval, &MultiUserScheduler::AccessReqTimeout, this);
+        m_accessReqTimers.resize(m_apMac->GetNLinks());
+        for (uint8_t id = 0; id < m_apMac->GetNLinks(); ++id)
+        {
+            if (!m_accessReqTimers[id].IsPending())
+            {
+                m_accessReqTimers[id] = Simulator::Schedule(m_accessReqInterval,
+                                                            &MultiUserScheduler::AccessReqTimeout,
+                                                            this,
+                                                            id);
+            }
+        }
     }
 }
 
+Time
+MultiUserScheduler::GetAccessReqInterval() const
+{
+    return m_accessReqInterval;
+}
+
 void
 MultiUserScheduler::SetWifiMac(Ptr<ApWifiMac> mac)
 {
@@ -172,26 +187,26 @@
 }
 
 void
-MultiUserScheduler::AccessReqTimeout()
+MultiUserScheduler::AccessReqTimeout(uint8_t linkId)
 {
-    NS_LOG_FUNCTION(this);
+    NS_LOG_FUNCTION(this << linkId);
 
     // request channel access if not requested yet
     auto edca = m_apMac->GetQosTxop(m_accessReqAc);
 
-    for (uint8_t linkId = 0; linkId < m_apMac->GetNLinks(); linkId++)
+    if (edca->GetAccessStatus(linkId) == Txop::NOT_REQUESTED)
     {
-        if (edca->GetAccessStatus(linkId) == Txop::NOT_REQUESTED)
-        {
-            m_apMac->GetChannelAccessManager(linkId)->RequestAccess(edca);
-        }
+        m_apMac->GetChannelAccessManager(linkId)->RequestAccess(edca);
     }
 
     // restart timer
     if (m_accessReqInterval.IsStrictlyPositive())
     {
-        m_accessReqTimer =
-            Simulator::Schedule(m_accessReqInterval, &MultiUserScheduler::AccessReqTimeout, this);
+        NS_ASSERT(m_accessReqTimers.size() > linkId);
+        m_accessReqTimers[linkId] = Simulator::Schedule(m_accessReqInterval,
+                                                        &MultiUserScheduler::AccessReqTimeout,
+                                                        this,
+                                                        linkId);
     }
 }
 
@@ -199,7 +214,7 @@
 MultiUserScheduler::NotifyAccessGranted(Ptr<QosTxop> edca,
                                         Time availableTime,
                                         bool initialFrame,
-                                        uint16_t allowedWidth,
+                                        MHz_u allowedWidth,
                                         uint8_t linkId)
 {
     NS_LOG_FUNCTION(this << edca << availableTime << initialFrame << allowedWidth << linkId);
@@ -210,15 +225,17 @@
     m_allowedWidth = allowedWidth;
     m_linkId = linkId;
 
-    if (m_accessReqTimer.IsPending() && m_restartTimerUponAccess)
+    if (m_accessReqTimers.size() > linkId && m_accessReqTimers[linkId].IsPending() &&
+        m_restartTimerUponAccess)
     {
         // restart access timer
-        m_accessReqTimer.Cancel();
+        m_accessReqTimers[linkId].Cancel();
         if (m_accessReqInterval.IsStrictlyPositive())
         {
-            m_accessReqTimer = Simulator::Schedule(m_accessReqInterval,
-                                                   &MultiUserScheduler::AccessReqTimeout,
-                                                   this);
+            m_accessReqTimers[linkId] = Simulator::Schedule(m_accessReqInterval,
+                                                            &MultiUserScheduler::AccessReqTimeout,
+                                                            this,
+                                                            linkId);
         }
     }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/multi-user-scheduler.h ns-3.43/src/wifi/model/he/multi-user-scheduler.h
--- ns-3.42/src/wifi/model/he/multi-user-scheduler.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/multi-user-scheduler.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -29,6 +18,7 @@
 #include "ns3/wifi-tx-parameters.h"
 
 #include <unordered_map>
+#include <vector>
 
 namespace ns3
 {
@@ -93,14 +83,14 @@
      * \param initialFrame true if the frame being transmitted is the initial frame
      *                     of the TXOP. This is used to determine whether the TXOP
      *                     limit can be exceeded
-     * \param allowedWidth the allowed width in MHz for the next transmission
+     * \param allowedWidth the allowed width for the next transmission
      * \param linkId the ID of the link over which channel access was gained
      * \return the format of the next transmission
      */
     TxFormat NotifyAccessGranted(Ptr<QosTxop> edca,
                                  Time availableTime,
                                  bool initialFrame,
-                                 uint16_t allowedWidth,
+                                 MHz_u allowedWidth,
                                  uint8_t linkId);
 
     /**
@@ -130,6 +120,11 @@
      */
     void SetAccessReqInterval(Time interval);
 
+    /**
+     * \return the duration of the interval between two consecutive requests for channel access
+     */
+    Time GetAccessReqInterval() const;
+
   protected:
     /**
      * Get the station manager attached to the AP on the given link.
@@ -182,12 +177,12 @@
     void NotifyNewAggregate() override;
     void DoInitialize() override;
 
-    Ptr<ApWifiMac> m_apMac;  //!< the AP wifi MAC
-    Ptr<QosTxop> m_edca;     //!< the AC that gained channel access
-    Time m_availableTime;    //!< the time available for frame exchange
-    bool m_initialFrame;     //!< true if a TXOP is being started
-    uint16_t m_allowedWidth; //!< the allowed width in MHz for the current transmission
-    uint8_t m_linkId;        //!< the ID of the link over which channel access has been granted
+    Ptr<ApWifiMac> m_apMac; //!< the AP wifi MAC
+    Ptr<QosTxop> m_edca;    //!< the AC that gained channel access
+    Time m_availableTime;   //!< the time available for frame exchange
+    bool m_initialFrame;    //!< true if a TXOP is being started
+    MHz_u m_allowedWidth;   //!< the allowed width for the current transmission
+    uint8_t m_linkId;       //!< the ID of the link over which channel access has been granted
 
   private:
     /**
@@ -198,11 +193,13 @@
     void SetWifiMac(Ptr<ApWifiMac> mac);
 
     /**
-     * Perform actions required on expiration of the channel access request timer,
-     * such as requesting channel access (if not requested already) and restarting
+     * Perform actions required on expiration of the channel access request timer associated with
+     * the given link, such as requesting channel access (if not requested already) and restarting
      * the channel access request timer.
+     *
+     * \param linkId the ID of the given link
      */
-    void AccessReqTimeout();
+    void AccessReqTimeout(uint8_t linkId);
 
     /**
      * Select the format of the next transmission.
@@ -243,9 +240,10 @@
     };
 
     std::map<uint8_t, LastTxInfo> m_lastTxInfo; ///< Information about the last transmission
-    EventId m_accessReqTimer;      ///< the timer controlling additional channel access requests
-    Time m_accessReqInterval;      ///< duration of the interval between channel access requests
-    AcIndex m_accessReqAc;         ///< AC we request channel access for
+    std::vector<EventId>
+        m_accessReqTimers;    ///< the per-link timer controlling additional channel access requests
+    Time m_accessReqInterval; ///< duration of the interval between channel access requests
+    AcIndex m_accessReqAc;    ///< AC we request channel access for
     bool m_restartTimerUponAccess; ///< whether the channel access timer has to be restarted
                                    ///< upon channel access
 };
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/mu-snr-tag.cc ns-3.43/src/wifi/model/he/mu-snr-tag.cc
--- ns-3.42/src/wifi/model/he/mu-snr-tag.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/mu-snr-tag.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/mu-snr-tag.h ns-3.43/src/wifi/model/he/mu-snr-tag.h
--- ns-3.42/src/wifi/model/he/mu-snr-tag.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/mu-snr-tag.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/obss-pd-algorithm.cc ns-3.43/src/wifi/model/he/obss-pd-algorithm.cc
--- ns-3.42/src/wifi/model/he/obss-pd-algorithm.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/obss-pd-algorithm.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -44,27 +33,27 @@
                           DoubleValue(-82.0),
                           MakeDoubleAccessor(&ObssPdAlgorithm::SetObssPdLevel,
                                              &ObssPdAlgorithm::GetObssPdLevel),
-                          MakeDoubleChecker<double>(-101, -62))
+                          MakeDoubleChecker<dBm_u>(-101, -62))
             .AddAttribute("ObssPdLevelMin",
                           "Minimum value (dBm) of OBSS PD level.",
                           DoubleValue(-82.0),
                           MakeDoubleAccessor(&ObssPdAlgorithm::m_obssPdLevelMin),
-                          MakeDoubleChecker<double>(-101, -62))
+                          MakeDoubleChecker<dBm_u>(-101, -62))
             .AddAttribute("ObssPdLevelMax",
                           "Maximum value (dBm) of OBSS PD level.",
                           DoubleValue(-62.0),
                           MakeDoubleAccessor(&ObssPdAlgorithm::m_obssPdLevelMax),
-                          MakeDoubleChecker<double>(-101, -62))
+                          MakeDoubleChecker<dBm_u>(-101, -62))
             .AddAttribute("TxPowerRefSiso",
                           "The SISO reference TX power level (dBm).",
                           DoubleValue(21),
                           MakeDoubleAccessor(&ObssPdAlgorithm::m_txPowerRefSiso),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<dBm_u>())
             .AddAttribute("TxPowerRefMimo",
                           "The MIMO reference TX power level (dBm).",
                           DoubleValue(25),
                           MakeDoubleAccessor(&ObssPdAlgorithm::m_txPowerRefMimo),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<dBm_u>())
             .AddTraceSource("Reset",
                             "Trace CCA Reset event",
                             MakeTraceSourceAccessor(&ObssPdAlgorithm::m_resetEvent),
@@ -99,8 +88,8 @@
 void
 ObssPdAlgorithm::ResetPhy(HeSigAParameters params)
 {
-    double txPowerMaxSiso = 0;
-    double txPowerMaxMimo = 0;
+    dBm_u txPowerMaxSiso = 0;
+    dBm_u txPowerMaxMimo = 0;
     bool powerRestricted = false;
     // Fetch my BSS color
     Ptr<HeConfiguration> heConfiguration = m_device->GetHeConfiguration();
@@ -116,18 +105,18 @@
         txPowerMaxMimo = m_txPowerRefMimo - (m_obssPdLevel - m_obssPdLevelMin);
         powerRestricted = true;
     }
-    m_resetEvent(bssColor, WToDbm(params.rssiW), powerRestricted, txPowerMaxSiso, txPowerMaxMimo);
+    m_resetEvent(bssColor, params.rssi, powerRestricted, txPowerMaxSiso, txPowerMaxMimo);
     phy->ResetCca(powerRestricted, txPowerMaxSiso, txPowerMaxMimo);
 }
 
 void
-ObssPdAlgorithm::SetObssPdLevel(double level)
+ObssPdAlgorithm::SetObssPdLevel(dBm_u level)
 {
     NS_LOG_FUNCTION(this << level);
     m_obssPdLevel = level;
 }
 
-double
+dBm_u
 ObssPdAlgorithm::GetObssPdLevel() const
 {
     return m_obssPdLevel;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/obss-pd-algorithm.h ns-3.43/src/wifi/model/he/obss-pd-algorithm.h
--- ns-3.42/src/wifi/model/he/obss-pd-algorithm.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/obss-pd-algorithm.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -24,6 +13,7 @@
 
 #include "ns3/object.h"
 #include "ns3/traced-callback.h"
+#include "ns3/wifi-units.h"
 
 namespace ns3
 {
@@ -88,13 +78,13 @@
                                         double txPowerMaxDbmMimo);
 
     /**
-     * \param level the current OBSS PD level in dBm
+     * \param level the current OBSS PD level
      */
-    void SetObssPdLevel(double level);
+    void SetObssPdLevel(dBm_u level);
     /**
-     * \return the current OBSS PD level in dBm.
+     * \return the current OBSS PD level
      */
-    double GetObssPdLevel() const;
+    dBm_u GetObssPdLevel() const;
 
   protected:
     void DoDispose() override;
@@ -102,11 +92,11 @@
     Ptr<WifiNetDevice> m_device; ///< Pointer to the WifiNetDevice
 
   private:
-    double m_obssPdLevel;    ///< Current OBSS PD level (dBm)
-    double m_obssPdLevelMin; ///< Minimum OBSS PD level (dBm)
-    double m_obssPdLevelMax; ///< Maximum OBSS PD level (dBm)
-    double m_txPowerRefSiso; ///< SISO reference TX power level (dBm)
-    double m_txPowerRefMimo; ///< MIMO reference TX power level (dBm)
+    dBm_u m_obssPdLevel;    ///< Current OBSS PD level
+    dBm_u m_obssPdLevelMin; ///< Minimum OBSS PD level
+    dBm_u m_obssPdLevelMax; ///< Maximum OBSS PD level
+    dBm_u m_txPowerRefSiso; ///< SISO reference TX power level
+    dBm_u m_txPowerRefMimo; ///< MIMO reference TX power level
 
     /**
      * TracedCallback signature for PHY reset events.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/rr-multi-user-scheduler.cc ns-3.43/src/wifi/model/he/rr-multi-user-scheduler.cc
--- ns-3.42/src/wifi/model/he/rr-multi-user-scheduler.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/rr-multi-user-scheduler.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -155,7 +144,9 @@
         return SU_TX;
     }
 
-    if (m_enableUlOfdma && m_enableBsrp && (GetLastTxFormat(m_linkId) == DL_MU_TX || !mpdu))
+    if (m_enableUlOfdma && m_enableBsrp &&
+        (GetLastTxFormat(m_linkId) == DL_MU_TX ||
+         ((m_initialFrame || m_trigger.GetType() != TriggerFrameType::BSRP_TRIGGER) && !mpdu)))
     {
         TxFormat txFormat = TrySendingBsrpTf();
 
@@ -178,9 +169,8 @@
     return TrySendingDlMuPpdu();
 }
 
-template <class Func>
 WifiTxVector
-RrMultiUserScheduler::GetTxVectorForUlMu(Func canBeSolicited)
+RrMultiUserScheduler::GetTxVectorForUlMu(std::function<bool(const MasterInfo&)> canBeSolicited)
 {
     NS_LOG_FUNCTION(this);
 
@@ -201,7 +191,7 @@
     WifiTxVector txVector;
     txVector.SetPreambleType(WIFI_PREAMBLE_HE_TB);
     txVector.SetChannelWidth(m_allowedWidth);
-    txVector.SetGuardInterval(heConfiguration->GetGuardInterval().GetNanoSeconds());
+    txVector.SetGuardInterval(heConfiguration->GetGuardInterval());
     txVector.SetBssColor(heConfiguration->GetBssColor());
 
     // iterate over the associated stations until an enough number of stations is identified
@@ -288,6 +278,59 @@
     return txVector;
 }
 
+bool
+RrMultiUserScheduler::CanSolicitStaInBsrpTf(const MasterInfo& info) const
+{
+    // check if station has setup the current link
+    if (!m_apMac->GetStaList(m_linkId).contains(info.aid))
+    {
+        NS_LOG_INFO("STA with AID " << info.aid << " has not setup link " << +m_linkId);
+        return false;
+    }
+
+    auto mldAddr = GetWifiRemoteStationManager(m_linkId)->GetMldAddress(info.address);
+
+    // remaining checks are for MLDs only
+    if (!mldAddr)
+    {
+        return true;
+    }
+
+    // check if at least one TID is mapped on the current link in the UL direction
+    bool mapped = false;
+    for (uint8_t tid = 0; tid < 8; ++tid)
+    {
+        if (m_apMac->TidMappedOnLink(*mldAddr, WifiDirection::UPLINK, tid, m_linkId))
+        {
+            mapped = true;
+            break;
+        }
+    }
+
+    if (!mapped)
+    {
+        NS_LOG_DEBUG("MLD " << *mldAddr << " has not mapped any TID on link " << +m_linkId);
+        return false;
+    }
+
+    // check if the station is an EMLSR client that is using another link
+    if (GetWifiRemoteStationManager(m_linkId)->GetEmlsrEnabled(info.address) &&
+        (m_apMac->GetTxBlockedOnLink(AC_BE,
+                                     {WIFI_QOSDATA_QUEUE, WIFI_UNICAST, *mldAddr, 0},
+                                     m_linkId,
+                                     WifiQueueBlockedReason::USING_OTHER_EMLSR_LINK) ||
+         m_apMac->GetTxBlockedOnLink(AC_BE,
+                                     {WIFI_QOSDATA_QUEUE, WIFI_UNICAST, *mldAddr, 0},
+                                     m_linkId,
+                                     WifiQueueBlockedReason::WAITING_EMLSR_TRANSITION_DELAY)))
+    {
+        NS_LOG_INFO("EMLSR client " << *mldAddr << " is using another link");
+        return false;
+    }
+
+    return true;
+}
+
 MultiUserScheduler::TxFormat
 RrMultiUserScheduler::TrySendingBsrpTf()
 {
@@ -299,11 +342,8 @@
         return TxFormat::SU_TX;
     }
 
-    // only consider stations that have setup the current link
-    WifiTxVector txVector = GetTxVectorForUlMu([this](const MasterInfo& info) {
-        const auto& staList = m_apMac->GetStaList(m_linkId);
-        return staList.contains(info.aid);
-    });
+    auto txVector = GetTxVectorForUlMu(
+        std::bind(&RrMultiUserScheduler::CanSolicitStaInBsrpTf, this, std::placeholders::_1));
 
     if (txVector.GetHeMuUserInfoMap().empty())
     {
@@ -372,6 +412,19 @@
     return UL_MU_TX;
 }
 
+bool
+RrMultiUserScheduler::CanSolicitStaInBasicTf(const MasterInfo& info) const
+{
+    // in addition to the checks performed when sending a BSRP TF, also check if the station
+    // has reported a null queue size
+    if (!CanSolicitStaInBsrpTf(info))
+    {
+        return false;
+    }
+
+    return m_apMac->GetMaxBufferStatus(info.address) > 0;
+}
+
 MultiUserScheduler::TxFormat
 RrMultiUserScheduler::TrySendingBasicTf()
 {
@@ -386,12 +439,8 @@
     // check if an UL OFDMA transmission is possible after a DL OFDMA transmission
     NS_ABORT_MSG_IF(m_ulPsduSize == 0, "The UlPsduSize attribute must be set to a non-null value");
 
-    // only consider stations that have setup the current link and do not have
-    // reported a null queue size
-    WifiTxVector txVector = GetTxVectorForUlMu([this](const MasterInfo& info) {
-        const auto& staList = m_apMac->GetStaList(m_linkId);
-        return staList.contains(info.aid) && m_apMac->GetMaxBufferStatus(info.address) > 0;
-    });
+    auto txVector = GetTxVectorForUlMu(
+        std::bind(&RrMultiUserScheduler::CanSolicitStaInBasicTf, this, std::placeholders::_1));
 
     if (txVector.GetHeMuUserInfoMap().empty())
     {
@@ -651,7 +700,7 @@
     m_txParams.Clear();
     m_txParams.m_txVector.SetPreambleType(WIFI_PREAMBLE_HE_MU);
     m_txParams.m_txVector.SetChannelWidth(m_allowedWidth);
-    m_txParams.m_txVector.SetGuardInterval(heConfiguration->GetGuardInterval().GetNanoSeconds());
+    m_txParams.m_txVector.SetGuardInterval(heConfiguration->GetGuardInterval());
     m_txParams.m_txVector.SetBssColor(heConfiguration->GetBssColor());
 
     // The TXOP limit can be exceeded by the TXOP holder if it does not transmit more
@@ -665,7 +714,7 @@
     m_candidates.clear();
 
     std::vector<uint8_t> ruAllocations;
-    auto numRuAllocs = m_txParams.m_txVector.GetChannelWidth() / 20;
+    const std::size_t numRuAllocs = m_txParams.m_txVector.GetChannelWidth() / 20;
     ruAllocations.resize(numRuAllocs);
     NS_ASSERT((m_candidates.size() % numRuAllocs) == 0);
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/he/rr-multi-user-scheduler.h ns-3.43/src/wifi/model/he/rr-multi-user-scheduler.h
--- ns-3.42/src/wifi/model/he/rr-multi-user-scheduler.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/he/rr-multi-user-scheduler.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -22,6 +11,7 @@
 
 #include "multi-user-scheduler.h"
 
+#include <functional>
 #include <list>
 
 namespace ns3
@@ -56,6 +46,32 @@
     void DoDispose() override;
     void DoInitialize() override;
 
+    /**
+     * Information used to sort stations
+     */
+    struct MasterInfo
+    {
+        uint16_t aid;         //!< station's AID
+        Mac48Address address; //!< station's MAC Address
+        double credits;       //!< credits accumulated by the station
+    };
+
+    /**
+     * Determine whether the given STA can be solicited via a Basic Trigger Frame.
+     *
+     * \param info the information about the given STA
+     * \return whether the given STA can be solicited via a Basic Trigger Frame
+     */
+    virtual bool CanSolicitStaInBasicTf(const MasterInfo& info) const;
+
+    /**
+     * Determine whether the given STA can be solicited via a BSRP Trigger Frame.
+     *
+     * \param info the information about the given STA
+     * \return whether the given STA can be solicited via a BSRP Trigger Frame
+     */
+    virtual bool CanSolicitStaInBsrpTf(const MasterInfo& info) const;
+
   private:
     TxFormat SelectTxFormat() override;
     DlMuInfo ComputeDlMuInfo() override;
@@ -93,13 +109,11 @@
      * transmissions from suitable stations, i.e., stations that have established a
      * BlockAck agreement with the AP and for which the given predicate returns true.
      *
-     * \tparam Func \deduced the type of the given predicate
      * \param canBeSolicited a predicate returning false for stations that shall not be solicited
      * \return a TXVECTOR that can be used to construct a Trigger Frame to solicit
      *         transmissions from suitable stations
      */
-    template <class Func>
-    WifiTxVector GetTxVectorForUlMu(Func canBeSolicited);
+    virtual WifiTxVector GetTxVectorForUlMu(std::function<bool(const MasterInfo&)> canBeSolicited);
 
     /**
      * Notify the scheduler that a station associated with the AP
@@ -117,16 +131,6 @@
     void NotifyStationDeassociated(uint16_t aid, Mac48Address address);
 
     /**
-     * Information used to sort stations
-     */
-    struct MasterInfo
-    {
-        uint16_t aid;         //!< station's AID
-        Mac48Address address; //!< station's MAC Address
-        double credits;       //!< credits accumulated by the station
-    };
-
-    /**
      * Finalize the given TXVECTOR by only including the largest subset of the
      * current set of candidate stations that can be allocated equal-sized RUs
      * (with the possible exception of using central 26-tone RUs) without
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-capabilities.cc ns-3.43/src/wifi/model/ht/ht-capabilities.cc
--- ns-3.42/src/wifi/model/ht/ht-capabilities.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/ht/ht-capabilities.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Ghada Badawy <gbadawy@rim.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-capabilities.h ns-3.43/src/wifi/model/ht/ht-capabilities.h
--- ns-3.42/src/wifi/model/ht/ht-capabilities.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/ht/ht-capabilities.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Ghada Badawy <gbadawy@gmail.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-configuration.cc ns-3.43/src/wifi/model/ht/ht-configuration.cc
--- ns-3.42/src/wifi/model/ht/ht-configuration.cc	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/ht/ht-configuration.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018  Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-configuration.h ns-3.43/src/wifi/model/ht/ht-configuration.h
--- ns-3.42/src/wifi/model/ht/ht-configuration.h	2024-05-29 15:29:47.200073700 -0700
+++ ns-3.43/src/wifi/model/ht/ht-configuration.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018  Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-frame-exchange-manager.cc ns-3.43/src/wifi/model/ht/ht-frame-exchange-manager.cc
--- ns-3.42/src/wifi/model/ht/ht-frame-exchange-manager.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/ht/ht-frame-exchange-manager.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -220,7 +209,7 @@
 }
 
 void
-HtFrameExchangeManager::SendAddBaResponse(const MgtAddBaRequestHeader* reqHdr,
+HtFrameExchangeManager::SendAddBaResponse(const MgtAddBaRequestHeader& reqHdr,
                                           Mac48Address originator)
 {
     NS_LOG_FUNCTION(this << originator);
@@ -237,9 +226,9 @@
     code.SetSuccess();
     respHdr.SetStatusCode(code);
     // Here a control about queues type?
-    respHdr.SetAmsduSupport(reqHdr->IsAmsduSupported());
+    respHdr.SetAmsduSupport(reqHdr.IsAmsduSupported());
 
-    if (reqHdr->IsImmediateBlockAck())
+    if (reqHdr.IsImmediateBlockAck())
     {
         respHdr.SetImmediateBlockAck();
     }
@@ -247,12 +236,12 @@
     {
         respHdr.SetDelayedBlockAck();
     }
-    auto tid = reqHdr->GetTid();
+    auto tid = reqHdr.GetTid();
     respHdr.SetTid(tid);
 
     auto bufferSize = std::min(m_mac->GetMpduBufferSize(), m_mac->GetMaxBaBufferSize(originator));
     respHdr.SetBufferSize(bufferSize);
-    respHdr.SetTimeout(reqHdr->GetTimeout());
+    respHdr.SetTimeout(reqHdr.GetTimeout());
 
     WifiActionHeader actionHdr;
     WifiActionHeader::ActionValue action;
@@ -270,7 +259,7 @@
     }
     GetBaManager(tid)->CreateRecipientAgreement(respHdr,
                                                 originator,
-                                                reqHdr->GetStartingSequence(),
+                                                reqHdr.GetStartingSequence(),
                                                 m_rxMiddle);
 
     auto agreement = GetBaManager(tid)->GetAgreementAsRecipient(originator, tid);
@@ -810,7 +799,13 @@
             }
         }
     }
-    QosFrameExchangeManager::NotifyPacketDiscarded(mpdu);
+    // the MPDU may have been dropped (and dequeued) by the above call to the NotifyDiscardedMpdu
+    // method of the BlockAckManager with reason WIFI_MAC_DROP_QOS_OLD_PACKET; in such a case, we
+    // must not fire the dropped callback again (with reason WIFI_MAC_DROP_REACHED_RETRY_LIMIT)
+    if (mpdu->IsQueued())
+    {
+        QosFrameExchangeManager::NotifyPacketDiscarded(mpdu);
+    }
 }
 
 void
@@ -1101,7 +1096,8 @@
                 // set the Queue Size subfield of the QoS Control field
                 if (!queueSizeForTid[tid].has_value())
                 {
-                    queueSizeForTid[tid] = edca->GetQosQueueSize(tid, hdr.GetAddr1());
+                    queueSizeForTid[tid] =
+                        edca->GetQosQueueSize(tid, mpdu->GetOriginal()->GetHeader().GetAddr1());
                 }
 
                 hdr.SetQosEosp();
@@ -1662,10 +1658,105 @@
         // to a Block Ack agreement
     }
 
+    if (hdr.IsMgt() && hdr.IsAction())
+    {
+        ReceiveMgtAction(mpdu, txVector);
+    }
+
     QosFrameExchangeManager::ReceiveMpdu(mpdu, rxSignalInfo, txVector, inAmpdu);
 }
 
 void
+HtFrameExchangeManager::ReceiveMgtAction(Ptr<const WifiMpdu> mpdu, const WifiTxVector& txVector)
+{
+    NS_LOG_FUNCTION(this << *mpdu << txVector);
+
+    NS_ASSERT(mpdu->GetHeader().IsAction());
+    const auto from = mpdu->GetOriginal()->GetHeader().GetAddr2();
+
+    WifiActionHeader actionHdr;
+    auto packet = mpdu->GetPacket()->Copy();
+    packet->RemoveHeader(actionHdr);
+
+    // compute the time to transmit the Ack
+    const auto ackTxVector =
+        GetWifiRemoteStationManager()->GetAckTxVector(mpdu->GetHeader().GetAddr2(), txVector);
+    const auto ackTxTime =
+        WifiPhy::CalculateTxDuration(GetAckSize(), ackTxVector, m_phy->GetPhyBand());
+
+    switch (actionHdr.GetCategory())
+    {
+    case WifiActionHeader::BLOCK_ACK:
+
+        switch (actionHdr.GetAction().blockAck)
+        {
+        case WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST: {
+            MgtAddBaRequestHeader reqHdr;
+            packet->RemoveHeader(reqHdr);
+
+            // We've received an ADDBA Request. Our policy here is to automatically accept it,
+            // so we get the ADDBA Response on its way as soon as we finish transmitting the Ack,
+            // to avoid to concurrently send Ack and ADDBA Response in case of multi-link devices
+            Simulator::Schedule(m_phy->GetSifs() + ackTxTime,
+                                &HtFrameExchangeManager::SendAddBaResponse,
+                                this,
+                                reqHdr,
+                                from);
+            // This frame is now completely dealt with, so we're done.
+            return;
+        }
+        case WifiActionHeader::BLOCK_ACK_ADDBA_RESPONSE: {
+            MgtAddBaResponseHeader respHdr;
+            packet->RemoveHeader(respHdr);
+
+            // We've received an ADDBA Response. Wait until we finish transmitting the Ack before
+            // unblocking transmissions to the recipient, otherwise for multi-link devices the Ack
+            // may be sent concurrently with a data frame containing an A-MPDU
+            Simulator::Schedule(m_phy->GetSifs() + ackTxTime, [=, this]() {
+                const auto recipient =
+                    GetWifiRemoteStationManager()->GetMldAddress(from).value_or(from);
+                m_mac->GetQosTxop(respHdr.GetTid())->GotAddBaResponse(respHdr, recipient);
+                GetBaManager(respHdr.GetTid())
+                    ->SetBlockAckInactivityCallback(
+                        MakeCallback(&HtFrameExchangeManager::SendDelbaFrame, this));
+            });
+            // This frame is now completely dealt with, so we're done.
+            return;
+        }
+        case WifiActionHeader::BLOCK_ACK_DELBA: {
+            MgtDelBaHeader delBaHdr;
+            packet->RemoveHeader(delBaHdr);
+            auto recipient = GetWifiRemoteStationManager()->GetMldAddress(from).value_or(from);
+
+            if (delBaHdr.IsByOriginator())
+            {
+                // This DELBA frame was sent by the originator, so
+                // this means that an ingoing established
+                // agreement exists in BlockAckManager and we need to
+                // destroy it.
+                GetBaManager(delBaHdr.GetTid())
+                    ->DestroyRecipientAgreement(recipient, delBaHdr.GetTid());
+            }
+            else
+            {
+                // We must have been the originator. We need to
+                // tell the correct queue that the agreement has
+                // been torn down
+                m_mac->GetQosTxop(delBaHdr.GetTid())->GotDelBaFrame(&delBaHdr, recipient);
+            }
+            // This frame is now completely dealt with, so we're done.
+            return;
+        }
+        default:
+            NS_FATAL_ERROR("Unsupported Action field in Block Ack Action frame");
+        }
+    default:
+        // Other action frames are not processed here
+        ;
+    }
+}
+
+void
 HtFrameExchangeManager::EndReceiveAmpdu(Ptr<const WifiPsdu> psdu,
                                         const RxSignalInfo& rxSignalInfo,
                                         const WifiTxVector& txVector,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-frame-exchange-manager.h ns-3.43/src/wifi/model/ht/ht-frame-exchange-manager.h
--- ns-3.42/src/wifi/model/ht/ht-frame-exchange-manager.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/ht/ht-frame-exchange-manager.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -138,10 +127,10 @@
      * This method can be called to accept a received ADDBA Request. An
      * ADDBA Response will be constructed and queued for transmission.
      *
-     * \param reqHdr a pointer to the received ADDBA Request header.
+     * \param reqHdr the received ADDBA Request header.
      * \param originator the MAC address of the originator.
      */
-    void SendAddBaResponse(const MgtAddBaRequestHeader* reqHdr, Mac48Address originator);
+    void SendAddBaResponse(const MgtAddBaRequestHeader& reqHdr, Mac48Address originator);
 
     /**
      * Sends DELBA frame to cancel a block ack agreement with STA
@@ -190,6 +179,14 @@
     void ProtectionCompleted() override;
 
     /**
+     * Process a received management action frame that relates to Block Ack agreement.
+     *
+     * \param mpdu the MPDU carrying the received management action frame
+     * \param txVector the TXVECTOR used to transmit the management action frame
+     */
+    void ReceiveMgtAction(Ptr<const WifiMpdu> mpdu, const WifiTxVector& txVector);
+
+    /**
      * Get a PSDU containing the given MPDU
      *
      * \param mpdu the given MPDU
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-operation.cc ns-3.43/src/wifi/model/ht/ht-operation.cc
--- ns-3.42/src/wifi/model/ht/ht-operation.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/ht/ht-operation.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-operation.h ns-3.43/src/wifi/model/ht/ht-operation.h
--- ns-3.42/src/wifi/model/ht/ht-operation.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/ht/ht-operation.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -318,7 +307,7 @@
      * Return MCS is supported.
      *
      * \param mcs MCS
-     *\
+     *
      * \return the MCS is supported
      */
     bool IsSupportedMcs(uint8_t mcs) const;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-phy.cc ns-3.43/src/wifi/model/ht/ht-phy.cc
--- ns-3.42/src/wifi/model/ht/ht-phy.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/ht/ht-phy.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -366,16 +355,17 @@
      * were obtained by observing the rates for which Nes was incremented in tables
      * 19-27 to 19-41 of IEEE 802.11-2016.
      */
-    double maxRatePerCoder = (txVector.GetGuardInterval() == 800) ? 320e6 : 350e6;
+    double maxRatePerCoder = (txVector.GetGuardInterval().GetNanoSeconds() == 800) ? 320e6 : 350e6;
     return ceil(txVector.GetMode().GetDataRate(txVector) / maxRatePerCoder);
 }
 
 Time
 HtPhy::GetSymbolDuration(const WifiTxVector& txVector) const
 {
-    uint16_t gi = txVector.GetGuardInterval();
+    const auto guardInterval = txVector.GetGuardInterval();
+    [[maybe_unused]] const auto gi = guardInterval.GetNanoSeconds();
     NS_ASSERT(gi == 400 || gi == 800);
-    return NanoSeconds(3200 + gi);
+    return GetSymbolDuration(guardInterval);
 }
 
 Ptr<WifiPpdu>
@@ -460,17 +450,18 @@
 }
 
 Ptr<SpectrumValue>
-HtPhy::GetTxPowerSpectralDensity(double txPowerW, Ptr<const WifiPpdu> ppdu) const
+HtPhy::GetTxPowerSpectralDensity(Watt_u txPower, Ptr<const WifiPpdu> ppdu) const
 {
+    const auto& centerFrequencies = ppdu->GetTxCenterFreqs();
+    NS_ASSERT(centerFrequencies.size() == 1);
     const auto& txVector = ppdu->GetTxVector();
-    uint16_t centerFrequency = GetCenterFrequencyForChannelWidth(txVector);
-    uint16_t channelWidth = txVector.GetChannelWidth();
-    NS_LOG_FUNCTION(this << centerFrequency << channelWidth << txPowerW);
+    const auto channelWidth = txVector.GetChannelWidth();
+    NS_LOG_FUNCTION(this << centerFrequencies.front() << channelWidth << txPower);
     const auto& txMaskRejectionParams = GetTxMaskRejectionParams();
-    Ptr<SpectrumValue> v = WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(
-        centerFrequency,
+    auto v = WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(
+        centerFrequencies,
         channelWidth,
-        txPowerW,
+        txPower,
         GetGuardBandwidth(channelWidth),
         std::get<0>(txMaskRejectionParams),
         std::get<1>(txMaskRejectionParams),
@@ -649,10 +640,10 @@
 }
 
 uint64_t
-HtPhy::GetPhyRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
+HtPhy::GetPhyRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
 {
-    WifiCodeRate codeRate = GetHtCodeRate(mcsValue);
-    uint64_t dataRate = GetDataRate(mcsValue, channelWidth, guardInterval, nss);
+    const auto codeRate = GetHtCodeRate(mcsValue);
+    const auto dataRate = GetDataRate(mcsValue, channelWidth, guardInterval, nss);
     return CalculatePhyRate(codeRate, dataRate);
 }
 
@@ -693,11 +684,12 @@
 }
 
 uint64_t
-HtPhy::GetDataRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
+HtPhy::GetDataRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
 {
-    NS_ASSERT(guardInterval == 800 || guardInterval == 400);
+    [[maybe_unused]] const auto gi = guardInterval.GetNanoSeconds();
+    NS_ASSERT((gi == 800) || (gi == 400));
     NS_ASSERT(nss <= 4);
-    return CalculateDataRate(GetSymbolDuration(NanoSeconds(guardInterval)),
+    return CalculateDataRate(GetSymbolDuration(guardInterval),
                              GetUsableSubcarriers(channelWidth),
                              static_cast<uint16_t>(log2(GetHtConstellationSize(mcsValue))),
                              GetCodeRatio(GetHtCodeRate(mcsValue)),
@@ -718,7 +710,7 @@
 }
 
 uint16_t
-HtPhy::GetUsableSubcarriers(uint16_t channelWidth)
+HtPhy::GetUsableSubcarriers(MHz_u channelWidth)
 {
     return (channelWidth == 40) ? 108 : 52;
 }
@@ -732,8 +724,8 @@
 uint64_t
 HtPhy::GetNonHtReferenceRate(uint8_t mcsValue)
 {
-    WifiCodeRate codeRate = GetHtCodeRate(mcsValue);
-    uint16_t constellationSize = GetHtConstellationSize(mcsValue);
+    const auto codeRate = GetHtCodeRate(mcsValue);
+    const auto constellationSize = GetHtConstellationSize(mcsValue);
     return CalculateNonHtReferenceRate(codeRate, constellationSize);
 }
 
@@ -828,8 +820,8 @@
     {
         return OfdmPhy::GetCcaIndication(ppdu);
     }
-    double ccaThresholdDbm = GetCcaThreshold(ppdu, WIFI_CHANLIST_PRIMARY);
-    Time delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThresholdDbm, GetPrimaryBand(20));
+    auto ccaThreshold = GetCcaThreshold(ppdu, WIFI_CHANLIST_PRIMARY);
+    auto delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, GetPrimaryBand(20));
     if (delayUntilCcaEnd.IsStrictlyPositive())
     {
         return std::make_pair(
@@ -838,11 +830,11 @@
     }
     if (ppdu)
     {
-        const uint16_t primaryWidth = 20;
-        uint16_t p20MinFreq =
+        const MHz_u primaryWidth = 20;
+        const MHz_u p20MinFreq =
             m_wifiPhy->GetOperatingChannel().GetPrimaryChannelCenterFrequency(primaryWidth) -
             (primaryWidth / 2);
-        uint16_t p20MaxFreq =
+        const MHz_u p20MaxFreq =
             m_wifiPhy->GetOperatingChannel().GetPrimaryChannelCenterFrequency(primaryWidth) +
             (primaryWidth / 2);
         if (ppdu->DoesOverlapChannel(p20MinFreq, p20MaxFreq))
@@ -855,17 +847,17 @@
         }
     }
 
-    const uint16_t secondaryWidth = 20;
-    uint16_t s20MinFreq =
+    const MHz_u secondaryWidth = 20;
+    const MHz_u s20MinFreq =
         m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(secondaryWidth) -
         (secondaryWidth / 2);
-    uint16_t s20MaxFreq =
+    const MHz_u s20MaxFreq =
         m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(secondaryWidth) +
         (secondaryWidth / 2);
     if (!ppdu || ppdu->DoesOverlapChannel(s20MinFreq, s20MaxFreq))
     {
-        ccaThresholdDbm = GetCcaThreshold(ppdu, WIFI_CHANLIST_SECONDARY);
-        delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThresholdDbm, GetSecondaryBand(20));
+        ccaThreshold = GetCcaThreshold(ppdu, WIFI_CHANLIST_SECONDARY);
+        delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, GetSecondaryBand(20));
         if (delayUntilCcaEnd.IsStrictlyPositive())
         {
             return std::make_pair(delayUntilCcaEnd, WIFI_CHANLIST_SECONDARY);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-phy.h ns-3.43/src/wifi/model/ht/ht-phy.h
--- ns-3.42/src/wifi/model/ht/ht-phy.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/ht/ht-phy.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -396,15 +385,15 @@
      * and is mainly used as a callback for WifiMode operation.
      *
      * \param mcsValue the HT MCS index
-     * \param channelWidth the considered channel width in MHz
-     * \param guardInterval the considered guard interval duration in nanoseconds
+     * \param channelWidth the considered channel width
+     * \param guardInterval the considered guard interval duration
      * \param nss the considered number of stream
      *
      * \return the physical bit rate of this signal in bps.
      */
     static uint64_t GetPhyRate(uint8_t mcsValue,
-                               uint16_t channelWidth,
-                               uint16_t guardInterval,
+                               MHz_u channelWidth,
+                               Time guardInterval,
                                uint8_t nss);
     /**
      * Return the PHY rate corresponding to
@@ -435,14 +424,14 @@
      * callback for WifiMode operation.
      *
      * \param mcsValue the HT MCS index
-     * \param channelWidth the channel width in MHz
+     * \param channelWidth the channel width
      * \param guardInterval the guard interval duration in nanoseconds
      * \param nss the number of spatial streams
      * \return the data bit rate in bps.
      */
     static uint64_t GetDataRate(uint8_t mcsValue,
-                                uint16_t channelWidth,
-                                uint16_t guardInterval,
+                                MHz_u channelWidth,
+                                Time guardInterval,
                                 uint8_t nss);
     /**
      * Calculate the rate in bps of the non-HT Reference Rate corresponding
@@ -466,7 +455,7 @@
     PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr<Event> event) override;
     bool IsAllConfigSupported(WifiPpduField field, Ptr<const WifiPpdu> ppdu) const override;
     bool IsConfigSupported(Ptr<const WifiPpdu> ppdu) const override;
-    Ptr<SpectrumValue> GetTxPowerSpectralDensity(double txPowerW,
+    Ptr<SpectrumValue> GetTxPowerSpectralDensity(Watt_u txPower,
                                                  Ptr<const WifiPpdu> ppdu) const override;
     uint32_t GetMaxPsduSize() const override;
     CcaIndication GetCcaIndication(const Ptr<const WifiPpdu> ppdu) override;
@@ -538,16 +527,10 @@
                                       uint8_t nss);
 
     /**
-     * \param channelWidth the channel width in MHz
-     * \return the symbol duration excluding guard interval
-     */
-    static Time GetSymbolDuration(uint16_t channelWidth);
-
-    /**
-     * \param channelWidth the channel width in MHz
+     * \param channelWidth the channel width
      * \return the number of usable subcarriers for data
      */
-    static uint16_t GetUsableSubcarriers(uint16_t channelWidth);
+    static uint16_t GetUsableSubcarriers(MHz_u channelWidth);
 
     /**
      * \param guardInterval the guard interval duration
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-ppdu.cc ns-3.43/src/wifi/model/ht/ht-ppdu.cc
--- ns-3.42/src/wifi/model/ht/ht-ppdu.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/ht/ht-ppdu.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
@@ -82,7 +71,7 @@
     htSig.SetChannelWidth(txVector.GetChannelWidth());
     htSig.SetHtLength(psduSize);
     htSig.SetAggregation(txVector.IsAggregation());
-    htSig.SetShortGuardInterval(txVector.GetGuardInterval() == 400);
+    htSig.SetShortGuardInterval(txVector.GetGuardInterval().GetNanoSeconds() == 400);
 }
 
 WifiTxVector
@@ -102,7 +91,7 @@
     txVector.SetMode(HtPhy::GetHtMcs(htSig.GetMcs()));
     txVector.SetChannelWidth(htSig.GetChannelWidth());
     txVector.SetNss(1 + (htSig.GetMcs() / 8));
-    txVector.SetGuardInterval(htSig.GetShortGuardInterval() ? 400 : 800);
+    txVector.SetGuardInterval(NanoSeconds(htSig.GetShortGuardInterval() ? 400 : 800));
     txVector.SetAggregation(htSig.GetAggregation());
 }
 
@@ -144,12 +133,12 @@
 }
 
 void
-HtPpdu::HtSigHeader::SetChannelWidth(uint16_t channelWidth)
+HtPpdu::HtSigHeader::SetChannelWidth(MHz_u channelWidth)
 {
     m_cbw20_40 = (channelWidth > 20) ? 1 : 0;
 }
 
-uint16_t
+MHz_u
 HtPpdu::HtSigHeader::GetChannelWidth() const
 {
     return m_cbw20_40 ? 40 : 20;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ht/ht-ppdu.h ns-3.43/src/wifi/model/ht/ht-ppdu.h
--- ns-3.42/src/wifi/model/ht/ht-ppdu.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/ht/ht-ppdu.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
@@ -66,17 +55,17 @@
          */
         uint8_t GetMcs() const;
         /**
-         * Fill the channel width field of HT-SIG (in MHz).
+         * Fill the channel width field of HT-SIG.
          *
-         * \param channelWidth the channel width (in MHz)
+         * \param channelWidth the channel width
          */
-        void SetChannelWidth(uint16_t channelWidth);
+        void SetChannelWidth(MHz_u channelWidth);
         /**
-         * Return the channel width (in MHz).
+         * Return the channel width.
          *
-         * \return the channel width (in MHz)
+         * \return the channel width
          */
-        uint16_t GetChannelWidth() const;
+        MHz_u GetChannelWidth() const;
         /**
          * Fill the aggregation field of HT-SIG.
          *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/interference-helper.cc ns-3.43/src/wifi/model/interference-helper.cc
--- ns-3.42/src/wifi/model/interference-helper.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/interference-helper.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -77,8 +66,8 @@
     return m_endTime - m_startTime;
 }
 
-double
-Event::GetRxPowerW() const
+Watt_u
+Event::GetRxPower() const
 {
     NS_ASSERT(!m_rxPowerW.empty());
     // The total RX power corresponds to the maximum over all the bands
@@ -89,8 +78,8 @@
     return it->second;
 }
 
-double
-Event::GetRxPowerW(const WifiSpectrumBandInfo& band) const
+Watt_u
+Event::GetRxPower(const WifiSpectrumBandInfo& band) const
 {
     const auto it = m_rxPowerW.find(band);
     NS_ASSERT(it != m_rxPowerW.cend());
@@ -98,7 +87,7 @@
 }
 
 const RxPowerWattPerChannelBand&
-Event::GetRxPowerWPerBand() const
+Event::GetRxPowerPerBand() const
 {
     return m_rxPowerW;
 }
@@ -129,7 +118,7 @@
 operator<<(std::ostream& os, const Event& event)
 {
     os << "start=" << event.GetStartTime() << ", end=" << event.GetEndTime()
-       << ", power=" << event.GetRxPowerW() << "W"
+       << ", power=" << event.GetRxPower() << "W"
        << ", PPDU=" << event.GetPpdu();
     return os;
 }
@@ -139,7 +128,7 @@
  *       short period of time.
  ****************************************************************/
 
-InterferenceHelper::NiChange::NiChange(double power, Ptr<Event> event)
+InterferenceHelper::NiChange::NiChange(Watt_u power, Ptr<Event> event)
     : m_power(power),
       m_event(event)
 {
@@ -150,14 +139,14 @@
     m_event = nullptr;
 }
 
-double
+Watt_u
 InterferenceHelper::NiChange::GetPower() const
 {
     return m_power;
 }
 
 void
-InterferenceHelper::NiChange::AddPower(double power)
+InterferenceHelper::NiChange::AddPower(Watt_u power)
 {
     m_power += power;
 }
@@ -262,15 +251,27 @@
 }
 
 void
+InterferenceHelper::RemoveBand(const WifiSpectrumBandInfo& band)
+{
+    NS_LOG_FUNCTION(this << band);
+    NS_ASSERT(m_firstPowers.count(band) != 0);
+    m_firstPowers.erase(band);
+    auto it = m_niChanges.find(band);
+    NS_ASSERT(it != std::end(m_niChanges));
+    it->second.clear();
+    m_niChanges.erase(it);
+}
+
+void
 InterferenceHelper::UpdateBands(const std::vector<WifiSpectrumBandInfo>& bands,
                                 const FrequencyRange& freqRange)
 {
     NS_LOG_FUNCTION(this << freqRange);
-    for (auto it = m_niChanges.begin(); it != m_niChanges.end();)
+    std::vector<WifiSpectrumBandInfo> bandsToRemove{};
+    for (auto it = m_niChanges.begin(); it != m_niChanges.end(); ++it)
     {
         if (!IsBandInFrequencyRange(it->first, freqRange))
         {
-            it++;
             continue;
         }
         const auto frequencies = it->first.frequencies;
@@ -281,15 +282,13 @@
         if (!found)
         {
             // band does not belong to the new bands, erase it
-            m_firstPowers.erase(it->first);
-            it->second.clear();
-            it = m_niChanges.erase(it);
-        }
-        else
-        {
-            it++;
+            bandsToRemove.emplace_back(it->first);
         }
     }
+    for (const auto& band : bandsToRemove)
+    {
+        RemoveBand(band);
+    }
     for (const auto& band : bands)
     {
         if (!HasBand(band))
@@ -325,9 +324,9 @@
 }
 
 Time
-InterferenceHelper::GetEnergyDuration(double energyW, const WifiSpectrumBandInfo& band)
+InterferenceHelper::GetEnergyDuration(Watt_u energy, const WifiSpectrumBandInfo& band)
 {
-    NS_LOG_FUNCTION(this << energyW << band);
+    NS_LOG_FUNCTION(this << energy << band);
     Time now = Simulator::Now();
     auto niIt = m_niChanges.find(band);
     NS_ABORT_IF(niIt == m_niChanges.end());
@@ -335,14 +334,14 @@
     Time end = i->first;
     for (; i != niIt->second.end(); ++i)
     {
-        double noiseInterferenceW = i->second.GetPower();
+        const auto noiseInterference = i->second.GetPower();
         end = i->first;
-        if (noiseInterferenceW < energyW)
+        if (noiseInterference < energy)
         {
             break;
         }
     }
-    return end > now ? end - now : MicroSeconds(0);
+    return end > now ? end - now : Time{0};
 }
 
 void
@@ -351,12 +350,12 @@
                                 bool isStartHePortionRxing)
 {
     NS_LOG_FUNCTION(this << event << freqRange << isStartHePortionRxing);
-    for (const auto& [band, power] : event->GetRxPowerWPerBand())
+    for (const auto& [band, power] : event->GetRxPowerPerBand())
     {
         auto niIt = m_niChanges.find(band);
         NS_ABORT_IF(niIt == m_niChanges.end());
-        double previousPowerStart = 0;
-        double previousPowerEnd = 0;
+        Watt_u previousPowerStart = 0;
+        Watt_u previousPowerEnd = 0;
         auto previousPowerPosition = GetPreviousPosition(event->GetStartTime(), niIt);
         previousPowerStart = previousPowerPosition->second.GetPower();
         previousPowerEnd = GetPreviousPosition(event->GetEndTime(), niIt)->second.GetPower();
@@ -403,20 +402,20 @@
 }
 
 double
-InterferenceHelper::CalculateSnr(double signal,
-                                 double noiseInterference,
-                                 uint16_t channelWidth,
+InterferenceHelper::CalculateSnr(Watt_u signal,
+                                 Watt_u noiseInterference,
+                                 MHz_u channelWidth,
                                  uint8_t nss) const
 {
     NS_LOG_FUNCTION(this << signal << noiseInterference << channelWidth << +nss);
     // thermal noise at 290K in J/s = W
     static const double BOLTZMANN = 1.3803e-23;
     // Nt is the power of thermal noise in W
-    double Nt = BOLTZMANN * 290 * channelWidth * 1e6;
-    // receiver noise Floor (W) which accounts for thermal noise and non-idealities of the receiver
-    double noiseFloor = m_noiseFigure * Nt;
-    double noise = noiseFloor + noiseInterference;
-    double snr = signal / noise; // linear scale
+    const auto Nt = BOLTZMANN * 290 * channelWidth * 1e6;
+    // receiver noise Floor which accounts for thermal noise and non-idealities of the receiver
+    Watt_u noiseFloor = m_noiseFigure * Nt;
+    Watt_u noise = noiseFloor + noiseInterference;
+    auto snr = signal / noise; // linear scale
     NS_LOG_DEBUG("bandwidth=" << channelWidth << "MHz, signal=" << signal << "W, noise="
                               << noiseFloor << "W, interference=" << noiseInterference
                               << "W, snr=" << RatioToDb(snr) << "dB");
@@ -434,7 +433,7 @@
     return snr;
 }
 
-double
+Watt_u
 InterferenceHelper::CalculateNoiseInterferenceW(Ptr<Event> event,
                                                 NiChangesPerBand& nis,
                                                 const WifiSpectrumBandInfo& band) const
@@ -442,14 +441,14 @@
     NS_LOG_FUNCTION(this << band);
     auto firstPower_it = m_firstPowers.find(band);
     NS_ABORT_IF(firstPower_it == m_firstPowers.end());
-    double noiseInterferenceW = firstPower_it->second;
+    auto noiseInterference = firstPower_it->second;
     auto niIt = m_niChanges.find(band);
     NS_ABORT_IF(niIt == m_niChanges.end());
     const auto now = Simulator::Now();
     auto it = niIt->second.find(event->GetStartTime());
-    double muMimoPowerW = (event->GetPpdu()->GetType() == WIFI_PPDU_TYPE_UL_MU)
-                              ? CalculateMuMimoPowerW(event, band)
-                              : 0.0;
+    const auto muMimoPower = (event->GetPpdu()->GetType() == WIFI_PPDU_TYPE_UL_MU)
+                                 ? CalculateMuMimoPowerW(event, band)
+                                 : 0.0;
     for (; it != niIt->second.end() && it->first < now; ++it)
     {
         if (IsSameMuMimoTransmission(event, it->second.GetEvent()) &&
@@ -459,11 +458,11 @@
             // unless this is the same event
             continue;
         }
-        noiseInterferenceW = it->second.GetPower() - event->GetRxPowerW(band) - muMimoPowerW;
-        if (std::abs(noiseInterferenceW) < std::numeric_limits<double>::epsilon())
+        noiseInterference = it->second.GetPower() - event->GetRxPower(band) - muMimoPower;
+        if (std::abs(noiseInterference) < std::numeric_limits<double>::epsilon())
         {
             // fix some possible rounding issues with double values
-            noiseInterferenceW = 0.0;
+            noiseInterference = 0.0;
         }
     }
     it = niIt->second.find(event->GetStartTime());
@@ -480,12 +479,12 @@
     }
     ni.emplace(event->GetEndTime(), NiChange(0, event));
     nis.insert({band, ni});
-    NS_ASSERT_MSG(noiseInterferenceW >= 0.0,
-                  "CalculateNoiseInterferenceW returns negative value " << noiseInterferenceW);
-    return noiseInterferenceW;
+    NS_ASSERT_MSG(noiseInterference >= 0.0,
+                  "CalculateNoiseInterferenceW returns negative value " << noiseInterference);
+    return noiseInterference;
 }
 
-double
+Watt_u
 InterferenceHelper::CalculateMuMimoPowerW(Ptr<const Event> event,
                                           const WifiSpectrumBandInfo& band) const
 {
@@ -493,7 +492,7 @@
     NS_ASSERT(niIt != m_niChanges.end());
     auto it = niIt->second.begin();
     ++it;
-    double muMimoPowerW = 0.0;
+    Watt_u muMimoPower{0.0};
     for (; it != niIt->second.end() && it->first < Simulator::Now(); ++it)
     {
         if (IsSameMuMimoTransmission(event, it->second.GetEvent()))
@@ -515,11 +514,11 @@
                 {
                     break;
                 }
-                muMimoPowerW += it->second.GetEvent()->GetRxPowerW(band);
+                muMimoPower += it->second.GetEvent()->GetRxPower(band);
             }
         }
     }
-    return muMimoPowerW;
+    return muMimoPower;
 }
 
 double
@@ -533,9 +532,9 @@
     {
         return 1.0;
     }
-    uint64_t rate = mode.GetDataRate(txVector.GetChannelWidth());
+    const auto rate = mode.GetDataRate(txVector.GetChannelWidth());
     auto nbits = static_cast<uint64_t>(rate * duration.GetSeconds());
-    double csr =
+    const auto csr =
         m_errorRateModel->GetChunkSuccessRate(mode, txVector, snir, nbits, m_numRxAntennas, field);
     return csr;
 }
@@ -550,8 +549,8 @@
     {
         return 1.0;
     }
-    WifiMode mode = txVector.GetMode(staId);
-    uint64_t rate = mode.GetDataRate(txVector, staId);
+    const auto mode = txVector.GetMode(staId);
+    const auto rate = mode.GetDataRate(txVector, staId);
     auto nbits = static_cast<uint64_t>(rate * duration.GetSeconds());
     nbits /= txVector.GetNss(staId); // divide effective number of bits by NSS to achieve same chunk
                                      // error rate as SISO for AWGN
@@ -567,7 +566,7 @@
 
 double
 InterferenceHelper::CalculatePayloadPer(Ptr<const Event> event,
-                                        uint16_t channelWidth,
+                                        MHz_u channelWidth,
                                         NiChangesPerBand* nis,
                                         const WifiSpectrumBandInfo& band,
                                         uint16_t staId,
@@ -577,10 +576,10 @@
     double psr = 1.0; /* Packet Success Rate */
     const auto& niIt = nis->find(band)->second;
     auto j = niIt.cbegin();
-    Time previous = j->first;
-    double muMimoPowerW = 0.0;
-    WifiMode payloadMode = event->GetPpdu()->GetTxVector().GetMode(staId);
-    Time phyPayloadStart = j->first;
+    auto previous = j->first;
+    Watt_u muMimoPower = 0.0;
+    const auto payloadMode = event->GetPpdu()->GetTxVector().GetMode(staId);
+    auto phyPayloadStart = j->first;
     if (event->GetPpdu()->GetType() != WIFI_PPDU_TYPE_UL_MU &&
         event->GetPpdu()->GetType() !=
             WIFI_PPDU_TYPE_DL_MU) // j->first corresponds to the start of the MU payload
@@ -590,22 +589,22 @@
     }
     else
     {
-        muMimoPowerW = CalculateMuMimoPowerW(event, band);
+        muMimoPower = CalculateMuMimoPowerW(event, band);
     }
-    Time windowStart = phyPayloadStart + window.first;
-    Time windowEnd = phyPayloadStart + window.second;
+    const auto windowStart = phyPayloadStart + window.first;
+    const auto windowEnd = phyPayloadStart + window.second;
     NS_ABORT_IF(!m_firstPowers.contains(band));
-    double noiseInterferenceW = m_firstPowers.at(band);
-    double powerW = event->GetRxPowerW(band);
+    auto noiseInterference = m_firstPowers.at(band);
+    auto power = event->GetRxPower(band);
     while (++j != niIt.cend())
     {
         Time current = j->first;
         NS_LOG_DEBUG("previous= " << previous << ", current=" << current);
         NS_ASSERT(current >= previous);
-        double snr = CalculateSnr(powerW,
-                                  noiseInterferenceW,
-                                  channelWidth,
-                                  event->GetPpdu()->GetTxVector().GetNss(staId));
+        const auto snr = CalculateSnr(power,
+                                      noiseInterference,
+                                      channelWidth,
+                                      event->GetPpdu()->GetTxVector().GetNss(staId));
         // Case 1: Both previous and current point to the windowed payload
         if (previous >= windowStart)
         {
@@ -627,14 +626,13 @@
                 "previous is before windowed payload and current is in the windowed payload: mode="
                 << payloadMode << ", psr=" << psr);
         }
-        noiseInterferenceW = j->second.GetPower() - powerW;
+        noiseInterference = j->second.GetPower() - power;
         if (IsSameMuMimoTransmission(event, j->second.GetEvent()))
         {
-            muMimoPowerW += j->second.GetEvent()->GetRxPowerW(band);
-            NS_LOG_DEBUG(
-                "PPDU belongs to same MU-MIMO transmission: muMimoPowerW=" << muMimoPowerW);
+            muMimoPower += j->second.GetEvent()->GetRxPower(band);
+            NS_LOG_DEBUG("PPDU belongs to same MU-MIMO transmission: muMimoPowerW=" << muMimoPower);
         }
-        noiseInterferenceW -= muMimoPowerW;
+        noiseInterference -= muMimoPower;
         previous = j->first;
         if (previous > windowEnd)
         {
@@ -643,7 +641,7 @@
             break;
         }
     }
-    double per = 1 - psr;
+    const auto per = 1.0 - psr;
     return per;
 }
 
@@ -651,7 +649,7 @@
 InterferenceHelper::CalculatePhyHeaderSectionPsr(
     Ptr<const Event> event,
     NiChangesPerBand* nis,
-    uint16_t channelWidth,
+    MHz_u channelWidth,
     const WifiSpectrumBandInfo& band,
     PhyEntity::PhyHeaderSections phyHeaderSections) const
 {
@@ -661,30 +659,30 @@
     auto j = niIt.begin();
 
     NS_ASSERT(!phyHeaderSections.empty());
-    Time stopLastSection = Seconds(0);
+    Time stopLastSection;
     for (const auto& section : phyHeaderSections)
     {
         stopLastSection = Max(stopLastSection, section.second.first.second);
     }
 
-    Time previous = j->first;
+    auto previous = j->first;
     NS_ABORT_IF(!m_firstPowers.contains(band));
-    double noiseInterferenceW = m_firstPowers.at(band);
-    double powerW = event->GetRxPowerW(band);
+    auto noiseInterference = m_firstPowers.at(band);
+    const auto power = event->GetRxPower(band);
     while (++j != niIt.end())
     {
-        Time current = j->first;
+        auto current = j->first;
         NS_LOG_DEBUG("previous= " << previous << ", current=" << current);
         NS_ASSERT(current >= previous);
-        double snr = CalculateSnr(powerW, noiseInterferenceW, channelWidth, 1);
+        const auto snr = CalculateSnr(power, noiseInterference, channelWidth, 1);
         for (const auto& section : phyHeaderSections)
         {
-            Time start = section.second.first.first;
-            Time stop = section.second.first.second;
+            const auto start = section.second.first.first;
+            const auto stop = section.second.first.second;
 
             if (previous <= stop || current >= start)
             {
-                Time duration = Min(stop, current) - Max(start, previous);
+                const auto duration = Min(stop, current) - Max(start, previous);
                 if (duration.IsStrictlyPositive())
                 {
                     psr *= CalculateChunkSuccessRate(snr,
@@ -699,7 +697,7 @@
                 }
             }
         }
-        noiseInterferenceW = j->second.GetPower() - powerW;
+        noiseInterference = j->second.GetPower() - power;
         previous = j->first;
         if (previous > stopLastSection)
         {
@@ -714,7 +712,7 @@
 double
 InterferenceHelper::CalculatePhyHeaderPer(Ptr<const Event> event,
                                           NiChangesPerBand* nis,
-                                          uint16_t channelWidth,
+                                          MHz_u channelWidth,
                                           const WifiSpectrumBandInfo& band,
                                           WifiPpduField header) const
 {
@@ -743,7 +741,7 @@
 
 PhyEntity::SnrPer
 InterferenceHelper::CalculatePayloadSnrPer(Ptr<Event> event,
-                                           uint16_t channelWidth,
+                                           MHz_u channelWidth,
                                            const WifiSpectrumBandInfo& band,
                                            uint16_t staId,
                                            std::pair<Time, Time> relativeMpduStartStop) const
@@ -751,47 +749,47 @@
     NS_LOG_FUNCTION(this << channelWidth << band << staId << relativeMpduStartStop.first
                          << relativeMpduStartStop.second);
     NiChangesPerBand ni;
-    double noiseInterferenceW = CalculateNoiseInterferenceW(event, ni, band);
-    double snr = CalculateSnr(event->GetRxPowerW(band),
-                              noiseInterferenceW,
-                              channelWidth,
-                              event->GetPpdu()->GetTxVector().GetNss(staId));
+    const auto noiseInterference = CalculateNoiseInterferenceW(event, ni, band);
+    const auto snr = CalculateSnr(event->GetRxPower(band),
+                                  noiseInterference,
+                                  channelWidth,
+                                  event->GetPpdu()->GetTxVector().GetNss(staId));
 
     /* calculate the SNIR at the start of the MPDU (located through windowing) and accumulate
      * all SNIR changes in the SNIR vector.
      */
-    double per = CalculatePayloadPer(event, channelWidth, &ni, band, staId, relativeMpduStartStop);
+    const auto per =
+        CalculatePayloadPer(event, channelWidth, &ni, band, staId, relativeMpduStartStop);
 
     return PhyEntity::SnrPer(snr, per);
 }
 
 double
 InterferenceHelper::CalculateSnr(Ptr<Event> event,
-                                 uint16_t channelWidth,
+                                 MHz_u channelWidth,
                                  uint8_t nss,
                                  const WifiSpectrumBandInfo& band) const
 {
     NiChangesPerBand ni;
-    double noiseInterferenceW = CalculateNoiseInterferenceW(event, ni, band);
-    double snr = CalculateSnr(event->GetRxPowerW(band), noiseInterferenceW, channelWidth, nss);
-    return snr;
+    const auto noiseInterference = CalculateNoiseInterferenceW(event, ni, band);
+    return CalculateSnr(event->GetRxPower(band), noiseInterference, channelWidth, nss);
 }
 
 PhyEntity::SnrPer
 InterferenceHelper::CalculatePhyHeaderSnrPer(Ptr<Event> event,
-                                             uint16_t channelWidth,
+                                             MHz_u channelWidth,
                                              const WifiSpectrumBandInfo& band,
                                              WifiPpduField header) const
 {
     NS_LOG_FUNCTION(this << band << header);
     NiChangesPerBand ni;
-    double noiseInterferenceW = CalculateNoiseInterferenceW(event, ni, band);
-    double snr = CalculateSnr(event->GetRxPowerW(band), noiseInterferenceW, channelWidth, 1);
+    const auto noiseInterference = CalculateNoiseInterferenceW(event, ni, band);
+    const auto snr = CalculateSnr(event->GetRxPower(band), noiseInterference, channelWidth, 1);
 
     /* calculate the SNIR at the start of the PHY header and accumulate
      * all SNIR changes in the SNIR vector.
      */
-    double per = CalculatePhyHeaderPer(event, &ni, channelWidth, band, header);
+    const auto per = CalculatePhyHeaderPer(event, &ni, channelWidth, band, header);
 
     return PhyEntity::SnrPer(snr, per);
 }
@@ -848,8 +846,12 @@
 InterferenceHelper::IsBandInFrequencyRange(const WifiSpectrumBandInfo& band,
                                            const FrequencyRange& freqRange) const
 {
-    return ((band.frequencies.second > (freqRange.minFrequency * 1e6)) &&
-            (band.frequencies.first < (freqRange.maxFrequency * 1e6)));
+    return std::all_of(band.frequencies.cbegin(),
+                       band.frequencies.cend(),
+                       [&freqRange](const auto& freqs) {
+                           return ((freqs.second > (freqRange.minFrequency * 1e6)) &&
+                                   (freqs.first < (freqRange.maxFrequency * 1e6)));
+                       });
 }
 
 bool
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/interference-helper.h ns-3.43/src/wifi/model/interference-helper.h
--- ns-3.42/src/wifi/model/interference-helper.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/interference-helper.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -74,24 +63,24 @@
      */
     Time GetDuration() const;
     /**
-     * Return the total received power (W).
+     * Return the total received power.
      *
-     * \return the total received power (W)
+     * \return the total received power
      */
-    double GetRxPowerW() const;
+    Watt_u GetRxPower() const;
     /**
-     * Return the received power (W) for a given band.
+     * Return the received power for a given band.
      *
      * \param band the band for which the power should be returned
-     * \return the received power (W) for a given band
+     * \return the received power for a given band
      */
-    double GetRxPowerW(const WifiSpectrumBandInfo& band) const;
+    Watt_u GetRxPower(const WifiSpectrumBandInfo& band) const;
     /**
      * Return the received power (W) for all bands.
      *
      * \return the received power (W) for all bands.
      */
-    const RxPowerWattPerChannelBand& GetRxPowerWPerBand() const;
+    const RxPowerWattPerChannelBand& GetRxPowerPerBand() const;
     /**
      * Update the received power (W) for all bands, i.e. add up the received power
      * to the current received power, for each band.
@@ -149,6 +138,13 @@
     void AddBand(const WifiSpectrumBandInfo& band);
 
     /**
+     * Remove a frequency band.
+     *
+     * \param band the band to be removed
+     */
+    void RemoveBand(const WifiSpectrumBandInfo& band);
+
+    /**
      * Check whether bands are already tracked by this interference helper.
      *
      * \return true if bands are tracked by this interference helper, false otherwise
@@ -193,14 +189,14 @@
     void SetNumberOfReceiveAntennas(uint8_t rx);
 
     /**
-     * \param energyW the minimum energy (W) requested
+     * \param energy the minimum energy requested
      * \param band identify the requested band
      *
      * \returns the expected amount of time the observed
      *          energy on the medium for a given band will
      *          be higher than the requested threshold.
      */
-    Time GetEnergyDuration(double energyW, const WifiSpectrumBandInfo& band);
+    Time GetEnergyDuration(Watt_u energy, const WifiSpectrumBandInfo& band);
 
     /**
      * Add the PPDU-related signal to interference helper.
@@ -237,7 +233,7 @@
      * this class.
      *
      * \param event the event corresponding to the first time the corresponding PPDU arrives
-     * \param channelWidth the channel width used to transmit the PSDU (in MHz)
+     * \param channelWidth the channel width used to transmit the PSDU
      * \param band identify the band used by the PSDU
      * \param staId the station ID of the PSDU (only used for MU)
      * \param relativeMpduStartStop the time window (pair of start and end times) of PHY payload to
@@ -246,7 +242,7 @@
      * \return struct of SNR and PER (with PER being evaluated over the provided time window)
      */
     PhyEntity::SnrPer CalculatePayloadSnrPer(Ptr<Event> event,
-                                             uint16_t channelWidth,
+                                             MHz_u channelWidth,
                                              const WifiSpectrumBandInfo& band,
                                              uint16_t staId,
                                              std::pair<Time, Time> relativeMpduStartStop) const;
@@ -254,14 +250,14 @@
      * Calculate the SNIR for the event (starting from now until the event end).
      *
      * \param event the event corresponding to the first time the corresponding PPDU arrives
-     * \param channelWidth the channel width (in MHz)
+     * \param channelWidth the channel width
      * \param nss the number of spatial streams
      * \param band identify the band used by the PSDU
      *
      * \return the SNR for the PPDU in linear scale
      */
     double CalculateSnr(Ptr<Event> event,
-                        uint16_t channelWidth,
+                        MHz_u channelWidth,
                         uint8_t nss,
                         const WifiSpectrumBandInfo& band) const;
     /**
@@ -269,14 +265,14 @@
      * all SNIR changes in the SNIR vector.
      *
      * \param event the event corresponding to the first time the corresponding PPDU arrives
-     * \param channelWidth the channel width (in MHz) for header measurement
+     * \param channelWidth the channel width for header measurement
      * \param band identify the band used by the PSDU
      * \param header the PHY header to consider
      *
      * \return struct of SNR and PER
      */
     PhyEntity::SnrPer CalculatePhyHeaderSnrPer(Ptr<Event> event,
-                                               uint16_t channelWidth,
+                                               MHz_u channelWidth,
                                                const WifiSpectrumBandInfo& band,
                                                WifiPpduField header) const;
 
@@ -307,16 +303,16 @@
     /**
      * Calculate SNR (linear ratio) from the given signal power and noise+interference power.
      *
-     * \param signal signal power, W
-     * \param noiseInterference noise and interference power, W
-     * \param channelWidth signal width (MHz)
+     * \param signal signal power
+     * \param noiseInterference noise and interference power
+     * \param channelWidth signal width
      * \param nss the number of spatial streams
      *
      * \return SNR in linear scale
      */
-    double CalculateSnr(double signal,
-                        double noiseInterference,
-                        uint16_t channelWidth,
+    double CalculateSnr(Watt_u signal,
+                        Watt_u noiseInterference,
+                        MHz_u channelWidth,
                         uint8_t nss) const;
     /**
      * Calculate the success rate of the chunk given the SINR, duration, and TXVECTOR.
@@ -356,7 +352,6 @@
     std::map<FrequencyRange, bool>
         m_rxing; //!< flag whether it is in receiving state for a given FrequencyRange
 
-  private:
     /**
      * Noise and Interference (thus Ni) event.
      */
@@ -366,23 +361,23 @@
         /**
          * Create a NiChange at the given time and the amount of NI change.
          *
-         * \param power the power in watts
+         * \param power the power
          * \param event causes this NI change
          */
-        NiChange(double power, Ptr<Event> event);
+        NiChange(Watt_u power, Ptr<Event> event);
         ~NiChange();
         /**
          * Return the power
          *
-         * \return the power in watts
+         * \return the power
          */
-        double GetPower() const;
+        Watt_u GetPower() const;
         /**
          * Add a given amount of power.
          *
-         * \param power the power to be added to the existing value in watts
+         * \param power the power to be added to the existing value
          */
-        void AddPower(double power);
+        void AddPower(Watt_u power);
         /**
          * Return the event causes the corresponding NI change
          *
@@ -391,7 +386,7 @@
         Ptr<Event> GetEvent() const;
 
       private:
-        double m_power;     ///< power in watts
+        Watt_u m_power;     ///< power
         Ptr<Event> m_event; ///< event
     };
 
@@ -408,8 +403,11 @@
     /**
      * Map of first power per band
      */
-    using FirstPowerPerBand = std::map<WifiSpectrumBandInfo, double>;
+    using FirstPowerPerBand = std::map<WifiSpectrumBandInfo, Watt_u>;
 
+    NiChangesPerBand m_niChanges; //!< NI Changes for each band
+
+  private:
     /**
      * Check whether a given band is tracked by this interference helper.
      *
@@ -439,7 +437,7 @@
     void AppendEvent(Ptr<Event> event, const FrequencyRange& freqRange, bool isStartHePortionRxing);
 
     /**
-     * Calculate noise and interference power in W.
+     * Calculate noise and interference power.
      *
      * \param event the event
      * \param nis the NiChanges
@@ -447,7 +445,7 @@
      *
      * \return noise and interference power
      */
-    double CalculateNoiseInterferenceW(Ptr<Event> event,
+    Watt_u CalculateNoiseInterferenceW(Ptr<Event> event,
                                        NiChangesPerBand& nis,
                                        const WifiSpectrumBandInfo& band) const;
 
@@ -461,7 +459,7 @@
      * \return the power of all other events preceding the event that belong to the same MU-MIMO
      * transmission
      */
-    double CalculateMuMimoPowerW(Ptr<const Event> event, const WifiSpectrumBandInfo& band) const;
+    Watt_u CalculateMuMimoPowerW(Ptr<const Event> event, const WifiSpectrumBandInfo& band) const;
 
     /**
      * Calculate the error rate of the given PHY payload only in the provided time
@@ -469,7 +467,7 @@
      * multiple chunks (e.g. due to interference from other transmissions).
      *
      * \param event the event
-     * \param channelWidth the channel width used to transmit the PSDU (in MHz)
+     * \param channelWidth the channel width used to transmit the PSDU
      * \param nis the NiChanges
      * \param band identify the band used by the PSDU
      * \param staId the station ID of the PSDU (only used for MU)
@@ -478,7 +476,7 @@
      * \return the error rate of the payload
      */
     double CalculatePayloadPer(Ptr<const Event> event,
-                               uint16_t channelWidth,
+                               MHz_u channelWidth,
                                NiChangesPerBand* nis,
                                const WifiSpectrumBandInfo& band,
                                uint16_t staId,
@@ -489,7 +487,7 @@
      *
      * \param event the event
      * \param nis the NiChanges
-     * \param channelWidth the channel width (in MHz) for header measurement
+     * \param channelWidth the channel width for header measurement
      * \param band the band
      * \param header the PHY header to consider
      *
@@ -497,7 +495,7 @@
      */
     double CalculatePhyHeaderPer(Ptr<const Event> event,
                                  NiChangesPerBand* nis,
-                                 uint16_t channelWidth,
+                                 MHz_u channelWidth,
                                  const WifiSpectrumBandInfo& band,
                                  WifiPpduField header) const;
     /**
@@ -505,7 +503,7 @@
      *
      * \param event the event
      * \param nis the NiChanges
-     * \param channelWidth the channel width (in MHz) for header measurement
+     * \param channelWidth the channel width for header measurement
      * \param band the band
      * \param phyHeaderSections the map of PHY header sections (\see PhyEntity::PhyHeaderSections)
      *
@@ -513,15 +511,14 @@
      */
     double CalculatePhyHeaderSectionPsr(Ptr<const Event> event,
                                         NiChangesPerBand* nis,
-                                        uint16_t channelWidth,
+                                        MHz_u channelWidth,
                                         const WifiSpectrumBandInfo& band,
                                         PhyEntity::PhyHeaderSections phyHeaderSections) const;
 
     double m_noiseFigure;                 //!< noise figure (linear)
     Ptr<ErrorRateModel> m_errorRateModel; //!< error rate model
     uint8_t m_numRxAntennas;         //!< the number of RX antennas in the corresponding receiver
-    NiChangesPerBand m_niChanges;    //!< NI Changes for each band
-    FirstPowerPerBand m_firstPowers; //!< first power of each band in watts
+    FirstPowerPerBand m_firstPowers; //!< first power of each band
 
     /**
      * Returns an iterator to the first NiChange that is later than moment
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mac-rx-middle.cc ns-3.43/src/wifi/model/mac-rx-middle.cc
--- ns-3.42/src/wifi/model/mac-rx-middle.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mac-rx-middle.cc	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mac-rx-middle.h ns-3.43/src/wifi/model/mac-rx-middle.h
--- ns-3.42/src/wifi/model/mac-rx-middle.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mac-rx-middle.h	2024-10-09 16:41:10.120656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mac-tx-middle.cc ns-3.43/src/wifi/model/mac-tx-middle.cc
--- ns-3.42/src/wifi/model/mac-tx-middle.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mac-tx-middle.cc	2024-10-09 16:41:10.120656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mac-tx-middle.h ns-3.43/src/wifi/model/mac-tx-middle.h
--- ns-3.42/src/wifi/model/mac-tx-middle.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mac-tx-middle.h	2024-10-09 16:41:10.120656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mgt-action-headers.cc ns-3.43/src/wifi/model/mgt-action-headers.cc
--- ns-3.42/src/wifi/model/mgt-action-headers.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mgt-action-headers.cc	2024-10-09 16:41:10.120656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -1663,7 +1652,7 @@
 }
 
 void
-FilsDiscHeader::FdCapability::SetOpChannelWidth(uint16_t width)
+FilsDiscHeader::FdCapability::SetOpChannelWidth(MHz_u width)
 {
     m_chWidth = (width == 20 || width == 22) ? 0
                 : (width == 40)              ? 1
@@ -1672,7 +1661,7 @@
                                              : 4;
 }
 
-uint16_t
+MHz_u
 FilsDiscHeader::FdCapability::GetOpChannelWidth() const
 {
     switch (m_chWidth)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mgt-action-headers.h ns-3.43/src/wifi/model/mgt-action-headers.h
--- ns-3.42/src/wifi/model/mgt-action-headers.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mgt-action-headers.h	2024-10-09 16:41:10.120656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -752,12 +741,12 @@
 
         /**
          * \brief Set the BSS Operating Channel Width field based on the operating channel width
-         * \param width the operating channel width in MHz
+         * \param width the operating channel width
          */
-        void SetOpChannelWidth(uint16_t width);
+        void SetOpChannelWidth(MHz_u width);
 
         /// \return the operating channel width encoded in the BSS Operating Channel Width field
-        uint16_t GetOpChannelWidth() const;
+        MHz_u GetOpChannelWidth() const;
 
         /**
          * \brief Set the Maximum Number of Spatial Streams field
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mgt-headers.cc ns-3.43/src/wifi/model/mgt-headers.cc
--- ns-3.42/src/wifi/model/mgt-headers.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mgt-headers.cc	2024-10-09 16:41:10.120656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mgt-headers.h ns-3.43/src/wifi/model/mgt-headers.h
--- ns-3.42/src/wifi/model/mgt-headers.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mgt-headers.h	2024-10-09 16:41:10.124656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mpdu-aggregator.cc ns-3.43/src/wifi/model/mpdu-aggregator.cc
--- ns-3.42/src/wifi/model/mpdu-aggregator.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mpdu-aggregator.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Ghada Badawy <gbadawy@gmail.com>
  *         Stefano Avallone <stavallo@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/mpdu-aggregator.h ns-3.43/src/wifi/model/mpdu-aggregator.h
--- ns-3.42/src/wifi/model/mpdu-aggregator.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/mpdu-aggregator.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2013
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Ghada Badawy <gbadawy@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/msdu-aggregator.cc ns-3.43/src/wifi/model/msdu-aggregator.cc
--- ns-3.42/src/wifi/model/msdu-aggregator.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/msdu-aggregator.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  *         Stefano Avallone <stavallo@unina.it>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/msdu-aggregator.h ns-3.43/src/wifi/model/msdu-aggregator.h
--- ns-3.42/src/wifi/model/msdu-aggregator.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/msdu-aggregator.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/nist-error-rate-model.cc ns-3.43/src/wifi/model/nist-error-rate-model.cc
--- ns-3.42/src/wifi/model/nist-error-rate-model.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/nist-error-rate-model.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Gary Pei <guangyu.pei@boeing.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/nist-error-rate-model.h ns-3.43/src/wifi/model/nist-error-rate-model.h
--- ns-3.42/src/wifi/model/nist-error-rate-model.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/nist-error-rate-model.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/dsss-error-rate-model.cc ns-3.43/src/wifi/model/non-ht/dsss-error-rate-model.cc
--- ns-3.42/src/wifi/model/non-ht/dsss-error-rate-model.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/dsss-error-rate-model.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/dsss-error-rate-model.h ns-3.43/src/wifi/model/non-ht/dsss-error-rate-model.h
--- ns-3.42/src/wifi/model/non-ht/dsss-error-rate-model.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/dsss-error-rate-model.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/dsss-parameter-set.cc ns-3.43/src/wifi/model/non-ht/dsss-parameter-set.cc
--- ns-3.42/src/wifi/model/non-ht/dsss-parameter-set.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/dsss-parameter-set.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/dsss-parameter-set.h ns-3.43/src/wifi/model/non-ht/dsss-parameter-set.h
--- ns-3.42/src/wifi/model/non-ht/dsss-parameter-set.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/dsss-parameter-set.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/dsss-phy.cc ns-3.43/src/wifi/model/non-ht/dsss-phy.cc
--- ns-3.42/src/wifi/model/non-ht/dsss-phy.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/dsss-phy.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -244,7 +233,7 @@
     return status;
 }
 
-uint16_t
+MHz_u
 DsssPhy::GetRxChannelWidth(const WifiTxVector& txVector) const
 {
     if (m_wifiPhy->GetChannelWidth() > 20)
@@ -260,23 +249,24 @@
     return PhyEntity::GetRxChannelWidth(txVector);
 }
 
-uint16_t
+MHz_u
 DsssPhy::GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const
 {
     return ppdu ? GetRxChannelWidth(ppdu->GetTxVector()) : 22;
 }
 
 Ptr<SpectrumValue>
-DsssPhy::GetTxPowerSpectralDensity(double txPowerW, Ptr<const WifiPpdu> ppdu) const
+DsssPhy::GetTxPowerSpectralDensity(Watt_u txPower, Ptr<const WifiPpdu> ppdu) const
 {
+    const auto& centerFrequencies = ppdu->GetTxCenterFreqs();
+    NS_ASSERT(centerFrequencies.size() == 1);
     const auto& txVector = ppdu->GetTxVector();
-    uint16_t centerFrequency = GetCenterFrequencyForChannelWidth(txVector);
-    uint16_t channelWidth = txVector.GetChannelWidth();
-    NS_LOG_FUNCTION(this << centerFrequency << channelWidth << txPowerW);
+    const auto channelWidth = txVector.GetChannelWidth();
+    NS_LOG_FUNCTION(this << centerFrequencies.front() << channelWidth << txPower);
     NS_ABORT_MSG_IF(channelWidth != 22, "Invalid channel width for DSSS");
-    Ptr<SpectrumValue> v =
-        WifiSpectrumValueHelper::CreateDsssTxPowerSpectralDensity(centerFrequency,
-                                                                  txPowerW,
+    auto v =
+        WifiSpectrumValueHelper::CreateDsssTxPowerSpectralDensity(centerFrequencies.front(),
+                                                                  txPower,
                                                                   GetGuardBandwidth(channelWidth));
     return v;
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/dsss-phy.h ns-3.43/src/wifi/model/non-ht/dsss-phy.h
--- ns-3.42/src/wifi/model/non-ht/dsss-phy.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/dsss-phy.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -160,10 +149,10 @@
 
   private:
     PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr<Event> event) override;
-    Ptr<SpectrumValue> GetTxPowerSpectralDensity(double txPowerW,
+    Ptr<SpectrumValue> GetTxPowerSpectralDensity(Watt_u txPower,
                                                  Ptr<const WifiPpdu> ppdu) const override;
-    uint16_t GetRxChannelWidth(const WifiTxVector& txVector) const override;
-    uint16_t GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const override;
+    MHz_u GetRxChannelWidth(const WifiTxVector& txVector) const override;
+    MHz_u GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const override;
 
     /**
      * \param txVector the transmission parameters
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/dsss-ppdu.cc ns-3.43/src/wifi/model/non-ht/dsss-ppdu.cc
--- ns-3.42/src/wifi/model/non-ht/dsss-ppdu.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/dsss-ppdu.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/dsss-ppdu.h ns-3.43/src/wifi/model/non-ht/dsss-ppdu.h
--- ns-3.42/src/wifi/model/non-ht/dsss-ppdu.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/dsss-ppdu.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/erp-information.cc ns-3.43/src/wifi/model/non-ht/erp-information.cc
--- ns-3.42/src/wifi/model/non-ht/erp-information.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/erp-information.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/erp-information.h ns-3.43/src/wifi/model/non-ht/erp-information.h
--- ns-3.42/src/wifi/model/non-ht/erp-information.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/erp-information.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/erp-ofdm-phy.cc ns-3.43/src/wifi/model/non-ht/erp-ofdm-phy.cc
--- ns-3.42/src/wifi/model/non-ht/erp-ofdm-phy.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/erp-ofdm-phy.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -208,7 +197,7 @@
 }
 
 uint64_t
-ErpOfdmPhy::GetPhyRate(const std::string& name, uint16_t channelWidth)
+ErpOfdmPhy::GetPhyRate(const std::string& name, MHz_u channelWidth)
 {
     WifiCodeRate codeRate = GetCodeRate(name);
     uint16_t constellationSize = GetConstellationSize(name);
@@ -229,7 +218,7 @@
 }
 
 uint64_t
-ErpOfdmPhy::GetDataRate(const std::string& name, uint16_t channelWidth)
+ErpOfdmPhy::GetDataRate(const std::string& name, MHz_u channelWidth)
 {
     WifiCodeRate codeRate = GetCodeRate(name);
     uint16_t constellationSize = GetConstellationSize(name);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/erp-ofdm-phy.h ns-3.43/src/wifi/model/non-ht/erp-ofdm-phy.h
--- ns-3.42/src/wifi/model/non-ht/erp-ofdm-phy.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/erp-ofdm-phy.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -145,11 +134,11 @@
      * and is mainly used as a callback for WifiMode operation.
      *
      * \param name the unique name of the ERP-OFDM mode
-     * \param channelWidth the considered channel width in MHz
+     * \param channelWidth the considered channel width
      *
      * \return the physical bit rate of this signal in bps.
      */
-    static uint64_t GetPhyRate(const std::string& name, uint16_t channelWidth);
+    static uint64_t GetPhyRate(const std::string& name, MHz_u channelWidth);
     /**
      * Return the PHY rate corresponding to
      * the supplied TXVECTOR.
@@ -178,11 +167,11 @@
      * and is mainly used as a callback for WifiMode operation.
      *
      * \param name the unique name of the ERP-OFDM mode
-     * \param channelWidth the considered channel width in MHz
+     * \param channelWidth the considered channel width
      *
      * \return the data bit rate of this signal in bps.
      */
-    static uint64_t GetDataRate(const std::string& name, uint16_t channelWidth);
+    static uint64_t GetDataRate(const std::string& name, MHz_u channelWidth);
     /**
      * Check whether the combination in TXVECTOR is allowed.
      * This function is used as a callback for WifiMode operation.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/erp-ofdm-ppdu.cc ns-3.43/src/wifi/model/non-ht/erp-ofdm-ppdu.cc
--- ns-3.42/src/wifi/model/non-ht/erp-ofdm-ppdu.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/erp-ofdm-ppdu.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/erp-ofdm-ppdu.h ns-3.43/src/wifi/model/non-ht/erp-ofdm-ppdu.h
--- ns-3.42/src/wifi/model/non-ht/erp-ofdm-ppdu.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/erp-ofdm-ppdu.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/ofdm-phy.cc ns-3.43/src/wifi/model/non-ht/ofdm-phy.cc
--- ns-3.42/src/wifi/model/non-ht/ofdm-phy.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/ofdm-phy.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -80,8 +69,8 @@
     { "OfdmRate13_5MbpsBW5MHz", { WIFI_CODE_RATE_3_4, 64 } }
 };
 
-/// OFDM rates in bits per second for each bandwidth (MHz)
-const std::map<uint16_t, std::array<uint64_t, 8> > s_ofdmRatesBpsList =
+/// OFDM rates in bits per second for each bandwidth
+const std::map<MHz_u, std::array<uint64_t, 8> > s_ofdmRatesBpsList =
    {{ 20, // MHz
      {  6000000,  9000000, 12000000, 18000000,
        24000000, 36000000, 48000000, 54000000 }},
@@ -96,11 +85,11 @@
 // clang-format on
 
 /**
- * Get the array of possible OFDM rates for each bandwidth (MHz).
+ * Get the array of possible OFDM rates for each bandwidth.
  *
  * \return the OFDM rates in bits per second
  */
-const std::map<uint16_t, std::array<uint64_t, 8>>&
+const std::map<MHz_u, std::array<uint64_t, 8>>&
 GetOfdmRatesBpsList()
 {
     return s_ofdmRatesBpsList;
@@ -168,7 +157,7 @@
 WifiMode
 OfdmPhy::GetHeaderMode(const WifiTxVector& txVector) const
 {
-    switch (txVector.GetChannelWidth())
+    switch (static_cast<uint16_t>(txVector.GetChannelWidth()))
     {
     case 5:
         return GetOfdmRate1_5MbpsBW5MHz();
@@ -207,7 +196,7 @@
 Time
 OfdmPhy::GetPreambleDuration(const WifiTxVector& txVector) const
 {
-    switch (txVector.GetChannelWidth())
+    switch (static_cast<uint16_t>(txVector.GetChannelWidth()))
     {
     case 20:
     default:
@@ -231,7 +220,7 @@
 Time
 OfdmPhy::GetHeaderDuration(const WifiTxVector& txVector) const
 {
-    switch (txVector.GetChannelWidth())
+    switch (static_cast<uint16_t>(txVector.GetChannelWidth()))
     {
     case 20:
     default:
@@ -344,7 +333,7 @@
 bool
 OfdmPhy::IsChannelWidthSupported(Ptr<const WifiPpdu> ppdu) const
 {
-    uint16_t channelWidth = ppdu->GetTxVector().GetChannelWidth();
+    const auto channelWidth = ppdu->GetTxVector().GetChannelWidth();
     if ((channelWidth >= 40) && (channelWidth > m_wifiPhy->GetChannelWidth()))
     {
         NS_LOG_DEBUG("Packet reception could not be started because not enough channel width ("
@@ -365,20 +354,20 @@
 }
 
 Ptr<SpectrumValue>
-OfdmPhy::GetTxPowerSpectralDensity(double txPowerW, Ptr<const WifiPpdu> ppdu) const
+OfdmPhy::GetTxPowerSpectralDensity(Watt_u txPower, Ptr<const WifiPpdu> ppdu) const
 {
+    const auto& centerFrequencies = ppdu->GetTxCenterFreqs();
     const auto& txVector = ppdu->GetTxVector();
-    uint16_t centerFrequency = GetCenterFrequencyForChannelWidth(txVector);
-    uint16_t channelWidth = txVector.GetChannelWidth();
-    NS_LOG_FUNCTION(this << centerFrequency << channelWidth << txPowerW);
+    const auto channelWidth = txVector.GetChannelWidth();
+    NS_LOG_FUNCTION(this << centerFrequencies.front() << channelWidth << txPower);
     const auto& txMaskRejectionParams = GetTxMaskRejectionParams();
     Ptr<SpectrumValue> v;
     if (txVector.IsNonHtDuplicate())
     {
         v = WifiSpectrumValueHelper::CreateDuplicated20MhzTxPowerSpectralDensity(
-            centerFrequency,
+            centerFrequencies,
             channelWidth,
-            txPowerW,
+            txPower,
             GetGuardBandwidth(channelWidth),
             std::get<0>(txMaskRejectionParams),
             std::get<1>(txMaskRejectionParams),
@@ -386,10 +375,11 @@
     }
     else
     {
+        NS_ASSERT(centerFrequencies.size() == 1);
         v = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(
-            centerFrequency,
+            centerFrequencies.front(),
             channelWidth,
-            txPowerW,
+            txPower,
             GetGuardBandwidth(channelWidth),
             std::get<0>(txMaskRejectionParams),
             std::get<1>(txMaskRejectionParams),
@@ -411,9 +401,9 @@
 }
 
 WifiMode
-OfdmPhy::GetOfdmRate(uint64_t rate, uint16_t bw)
+OfdmPhy::GetOfdmRate(uint64_t rate, MHz_u bw)
 {
-    switch (bw)
+    switch (static_cast<uint16_t>(bw))
     {
     case 20:
         switch (rate)
@@ -560,7 +550,7 @@
 }
 
 uint64_t
-OfdmPhy::GetPhyRate(const std::string& name, uint16_t channelWidth)
+OfdmPhy::GetPhyRate(const std::string& name, MHz_u channelWidth)
 {
     WifiCodeRate codeRate = GetCodeRate(name);
     uint64_t dataRate = GetDataRate(name, channelWidth);
@@ -604,7 +594,7 @@
 }
 
 uint64_t
-OfdmPhy::GetDataRate(const std::string& name, uint16_t channelWidth)
+OfdmPhy::GetDataRate(const std::string& name, MHz_u channelWidth)
 {
     WifiCodeRate codeRate = GetCodeRate(name);
     uint16_t constellationSize = GetConstellationSize(name);
@@ -612,7 +602,7 @@
 }
 
 uint64_t
-OfdmPhy::CalculateDataRate(WifiCodeRate codeRate, uint16_t constellationSize, uint16_t channelWidth)
+OfdmPhy::CalculateDataRate(WifiCodeRate codeRate, uint16_t constellationSize, MHz_u channelWidth)
 {
     return CalculateDataRate(GetSymbolDuration(channelWidth),
                              GetUsableSubcarriers(),
@@ -637,7 +627,7 @@
 }
 
 Time
-OfdmPhy::GetSymbolDuration(uint16_t channelWidth)
+OfdmPhy::GetSymbolDuration(MHz_u channelWidth)
 {
     Time symbolDuration = MicroSeconds(4);
     uint8_t bwFactor = 1;
@@ -664,24 +654,24 @@
     return 4095;
 }
 
-uint16_t
+MHz_u
 OfdmPhy::GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const
 {
     if (!ppdu)
     {
-        return 20;
+        return std::min<MHz_u>(m_wifiPhy->GetChannelWidth(), 20);
     }
     return GetRxChannelWidth(ppdu->GetTxVector());
 }
 
-double
+dBm_u
 OfdmPhy::GetCcaThreshold(const Ptr<const WifiPpdu> ppdu, WifiChannelListType channelType) const
 {
     if (ppdu && ppdu->GetTxVector().GetChannelWidth() < 20)
     {
         // scale CCA sensitivity threshold for BW of 5 and 10 MHz
-        uint16_t bw = GetRxChannelWidth(ppdu->GetTxVector());
-        double thresholdW = DbmToW(m_wifiPhy->GetCcaSensitivityThreshold()) * (bw / 20.0);
+        const auto bw = GetRxChannelWidth(ppdu->GetTxVector());
+        const auto thresholdW = DbmToW(m_wifiPhy->GetCcaSensitivityThreshold()) * (bw / 20.0);
         return WToDbm(thresholdW);
     }
     return PhyEntity::GetCcaThreshold(ppdu, channelType);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/ofdm-phy.h ns-3.43/src/wifi/model/non-ht/ofdm-phy.h
--- ns-3.42/src/wifi/model/non-ht/ofdm-phy.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/ofdm-phy.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -87,8 +76,8 @@
     Ptr<WifiPpdu> BuildPpdu(const WifiConstPsduMap& psdus,
                             const WifiTxVector& txVector,
                             Time ppduDuration) override;
-    double GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
-                           WifiChannelListType channelType) const override;
+    dBm_u GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
+                          WifiChannelListType channelType) const override;
     Ptr<const WifiPpdu> GetRxPpduFromTxPpdu(Ptr<const WifiPpdu> ppdu) override;
 
     /**
@@ -101,10 +90,10 @@
      * the channel bandwidth (20, 10, or 5 MHz).
      *
      * \param rate the rate in bps
-     * \param bw the bandwidth in MHz
+     * \param bw the bandwidth
      * \return a WifiMode for OFDM
      */
-    static WifiMode GetOfdmRate(uint64_t rate, uint16_t bw = 20);
+    static WifiMode GetOfdmRate(uint64_t rate, MHz_u bw = 20);
     /**
      * Return a WifiMode for OFDM at 6 Mbps.
      *
@@ -274,11 +263,11 @@
      * and is mainly used as a callback for WifiMode operation.
      *
      * \param name the unique name of the OFDM mode
-     * \param channelWidth the considered channel width in MHz
+     * \param channelWidth the considered channel width
      *
      * \return the physical bit rate of this signal in bps.
      */
-    static uint64_t GetPhyRate(const std::string& name, uint16_t channelWidth);
+    static uint64_t GetPhyRate(const std::string& name, MHz_u channelWidth);
 
     /**
      * Return the PHY rate corresponding to
@@ -308,11 +297,11 @@
      * is mainly used as a callback for WifiMode operation.
      *
      * \param name the unique name of the OFDM mode
-     * \param channelWidth the considered channel width in MHz
+     * \param channelWidth the considered channel width
      *
      * \return the data bit rate of this signal in bps.
      */
-    static uint64_t GetDataRate(const std::string& name, uint16_t channelWidth);
+    static uint64_t GetDataRate(const std::string& name, MHz_u channelWidth);
     /**
      * Check whether the combination in TXVECTOR is allowed.
      * This function is used as a callback for WifiMode operation.
@@ -324,10 +313,10 @@
 
   protected:
     PhyFieldRxStatus DoEndReceiveField(WifiPpduField field, Ptr<Event> event) override;
-    Ptr<SpectrumValue> GetTxPowerSpectralDensity(double txPowerW,
+    Ptr<SpectrumValue> GetTxPowerSpectralDensity(Watt_u txPower,
                                                  Ptr<const WifiPpdu> ppdu) const override;
     uint32_t GetMaxPsduSize() const override;
-    uint16_t GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const override;
+    MHz_u GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const override;
 
     /**
      * \param txVector the transmission parameters
@@ -404,13 +393,13 @@
      *
      * \param codeRate the code rate of the mode
      * \param constellationSize the size of modulation constellation
-     * \param channelWidth the considered channel width in MHz
+     * \param channelWidth the considered channel width
      *
      * \return the data bit rate of this signal in bps.
      */
     static uint64_t CalculateDataRate(WifiCodeRate codeRate,
                                       uint16_t constellationSize,
-                                      uint16_t channelWidth);
+                                      MHz_u channelWidth);
     /**
      * Calculates data rate from the supplied parameters.
      *
@@ -432,10 +421,10 @@
     static uint16_t GetUsableSubcarriers();
 
     /**
-     * \param channelWidth the channel width in MHz
+     * \param channelWidth the channel width
      * \return the symbol duration
      */
-    static Time GetSymbolDuration(uint16_t channelWidth);
+    static Time GetSymbolDuration(MHz_u channelWidth);
 
   private:
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/ofdm-ppdu.cc ns-3.43/src/wifi/model/non-ht/ofdm-ppdu.cc
--- ns-3.42/src/wifi/model/non-ht/ofdm-ppdu.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/ofdm-ppdu.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
@@ -102,7 +91,7 @@
 }
 
 void
-OfdmPpdu::LSigHeader::SetRate(uint64_t rate, uint16_t channelWidth)
+OfdmPpdu::LSigHeader::SetRate(uint64_t rate, MHz_u channelWidth)
 {
     if (channelWidth == 5)
     {
@@ -155,7 +144,7 @@
 }
 
 uint64_t
-OfdmPpdu::LSigHeader::GetRate(uint16_t channelWidth) const
+OfdmPpdu::LSigHeader::GetRate(MHz_u channelWidth) const
 {
     uint64_t rate = 0;
     switch (m_rate)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-ht/ofdm-ppdu.h ns-3.43/src/wifi/model/non-ht/ofdm-ppdu.h
--- ns-3.42/src/wifi/model/non-ht/ofdm-ppdu.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-ht/ofdm-ppdu.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
@@ -59,16 +48,16 @@
          * Fill the RATE field of L-SIG (in bit/s).
          *
          * \param rate the RATE field of L-SIG expressed in bit/s
-         * \param channelWidth the channel width (in MHz)
+         * \param channelWidth the channel width
          */
-        void SetRate(uint64_t rate, uint16_t channelWidth = 20);
+        void SetRate(uint64_t rate, MHz_u channelWidth = 20);
         /**
          * Return the RATE field of L-SIG (in bit/s).
          *
-         * \param channelWidth the channel width (in MHz)
+         * \param channelWidth the channel width
          * \return the RATE field of L-SIG expressed in bit/s
          */
-        uint64_t GetRate(uint16_t channelWidth = 20) const;
+        uint64_t GetRate(MHz_u channelWidth = 20) const;
         /**
          * Fill the LENGTH field of L-SIG (in bytes).
          *
@@ -137,9 +126,9 @@
      */
     virtual void SetTxVectorFromLSigHeader(WifiTxVector& txVector, const LSigHeader& lSig) const;
 
-    uint16_t m_channelWidth; //!< the channel width used to transmit that PPDU in MHz (needed to
-                             //!< distinguish 5 MHz, 10 MHz or 20 MHz PPDUs)
-};                           // class OfdmPpdu
+    MHz_u m_channelWidth; //!< the channel width used to transmit that PPDU
+                          //!< (needed to distinguish 5 MHz, 10 MHz or 20 MHz PPDUs)
+};                        // class OfdmPpdu
 
 } // namespace ns3
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-inheritance.cc ns-3.43/src/wifi/model/non-inheritance.cc
--- ns-3.42/src/wifi/model/non-inheritance.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-inheritance.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/non-inheritance.h ns-3.43/src/wifi/model/non-inheritance.h
--- ns-3.42/src/wifi/model/non-inheritance.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/non-inheritance.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/originator-block-ack-agreement.cc ns-3.43/src/wifi/model/originator-block-ack-agreement.cc
--- ns-3.42/src/wifi/model/originator-block-ack-agreement.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/originator-block-ack-agreement.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mirko Banchi <mk.banchi@gmail.com>
  *          Tommaso Pecorella <tommaso.pecorella@unifi.it>
@@ -99,6 +88,30 @@
     m_txWindow.Init(m_startingSeq, m_bufferSize);
 }
 
+bool
+OriginatorBlockAckAgreement::AllAckedMpdusInTxWindow(const std::set<uint16_t>& seqNumbers) const
+{
+    std::set<std::size_t> distances;
+    for (const auto seqN : seqNumbers)
+    {
+        distances.insert(GetDistance(seqN));
+    }
+
+    for (std::size_t i = 0; i < m_txWindow.GetWinSize(); ++i)
+    {
+        if (distances.contains(i))
+        {
+            continue; // this is one of the positions to ignore
+        }
+        if (!m_txWindow.At(i))
+        {
+            return false; // this position is available or contains an unacknowledged MPDU
+        }
+    }
+    NS_LOG_INFO("TX window is blocked");
+    return true;
+}
+
 void
 OriginatorBlockAckAgreement::AdvanceTxWindow()
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/originator-block-ack-agreement.h ns-3.43/src/wifi/model/originator-block-ack-agreement.h
--- ns-3.42/src/wifi/model/originator-block-ack-agreement.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/originator-block-ack-agreement.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  * Author: Tommaso Pecorella <tommaso.pecorella@unifi.it>
@@ -23,6 +12,8 @@
 #include "block-ack-agreement.h"
 #include "block-ack-window.h"
 
+#include <set>
+
 class OriginatorBlockAckWindowTest;
 
 namespace ns3
@@ -35,21 +26,29 @@
  * Maintains the state and information about transmitted MPDUs with Ack Policy set to Block Ack
  * for an originator station. The state diagram is as follows:
  *
-   \verbatim
-    /------------\ send ADDBARequest ----------------
-    |   START    |------------------>|   PENDING    |-------
-    \------------/                   ----------------       \
-          ^            receive     /        |                \
-          |        ADDBAResponse  /         |                 \
-          |          (failure)   v          |                  \
-          |        ---------------          |                   --------------------->
- ---------------- |        |  REJECTED   |          |          receive ADDBAResponse (success)  |
- ESTABLISHED | |        ---------------          |      no            -------------------->
- ---------------- |           receive    ^          | ADDBAResponse     / |        ADDBAResponse \
- |                  / |          (failure)     \        v                 / | ---------------- /
-          |-------------------------|   NO_REPLY   |---------
-            Reset after timeout     ----------------
+ */
+// clang-format off
+/**
+ * \verbatim
+   /------------\ send ADDBARequest ----------------
+   |   START    |------------------>|   PENDING    |-------
+   \------------/                   ----------------       \
+         ^            receive     /        |                \
+         |        ADDBAResponse  /         |                 \
+         |          (failure)   v          |                  \
+         |        ---------------          |                   --------------------->  ----------------
+         |        |  REJECTED   |          |          receive ADDBAResponse (success)  |  ESTABLISHED |
+         |        ---------------          |      no            -------------------->  ----------------
+         |           receive    ^          | ADDBAResponse     /
+         |        ADDBAResponse  \         |                  /
+         |          (failure)     \        v                 /
+         |                         ----------------         /
+         |-------------------------|   NO_REPLY   |---------
+           Reset after timeout     ----------------
    \endverbatim
+*/
+// clang-format on
+/**
  *
  * See also OriginatorBlockAckAgreement::State
  */
@@ -193,6 +192,16 @@
      */
     void NotifyDiscardedMpdu(Ptr<const WifiMpdu> mpdu);
 
+    /**
+     * Check whether all the MPDUs in the TX window other than the given ones have been already
+     * acknowledged.
+     *
+     * \param seqNumbers the sequence numbers of the given MPDUs
+     * \return whether all the MPDUs in the TX window other than the given ones have been already
+     *         acknowledged
+     */
+    bool AllAckedMpdusInTxWindow(const std::set<uint16_t>& seqNumbers) const;
+
   private:
     /**
      * Advance the transmit window so that the starting sequence number is the
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/phy-entity.cc ns-3.43/src/wifi/model/phy-entity.cc
--- ns-3.42/src/wifi/model/phy-entity.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/phy-entity.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,23 +1,12 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy and
- * spectrum-wifi-phy) Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (for logic ported from
- * wifi-phy)
+ *                                                           spectrum-wifi-phy)
+ *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (for logic ported from wifi-phy)
  */
 
 #include "phy-entity.h"
@@ -31,6 +20,7 @@
 #include "wifi-utils.h"
 
 #include "ns3/assert.h"
+#include "ns3/data-rate.h"
 #include "ns3/log.h"
 #include "ns3/packet.h"
 #include "ns3/simulator.h"
@@ -196,13 +186,13 @@
     {
         NS_FATAL_ERROR("Unsupported PPDU field");
     }
-    return MicroSeconds(0); // should be overloaded
+    return Time(); // should be overloaded
 }
 
 Time
 PhyEntity::CalculatePhyPreambleAndHeaderDuration(const WifiTxVector& txVector) const
 {
-    Time duration = MicroSeconds(0);
+    Time duration;
     for (uint8_t field = WIFI_PPDU_FIELD_PREAMBLE; field < WIFI_PPDU_FIELD_DATA; ++field)
     {
         duration += GetDuration(static_cast<WifiPpduField>(field), txVector);
@@ -259,7 +249,7 @@
     {
         return CalculatePhyPreambleAndHeaderDuration(txVector);
     }
-    const auto& sections = GetPhyHeaderSections(txVector, NanoSeconds(0));
+    const auto& sections = GetPhyHeaderSections(txVector, Time());
     auto it = sections.find(field);
     NS_ASSERT(it != sections.end());
     const auto& startStopTimes = it->second.first;
@@ -270,7 +260,7 @@
 PhyEntity::SnrPer
 PhyEntity::GetPhyHeaderSnrPer(WifiPpduField field, Ptr<Event> event) const
 {
-    uint16_t measurementChannelWidth = GetMeasurementChannelWidth(event->GetPpdu());
+    const auto measurementChannelWidth = GetMeasurementChannelWidth(event->GetPpdu());
     return m_wifiPhy->m_interference->CalculatePhyHeaderSnrPer(
         event,
         measurementChannelWidth,
@@ -599,8 +589,8 @@
     Ptr<const WifiPsdu> psdu = GetAddressedPsduInPpdu(ppdu);
     const auto& txVector = event->GetPpdu()->GetTxVector();
     uint16_t staId = GetStaId(ppdu);
-    Time endOfMpduDuration = NanoSeconds(0);
-    Time relativeStart = NanoSeconds(0);
+    Time endOfMpduDuration;
+    Time relativeStart;
     Time psduDuration = ppdu->GetTxDuration() - CalculatePhyPreambleAndHeaderDuration(txVector);
     Time remainingAmpduDuration = psduDuration;
     size_t nMpdus = psdu->GetNMpdus();
@@ -611,6 +601,34 @@
     auto mpdu = psdu->begin();
     for (size_t i = 0; i < nMpdus && mpdu != psdu->end(); ++mpdu)
     {
+        if (m_wifiPhy->m_notifyRxMacHeaderEnd)
+        {
+            // calculate MAC header size (including A-MPDU subframe header, if present)
+            auto macHdrSize =
+                (*mpdu)->GetHeader().GetSerializedSize() + (mpduType == NORMAL_MPDU ? 0 : 4);
+            // calculate the (approximate) duration of the MAC header TX
+            auto macHdrDuration = DataRate(txVector.GetMode(staId).GetDataRate(txVector, staId))
+                                      .CalculateBytesTxTime(macHdrSize);
+            const auto widthBand = GetChannelWidthAndBand(txVector, staId);
+            const auto snrPer = m_wifiPhy->m_interference->CalculatePayloadSnrPer(
+                event,
+                widthBand.first,
+                widthBand.second,
+                staId,
+                {relativeStart, relativeStart + macHdrDuration});
+            if (GetRandomValue() > snrPer.per)
+            {
+                // interference level should permit to correctly decode the MAC header
+                m_endOfMacHdrEvents.push_back(
+                    Simulator::Schedule(endOfMpduDuration + macHdrDuration, [=, this]() {
+                        m_wifiPhy->m_phyRxMacHeaderEndTrace((*mpdu)->GetHeader(),
+                                                            txVector,
+                                                            remainingAmpduDuration -
+                                                                macHdrDuration);
+                    }));
+            }
+        }
+
         uint32_t size = (mpduType == NORMAL_MPDU) ? psdu->GetSize() : psdu->GetAmpduSubframeSize(i);
         Time mpduDuration = m_wifiPhy->GetPayloadDuration(size,
                                                           txVector,
@@ -624,8 +642,7 @@
         remainingAmpduDuration -= mpduDuration;
         if (i == (nMpdus - 1) && !remainingAmpduDuration.IsZero()) // no more MPDUs coming
         {
-            if (remainingAmpduDuration <
-                NanoSeconds(txVector.GetGuardInterval())) // enables to ignore padding
+            if (remainingAmpduDuration < txVector.GetGuardInterval()) // enables to ignore padding
             {
                 mpduDuration += remainingAmpduDuration; // apply a correction just in case rounding
                                                         // had induced slight shift
@@ -641,7 +658,7 @@
                                                         &PhyEntity::EndOfMpdu,
                                                         this,
                                                         event,
-                                                        Create<WifiPsdu>(*mpdu, false),
+                                                        *mpdu,
                                                         i,
                                                         relativeStart,
                                                         mpduDuration));
@@ -655,7 +672,7 @@
 
 void
 PhyEntity::EndOfMpdu(Ptr<Event> event,
-                     Ptr<const WifiPsdu> psdu,
+                     Ptr<WifiMpdu> mpdu,
                      size_t mpduIndex,
                      Time relativeStart,
                      Time mpduDuration)
@@ -666,7 +683,7 @@
     uint16_t staId = GetStaId(ppdu);
 
     std::pair<bool, SignalNoiseDbm> rxInfo =
-        GetReceptionStatus(psdu, event, staId, relativeStart, mpduDuration);
+        GetReceptionStatus(mpdu, event, staId, relativeStart, mpduDuration);
     NS_LOG_DEBUG("Extracted MPDU #" << mpduIndex << ": duration: " << mpduDuration.As(Time::NS)
                                     << ", correct reception: " << rxInfo.first << ", Signal/Noise: "
                                     << rxInfo.second.signal << "/" << rxInfo.second.noise << "dBm");
@@ -676,7 +693,7 @@
     signalNoiseIt->second = rxInfo.second;
 
     RxSignalInfo rxSignalInfo;
-    rxSignalInfo.snr = rxInfo.second.signal / rxInfo.second.noise;
+    rxSignalInfo.snr = DbToRatio(rxInfo.second.signal - rxInfo.second.noise);
     rxSignalInfo.rssi = rxInfo.second.signal;
 
     auto statusPerMpduIt = m_statusPerMpduMap.find({ppdu->GetUid(), staId});
@@ -686,7 +703,7 @@
     if (rxInfo.first && GetAddressedPsduInPpdu(ppdu)->GetNMpdus() > 1)
     {
         // only done for correct MPDU that is part of an A-MPDU
-        m_state->NotifyRxMpdu(psdu, rxSignalInfo, txVector);
+        m_state->NotifyRxMpdu(Create<const WifiPsdu>(mpdu, false), rxSignalInfo, txVector);
     }
 }
 
@@ -700,10 +717,10 @@
     NS_ASSERT(event->GetEndTime() == Simulator::Now());
     const auto staId = GetStaId(ppdu);
     const auto channelWidthAndBand = GetChannelWidthAndBand(txVector, staId);
-    double snr = m_wifiPhy->m_interference->CalculateSnr(event,
-                                                         channelWidthAndBand.first,
-                                                         txVector.GetNss(staId),
-                                                         channelWidthAndBand.second);
+    const auto snr = m_wifiPhy->m_interference->CalculateSnr(event,
+                                                             channelWidthAndBand.first,
+                                                             txVector.GetNss(staId),
+                                                             channelWidthAndBand.second);
 
     Ptr<const WifiPsdu> psdu = GetAddressedPsduInPpdu(ppdu);
     m_wifiPhy->NotifyRxEnd(psdu);
@@ -784,13 +801,13 @@
 }
 
 std::pair<bool, SignalNoiseDbm>
-PhyEntity::GetReceptionStatus(Ptr<const WifiPsdu> psdu,
+PhyEntity::GetReceptionStatus(Ptr<WifiMpdu> mpdu,
                               Ptr<Event> event,
                               uint16_t staId,
                               Time relativeMpduStart,
                               Time mpduDuration)
 {
-    NS_LOG_FUNCTION(this << *psdu << *event << staId << relativeMpduStart << mpduDuration);
+    NS_LOG_FUNCTION(this << *mpdu << *event << staId << relativeMpduStart << mpduDuration);
     const auto channelWidthAndBand = GetChannelWidthAndBand(event->GetPpdu()->GetTxVector(), staId);
     SnrPer snrPer = m_wifiPhy->m_interference->CalculatePayloadSnrPer(
         event,
@@ -802,7 +819,7 @@
     WifiMode mode = event->GetPpdu()->GetTxVector().GetMode(staId);
     NS_LOG_DEBUG("rate=" << (mode.GetDataRate(event->GetPpdu()->GetTxVector(), staId))
                          << ", SNR(dB)=" << RatioToDb(snrPer.snr) << ", PER=" << snrPer.per
-                         << ", size=" << psdu->GetSize()
+                         << ", size=" << mpdu->GetSize()
                          << ", relativeStart = " << relativeMpduStart.As(Time::NS)
                          << ", duration = " << mpduDuration.As(Time::NS));
 
@@ -811,26 +828,26 @@
     // Receive error model is optional, if we have an error model and
     // it indicates that the packet is corrupt, drop the packet.
     SignalNoiseDbm signalNoise;
-    signalNoise.signal = WToDbm(event->GetRxPowerW(channelWidthAndBand.second));
-    signalNoise.noise = WToDbm(event->GetRxPowerW(channelWidthAndBand.second) / snrPer.snr);
+    signalNoise.signal = WToDbm(event->GetRxPower(channelWidthAndBand.second));
+    signalNoise.noise = WToDbm(event->GetRxPower(channelWidthAndBand.second) / snrPer.snr);
     if (GetRandomValue() > snrPer.per &&
         !(m_wifiPhy->m_postReceptionErrorModel &&
-          m_wifiPhy->m_postReceptionErrorModel->IsCorrupt(psdu->GetPacket()->Copy())))
+          m_wifiPhy->m_postReceptionErrorModel->IsCorrupt(mpdu->GetPacket()->Copy())))
     {
-        NS_LOG_DEBUG("Reception succeeded: " << psdu);
+        NS_LOG_DEBUG("Reception succeeded: " << *mpdu);
         return {true, signalNoise};
     }
     else
     {
-        NS_LOG_DEBUG("Reception failed: " << psdu);
+        NS_LOG_DEBUG("Reception failed: " << *mpdu);
         return {false, signalNoise};
     }
 }
 
-std::pair<uint16_t, WifiSpectrumBandInfo>
+std::pair<MHz_u, WifiSpectrumBandInfo>
 PhyEntity::GetChannelWidthAndBand(const WifiTxVector& txVector, uint16_t /* staId */) const
 {
-    uint16_t channelWidth = GetRxChannelWidth(txVector);
+    const auto channelWidth = GetRxChannelWidth(txVector);
     return {channelWidth, GetPrimaryBand(channelWidth)};
 }
 
@@ -925,6 +942,11 @@
         NS_ASSERT(endOfMpduEvent.IsExpired());
     }
     m_endOfMpduEvents.clear();
+    for (const auto& endOfMacHdrEvent : m_endOfMacHdrEvents)
+    {
+        NS_ASSERT(endOfMacHdrEvent.IsExpired());
+    }
+    m_endOfMacHdrEvents.clear();
     if (reset)
     {
         m_wifiPhy->Reset();
@@ -945,7 +967,10 @@
 PhyEntity::StartPreambleDetectionPeriod(Ptr<Event> event)
 {
     NS_LOG_FUNCTION(this << *event);
-    NS_LOG_DEBUG("Sync to signal (power=" << WToDbm(GetRxPowerWForPpdu(event)) << "dBm)");
+    const auto rxPower = GetRxPowerForPpdu(event);
+    NS_LOG_DEBUG("Sync to signal (power=" << (rxPower > 0.0
+                                                  ? std::to_string(WToDbm(rxPower)) + "dBm)"
+                                                  : std::to_string(rxPower) + "W)"));
     m_wifiPhy->m_interference->NotifyRxStart(
         m_wifiPhy->GetCurrentFrequencyRange()); // We need to notify it now so that it starts
                                                 // recording events
@@ -965,18 +990,18 @@
                                                        // scheduled by this method upon success
 
     // calculate PER on the measurement channel for PHY headers
-    uint16_t measurementChannelWidth = GetMeasurementChannelWidth(event->GetPpdu());
+    const auto measurementChannelWidth = GetMeasurementChannelWidth(event->GetPpdu());
     auto measurementBand = GetPrimaryBand(measurementChannelWidth);
-    double maxRxPowerW = -1; // in case current event may not be sent on measurement channel
-                             // (rxPowerW would be equal to 0)
+    std::optional<Watt_u>
+        maxRxPower; // in case current event may not be sent on measurement channel
     Ptr<Event> maxEvent;
     NS_ASSERT(!m_wifiPhy->m_currentPreambleEvents.empty());
     for (auto preambleEvent : m_wifiPhy->m_currentPreambleEvents)
     {
-        double rxPowerW = preambleEvent.second->GetRxPowerW(measurementBand);
-        if (rxPowerW > maxRxPowerW)
+        const auto rxPower = preambleEvent.second->GetRxPower(measurementBand);
+        if (!maxRxPower || (rxPower > *maxRxPower))
         {
-            maxRxPowerW = rxPowerW;
+            maxRxPower = rxPower;
             maxEvent = preambleEvent.second;
         }
     }
@@ -1004,18 +1029,18 @@
 
     m_wifiPhy->m_currentEvent = event;
 
-    double snr = m_wifiPhy->m_interference->CalculateSnr(m_wifiPhy->m_currentEvent,
-                                                         measurementChannelWidth,
-                                                         1,
-                                                         measurementBand);
+    const auto snr = m_wifiPhy->m_interference->CalculateSnr(m_wifiPhy->m_currentEvent,
+                                                             measurementChannelWidth,
+                                                             1,
+                                                             measurementBand);
     NS_LOG_DEBUG("SNR(dB)=" << RatioToDb(snr) << " at end of preamble detection period");
 
-    if ((!m_wifiPhy->m_preambleDetectionModel && maxRxPowerW > 0.0) ||
-        (m_wifiPhy->m_preambleDetectionModel &&
-         m_wifiPhy->m_preambleDetectionModel->IsPreambleDetected(
-             m_wifiPhy->m_currentEvent->GetRxPowerW(measurementBand),
-             snr,
-             measurementChannelWidth)))
+    if (const auto power = m_wifiPhy->m_currentEvent->GetRxPower(measurementBand);
+        (!m_wifiPhy->m_preambleDetectionModel && maxRxPower && (*maxRxPower > 0.0)) ||
+        (m_wifiPhy->m_preambleDetectionModel && power > 0.0 &&
+         m_wifiPhy->m_preambleDetectionModel->IsPreambleDetected(WToDbm(power),
+                                                                 snr,
+                                                                 measurementChannelWidth)))
     {
         // A bit convoluted but it enables to sync all PHYs
         for (auto& it : m_wifiPhy->m_phyEntities)
@@ -1059,11 +1084,11 @@
         m_wifiPhy->m_interference->NotifyRxStart(m_wifiPhy->GetCurrentFrequencyRange());
 
         m_wifiPhy->NotifyRxBegin(GetAddressedPsduInPpdu(m_wifiPhy->m_currentEvent->GetPpdu()),
-                                 m_wifiPhy->m_currentEvent->GetRxPowerWPerBand());
+                                 m_wifiPhy->m_currentEvent->GetRxPowerPerBand());
         m_wifiPhy->m_timeLastPreambleDetected = Simulator::Now();
 
         // Continue receiving preamble
-        Time durationTillEnd =
+        const auto durationTillEnd =
             GetDuration(WIFI_PPDU_FIELD_PREAMBLE, event->GetPpdu()->GetTxVector()) -
             m_wifiPhy->GetPreambleDetectionDuration();
         m_wifiPhy->NotifyCcaBusy(event->GetPpdu(),
@@ -1122,6 +1147,11 @@
         endMpduEvent.Cancel();
     }
     m_endOfMpduEvents.clear();
+    for (auto& endMacHdrEvent : m_endOfMacHdrEvents)
+    {
+        endMacHdrEvent.Cancel();
+    }
+    m_endOfMacHdrEvents.clear();
 }
 
 bool
@@ -1160,6 +1190,11 @@
             endMpduEvent.Cancel();
         }
         m_endOfMpduEvents.clear();
+        for (auto& endMacHdrEvent : m_endOfMacHdrEvents)
+        {
+            endMacHdrEvent.Cancel();
+        }
+        m_endOfMacHdrEvents.clear();
     }
 }
 
@@ -1190,10 +1225,10 @@
     return m_wifiPhy->m_random->GetValue();
 }
 
-double
-PhyEntity::GetRxPowerWForPpdu(Ptr<Event> event) const
+Watt_u
+PhyEntity::GetRxPowerForPpdu(Ptr<Event> event) const
 {
-    return event->GetRxPowerW(GetPrimaryBand(GetMeasurementChannelWidth(event->GetPpdu())));
+    return event->GetRxPower(GetPrimaryBand(GetMeasurementChannelWidth(event->GetPpdu())));
 }
 
 Ptr<const Event>
@@ -1203,31 +1238,31 @@
 }
 
 WifiSpectrumBandInfo
-PhyEntity::GetPrimaryBand(uint16_t bandWidth) const
+PhyEntity::GetPrimaryBand(MHz_u bandWidth) const
 {
-    if (m_wifiPhy->GetChannelWidth() % 20 != 0)
+    if (static_cast<uint16_t>(m_wifiPhy->GetChannelWidth()) % 20 != 0)
     {
         return m_wifiPhy->GetBand(bandWidth);
     }
     return m_wifiPhy->GetBand(bandWidth,
-                              m_wifiPhy->m_operatingChannel.GetPrimaryChannelIndex(bandWidth));
+                              m_wifiPhy->GetOperatingChannel().GetPrimaryChannelIndex(bandWidth));
 }
 
 WifiSpectrumBandInfo
-PhyEntity::GetSecondaryBand(uint16_t bandWidth) const
+PhyEntity::GetSecondaryBand(MHz_u bandWidth) const
 {
     NS_ASSERT(m_wifiPhy->GetChannelWidth() >= 40);
     return m_wifiPhy->GetBand(bandWidth,
-                              m_wifiPhy->m_operatingChannel.GetSecondaryChannelIndex(bandWidth));
+                              m_wifiPhy->GetOperatingChannel().GetSecondaryChannelIndex(bandWidth));
 }
 
-uint16_t
+MHz_u
 PhyEntity::GetRxChannelWidth(const WifiTxVector& txVector) const
 {
     return std::min(m_wifiPhy->GetChannelWidth(), txVector.GetChannelWidth());
 }
 
-double
+dBm_u
 PhyEntity::GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
                            WifiChannelListType /*channelType*/) const
 {
@@ -1235,9 +1270,9 @@
 }
 
 Time
-PhyEntity::GetDelayUntilCcaEnd(double thresholdDbm, const WifiSpectrumBandInfo& band)
+PhyEntity::GetDelayUntilCcaEnd(dBm_u threshold, const WifiSpectrumBandInfo& band)
 {
-    return m_wifiPhy->m_interference->GetEnergyDuration(DbmToW(thresholdDbm), band);
+    return m_wifiPhy->m_interference->GetEnergyDuration(DbmToW(threshold), band);
 }
 
 void
@@ -1266,11 +1301,10 @@
 PhyEntity::CcaIndication
 PhyEntity::GetCcaIndication(const Ptr<const WifiPpdu> ppdu)
 {
-    const uint16_t channelWidth = GetMeasurementChannelWidth(ppdu);
+    const auto channelWidth = GetMeasurementChannelWidth(ppdu);
     NS_LOG_FUNCTION(this << channelWidth);
-    const double ccaThresholdDbm = GetCcaThreshold(ppdu, WIFI_CHANLIST_PRIMARY);
-    const Time delayUntilCcaEnd =
-        GetDelayUntilCcaEnd(ccaThresholdDbm, GetPrimaryBand(channelWidth));
+    const auto ccaThreshold = GetCcaThreshold(ppdu, WIFI_CHANLIST_PRIMARY);
+    const Time delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, GetPrimaryBand(channelWidth));
     if (delayUntilCcaEnd.IsStrictlyPositive())
     {
         return std::make_pair(delayUntilCcaEnd, WIFI_CHANLIST_PRIMARY);
@@ -1301,15 +1335,6 @@
     return Seconds(0);
 }
 
-uint16_t
-PhyEntity::GetCenterFrequencyForChannelWidth(const WifiTxVector& txVector) const
-{
-    NS_LOG_FUNCTION(this << txVector);
-
-    return m_wifiPhy->GetOperatingChannel().GetPrimaryChannelCenterFrequency(
-        txVector.GetChannelWidth());
-}
-
 void
 PhyEntity::NotifyPayloadBegin(const WifiTxVector& txVector, const Time& payloadDuration)
 {
@@ -1329,17 +1354,17 @@
 void
 PhyEntity::Transmit(Time txDuration,
                     Ptr<const WifiPpdu> ppdu,
-                    double txPowerDbm,
+                    dBm_u txPower,
                     Ptr<SpectrumValue> txPowerSpectrum,
                     const std::string& type)
 {
-    NS_LOG_FUNCTION(this << txDuration << ppdu << txPowerDbm << type);
-    NS_LOG_DEBUG("Start " << type << ": signal power before antenna gain=" << txPowerDbm << "dBm");
+    NS_LOG_FUNCTION(this << txDuration << ppdu << txPower << type);
+    NS_LOG_DEBUG("Start " << type << ": signal power before antenna gain=" << txPower << "dBm");
     auto txParams = Create<WifiSpectrumSignalParameters>();
     txParams->duration = txDuration;
     txParams->psd = txPowerSpectrum;
     txParams->ppdu = ppdu;
-    NS_LOG_DEBUG("Starting " << type << " with power " << txPowerDbm << " dBm on channel "
+    NS_LOG_DEBUG("Starting " << type << " with power " << txPower << " dBm on channel "
                              << +m_wifiPhy->GetChannelNumber() << " for "
                              << txParams->duration.As(Time::MS));
     NS_LOG_DEBUG("Starting " << type << " with integrated spectrum power "
@@ -1350,20 +1375,20 @@
     spectrumWifiPhy->Transmit(txParams);
 }
 
-uint16_t
-PhyEntity::GetGuardBandwidth(uint16_t currentChannelWidth) const
+MHz_u
+PhyEntity::GetGuardBandwidth(MHz_u currentChannelWidth) const
 {
     return m_wifiPhy->GetGuardBandwidth(currentChannelWidth);
 }
 
-std::tuple<double, double, double>
+std::tuple<dBr_u, dBr_u, dBr_u>
 PhyEntity::GetTxMaskRejectionParams() const
 {
     return m_wifiPhy->GetTxMaskRejectionParams();
 }
 
 Time
-PhyEntity::CalculateTxDuration(WifiConstPsduMap psduMap,
+PhyEntity::CalculateTxDuration(const WifiConstPsduMap& psduMap,
                                const WifiTxVector& txVector,
                                WifiPhyBand band) const
 {
@@ -1378,19 +1403,25 @@
     // The PHY shall not issue a PHY-RXSTART.indication primitive in response to a PPDU that does
     // not overlap the primary channel
     const auto channelWidth = m_wifiPhy->GetChannelWidth();
-    const auto primaryWidth =
-        ((channelWidth % 20 == 0) ? 20
-                                  : channelWidth); // if the channel width is a multiple of 20 MHz,
-                                                   // then we consider the primary20 channel
+    const auto primaryWidth = ((static_cast<uint16_t>(channelWidth) % 20 == 0)
+                                   ? 20
+                                   : channelWidth); // if the channel width is a multiple of 20 MHz,
+                                                    // then we consider the primary20 channel
     const auto p20CenterFreq =
         m_wifiPhy->GetOperatingChannel().GetPrimaryChannelCenterFrequency(primaryWidth);
-    const auto p20MinFreq = p20CenterFreq - (primaryWidth / 2);
-    const auto p20MaxFreq = p20CenterFreq + (primaryWidth / 2);
-    const auto txCenterFreq = ppdu->GetTxCenterFreq();
-    const auto txChannelWidth = ppdu->GetTxChannelWidth();
-    const auto minTxFreq = txCenterFreq - txChannelWidth / 2;
-    const auto maxTxFreq = txCenterFreq + txChannelWidth / 2;
-    return p20MinFreq >= minTxFreq && p20MaxFreq <= maxTxFreq;
+    const uint16_t p20MinFreq = p20CenterFreq - (primaryWidth / 2);
+    const uint16_t p20MaxFreq = p20CenterFreq + (primaryWidth / 2);
+    const auto txChannelWidth = (ppdu->GetTxChannelWidth() / ppdu->GetTxCenterFreqs().size());
+    for (auto txCenterFreq : ppdu->GetTxCenterFreqs())
+    {
+        const uint16_t minTxFreq = txCenterFreq - txChannelWidth / 2;
+        const uint16_t maxTxFreq = txCenterFreq + txChannelWidth / 2;
+        if ((p20MinFreq >= minTxFreq) && (p20MaxFreq <= maxTxFreq))
+        {
+            return true;
+        }
+    }
+    return false;
 }
 
 Ptr<const WifiPpdu>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/phy-entity.h ns-3.43/src/wifi/model/phy-entity.h
--- ns-3.42/src/wifi/model/phy-entity.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/phy-entity.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,32 +1,21 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy and
- * spectrum-wifi-phy) Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (for logic ported from
- * wifi-phy)
+ *                                                           spectrum-wifi-phy)
+ *          Mathieu Lacage <mathieu.lacage@sophia.inria.fr> (for logic ported from wifi-phy)
  */
 
 #ifndef PHY_ENTITY_H
 #define PHY_ENTITY_H
 
-#include "wifi-mpdu-type.h"
 #include "wifi-phy-band.h"
 #include "wifi-ppdu.h"
 #include "wifi-tx-vector.h"
+#include "wifi-types.h"
 
 #include "ns3/event-id.h"
 #include "ns3/nstime.h"
@@ -50,33 +39,12 @@
 namespace ns3
 {
 
-/// SignalNoiseDbm structure
-struct SignalNoiseDbm
-{
-    double signal; ///< signal strength in dBm
-    double noise;  ///< noise power in dBm
-};
-
-/// MpduInfo structure
-struct MpduInfo
-{
-    MpduType type;          ///< type of MPDU
-    uint32_t mpduRefNumber; ///< MPDU ref number
-};
-
-/// RxSignalInfo structure containing info on the received signal
-struct RxSignalInfo
-{
-    double snr;  ///< SNR in linear scale
-    double rssi; ///< RSSI in dBm
-};
-
 /**
- * A map of the received power (Watts) for each band
+ * A map of the received power for each band
  */
-using RxPowerWattPerChannelBand = std::map<WifiSpectrumBandInfo, double>;
+using RxPowerWattPerChannelBand = std::map<WifiSpectrumBandInfo, Watt_u>;
 
-class WifiPsdu;
+class WifiMpdu;
 class WifiPhy;
 class InterferenceHelper;
 class Event;
@@ -493,13 +461,13 @@
      *
      * \param txDuration the duration of the transmission
      * \param ppdu the PPDU to send
-     * \param txPowerDbm the total TX power in dBm
+     * \param txPower the total TX power
      * \param txPowerSpectrum the TX PSD
      * \param type the type of transmission (for logging)
      */
     void Transmit(Time txDuration,
                   Ptr<const WifiPpdu> ppdu,
-                  double txPowerDbm,
+                  dBm_u txPower,
                   Ptr<SpectrumValue> txPowerSpectrum,
                   const std::string& type);
 
@@ -510,19 +478,19 @@
      *
      * \return the total amount of time this PHY will stay busy for the transmission of the PPDU
      */
-    virtual Time CalculateTxDuration(WifiConstPsduMap psduMap,
+    virtual Time CalculateTxDuration(const WifiConstPsduMap& psduMap,
                                      const WifiTxVector& txVector,
                                      WifiPhyBand band) const;
     /**
-     * Return the CCA threshold in dBm for a given channel type.
+     * Return the CCA threshold for a given channel type.
      * If the channel type is not provided, the default CCA threshold is returned.
      *
      * \param ppdu the PPDU that is being received
      * \param channelType the channel type
-     * \return the CCA threshold in dBm
+     * \return the CCA threshold
      */
-    virtual double GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
-                                   WifiChannelListType channelType) const;
+    virtual dBm_u GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
+                                  WifiChannelListType channelType) const;
 
     /**
      * The WifiPpdu from the TX PHY is received by each RX PHY attached to the same channel.
@@ -695,7 +663,7 @@
     /**
      * Get the reception status for the provided MPDU and notify.
      *
-     * \param psdu the arriving MPDU formatted as a PSDU
+     * \param mpdu the arriving MPDU
      * \param event the event holding incoming PPDU's information
      * \param staId the station ID of the PSDU (only used for MU)
      * \param relativeMpduStart the relative start time of the MPDU within the A-MPDU.
@@ -704,7 +672,7 @@
      *
      * \return information on MPDU reception: status, signal power (dBm), and noise power (in dBm)
      */
-    std::pair<bool, SignalNoiseDbm> GetReceptionStatus(Ptr<const WifiPsdu> psdu,
+    std::pair<bool, SignalNoiseDbm> GetReceptionStatus(Ptr<WifiMpdu> mpdu,
                                                        Ptr<Event> event,
                                                        uint16_t staId,
                                                        Time relativeMpduStart,
@@ -713,13 +681,13 @@
      * The last symbol of an MPDU in an A-MPDU has arrived.
      *
      * \param event the event holding incoming PPDU's information
-     * \param psdu the arriving MPDU formatted as a PSDU containing a normal MPDU
+     * \param mpdu the arriving MPDU
      * \param mpduIndex the index of the MPDU within the A-MPDU
      * \param relativeStart the relative start time of the MPDU within the A-MPDU.
      * \param mpduDuration the duration of the MPDU
      */
     void EndOfMpdu(Ptr<Event> event,
-                   Ptr<const WifiPsdu> psdu,
+                   Ptr<WifiMpdu> mpdu,
                    size_t mpduIndex,
                    Time relativeStart,
                    Time mpduDuration);
@@ -769,9 +737,9 @@
      *
      * \param txVector the transmission parameters
      * \param staId the station ID of the PSDU
-     * \return a pair of channel width (MHz) and band
+     * \return a pair of channel width and band
      */
-    virtual std::pair<uint16_t, WifiSpectrumBandInfo> GetChannelWidthAndBand(
+    virtual std::pair<MHz_u, WifiSpectrumBandInfo> GetChannelWidthAndBand(
         const WifiTxVector& txVector,
         uint16_t staId) const;
 
@@ -799,13 +767,13 @@
      */
     SnrPer GetPhyHeaderSnrPer(WifiPpduField field, Ptr<Event> event) const;
     /**
-     * Obtain the received power (W) for a given band.
+     * Obtain the received power for a given band.
      * Wrapper used by child classes.
      *
      * \param event the event holding incoming PPDU's information
-     * \return the received power (W) for the event over a given band
+     * \return the received power for the event over a given band
      */
-    double GetRxPowerWForPpdu(Ptr<Event> event) const;
+    Watt_u GetRxPowerForPpdu(Ptr<Event> event) const;
     /**
      * Get the pointer to the current event (stored in WifiPhy).
      * Wrapper used by child classes.
@@ -836,7 +804,8 @@
      * \param duration the PPDU duration
      * \param rxPower received power per band (W)
      * \param isStartHePortionRxing flag whether the event corresponds to the start of the OFDMA
-     * payload reception (only used for UL-OFDMA) \return the created event
+     * payload reception (only used for UL-OFDMA)
+     * \return the created event
      */
     Ptr<Event> CreateInterferenceEvent(Ptr<const WifiPpdu> ppdu,
                                        Time duration,
@@ -868,27 +837,17 @@
     void NotifyInterferenceRxEndAndClear(bool reset);
 
     /**
-     * \param txPowerW power in W to spread across the bands
+     * \param txPower power to spread across the bands
      * \param ppdu the PPDU that will be transmitted
      * \return Pointer to SpectrumValue
      *
      * This is a helper function to create the right TX PSD corresponding
      * to the amendment of this PHY.
      */
-    virtual Ptr<SpectrumValue> GetTxPowerSpectralDensity(double txPowerW,
+    virtual Ptr<SpectrumValue> GetTxPowerSpectralDensity(Watt_u txPower,
                                                          Ptr<const WifiPpdu> ppdu) const = 0;
 
     /**
-     * Get the center frequency of the channel corresponding the current TxVector rather than
-     * that of the supported channel width.
-     * Consider that this "primary channel" is on the lower part for the time being.
-     *
-     * \param txVector the TXVECTOR that has the channel width that is to be used
-     * \return the center frequency in MHz corresponding to the channel width to be used
-     */
-    uint16_t GetCenterFrequencyForChannelWidth(const WifiTxVector& txVector) const;
-
-    /**
      * Fire the trace indicating that the PHY is starting to receive the payload of a PPDU.
      *
      * \param txVector the TXVECTOR used to transmit the PPDU
@@ -903,65 +862,64 @@
      * channel width). Otherwise, this call is equivalent to GetBand with
      * <i>bandIndex</i> equal to zero.
      *
-     * \param bandWidth the width of the band to be returned (MHz)
+     * \param bandWidth the width of the band to be returned
      *
      * \return the info corresponding to the band
      */
-    WifiSpectrumBandInfo GetPrimaryBand(uint16_t bandWidth) const;
+    WifiSpectrumBandInfo GetPrimaryBand(MHz_u bandWidth) const;
     /**
      * If the channel bonding is used, return the info corresponding to
      * the secondary channel of the given bandwidth (which must be a multiple of 20 MHz
      * and not exceed the operating channel width).
      *
-     * \param bandWidth the width of the band to be returned (MHz)
+     * \param bandWidth the width of the band to be returned
      *
      * \return the info corresponding to the band
      */
-    WifiSpectrumBandInfo GetSecondaryBand(uint16_t bandWidth) const;
+    WifiSpectrumBandInfo GetSecondaryBand(MHz_u bandWidth) const;
 
     /**
      * Return the channel width used to measure the RSSI.
      *
      * \param ppdu the PPDU that is being received
-     * \return the channel width (in MHz) used for RSSI measurement
+     * \return the channel width used for RSSI measurement
      */
-    virtual uint16_t GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const = 0;
+    virtual MHz_u GetMeasurementChannelWidth(const Ptr<const WifiPpdu> ppdu) const = 0;
 
     /**
      * Return the channel width used in the reception spectrum model.
      *
      * \param txVector the TXVECTOR of the PPDU that is being received
-     * \return the channel width (in MHz) used for RxSpectrumModel
+     * \return the channel width used for RxSpectrumModel
      */
-    virtual uint16_t GetRxChannelWidth(const WifiTxVector& txVector) const;
+    virtual MHz_u GetRxChannelWidth(const WifiTxVector& txVector) const;
 
     /**
-     * Return the delay until CCA busy is ended for a given sensitivity threshold (in dBm) and a
-     * given band.
+     * Return the delay until CCA busy is ended for a given sensitivity threshold and a given band.
      *
-     * \param thresholdDbm the CCA sensitivity threshold in dBm
+     * \param threshold the CCA sensitivity threshold
      * \param band identify the requested band
      * \return the delay until CCA busy is ended
      */
-    Time GetDelayUntilCcaEnd(double thresholdDbm, const WifiSpectrumBandInfo& band);
+    Time GetDelayUntilCcaEnd(dBm_u threshold, const WifiSpectrumBandInfo& band);
 
     /**
-     * \param currentChannelWidth channel width of the current transmission (MHz)
-     * \return the width of the guard band (MHz)
+     * \param currentChannelWidth channel width of the current transmission
+     * \return the width of the guard band
      *
      * Wrapper method used by child classes for PSD generation.
      * Note that this method is necessary for testing UL OFDMA.
      */
-    uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const;
+    MHz_u GetGuardBandwidth(MHz_u currentChannelWidth) const;
     /**
-     * \return a tuple containing the minimum rejection (in dBr) for the inner band,
-     *                            the minimum rejection (in dBr) for the outer band, and
-     *                            the maximum rejection (in dBr) for the outer band
+     * \return a tuple containing the minimum rejection for the inner band,
+     *                            the minimum rejection for the outer band, and
+     *                            the maximum rejection for the outer band
      *                            for the transmit spectrum mask.
      *
      * Wrapper method used by child classes for PSD generation.
      */
-    std::tuple<double, double, double> GetTxMaskRejectionParams() const;
+    std::tuple<dBr_u, dBr_u, dBr_u> GetTxMaskRejectionParams() const;
 
     using CcaIndication =
         std::optional<std::pair<Time, WifiChannelListType>>; //!< CCA end time and its corresponding
@@ -985,7 +943,8 @@
     std::list<WifiMode> m_modeList; //!< the list of supported modes
 
     std::vector<EventId> m_endPreambleDetectionEvents; //!< the end of preamble detection events
-    std::vector<EventId> m_endOfMpduEvents; //!< the end of MPDU events (only used for A-MPDUs)
+    std::vector<EventId> m_endOfMpduEvents;   //!< the end of MPDU events (only used for A-MPDUs)
+    std::vector<EventId> m_endOfMacHdrEvents; //!< the end of MAC header events
 
     std::vector<EventId>
         m_endRxPayloadEvents; //!< the end of receive events (only one unless UL MU reception)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/preamble-detection-model.cc ns-3.43/src/wifi/model/preamble-detection-model.cc
--- ns-3.42/src/wifi/model/preamble-detection-model.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/preamble-detection-model.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/preamble-detection-model.h ns-3.43/src/wifi/model/preamble-detection-model.h
--- ns-3.42/src/wifi/model/preamble-detection-model.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/preamble-detection-model.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -20,6 +9,8 @@
 #ifndef PREAMBLE_DETECTION_MODEL_H
 #define PREAMBLE_DETECTION_MODEL_H
 
+#include "wifi-units.h"
+
 #include "ns3/object.h"
 
 namespace ns3
@@ -43,14 +34,14 @@
      * A pure virtual method that must be implemented in the subclass.
      * This method returns whether the preamble detection was successful.
      *
-     * \param rssi the RSSI of the received signal (in Watts).
+     * \param rssi the RSSI of the received signal.
      * \param snr the SNR of the received signal in linear scale.
-     * \param channelWidth the channel width of the received signal in MHz.
+     * \param channelWidth the channel width of the received signal.
      *
      * \return true if the preamble has been detected,
      *         false otherwise
      */
-    virtual bool IsPreambleDetected(double rssi, double snr, double channelWidth) const = 0;
+    virtual bool IsPreambleDetected(dBm_u rssi, double snr, MHz_u channelWidth) const = 0;
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/qos-frame-exchange-manager.cc ns-3.43/src/wifi/model/qos-frame-exchange-manager.cc
--- ns-3.42/src/wifi/model/qos-frame-exchange-manager.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/qos-frame-exchange-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -158,7 +147,7 @@
 }
 
 bool
-QosFrameExchangeManager::StartTransmission(Ptr<Txop> edca, uint16_t allowedWidth)
+QosFrameExchangeManager::StartTransmission(Ptr<Txop> edca, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << edca << allowedWidth);
 
@@ -566,7 +555,9 @@
     {
         uint8_t tid = hdr.GetQosTid();
         hdr.SetQosEosp();
-        hdr.SetQosQueueSize(m_mac->GetQosTxop(tid)->GetQosQueueSize(tid, hdr.GetAddr1()));
+        hdr.SetQosQueueSize(
+            m_mac->GetQosTxop(tid)->GetQosQueueSize(tid,
+                                                    mpdu->GetOriginal()->GetHeader().GetAddr1()));
     }
     FrameExchangeManager::ForwardMpduDown(mpdu, txVector);
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/qos-frame-exchange-manager.h ns-3.43/src/wifi/model/qos-frame-exchange-manager.h
--- ns-3.42/src/wifi/model/qos-frame-exchange-manager.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/qos-frame-exchange-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -45,7 +34,7 @@
     QosFrameExchangeManager();
     ~QosFrameExchangeManager() override;
 
-    bool StartTransmission(Ptr<Txop> edca, uint16_t allowedWidth) override;
+    bool StartTransmission(Ptr<Txop> edca, MHz_u allowedWidth) override;
 
     /**
      * Recompute the protection and acknowledgment methods to use if the given MPDU
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/qos-txop.cc ns-3.43/src/wifi/model/qos-txop.cc
--- ns-3.42/src/wifi/model/qos-txop.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/qos-txop.cc	2024-10-09 16:41:10.124656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -664,16 +653,16 @@
     if (respHdr.GetStatusCode().IsSuccess())
     {
         NS_LOG_DEBUG("block ack agreement established with " << recipient << " tid " << +tid);
-        // A (destination, TID) pair is "blocked" (i.e., no more packets are sent)
-        // when an Add BA Request is sent to the destination. However, when the
-        // Add BA Request timer expires, the (destination, TID) pair is "unblocked"
-        // and packets to the destination are sent again (under normal ack policy).
-        // Thus, there may be a packet needing to be retransmitted when the
-        // Add BA Response is received. In this case, the starting sequence number
-        // shall be set equal to the sequence number of such packet.
+        // A (destination, TID) pair is "blocked" (i.e., no more packets are sent) when an
+        // Add BA Request is sent to the destination. However, when the Add BA Request timer
+        // expires, the (destination, TID) pair is "unblocked" and packets to the destination are
+        // sent again (under normal ack policy). Thus, there may be a packet with a sequence number
+        // already assigned waiting to be retransmitted (or being transmitted on another link)
+        // when the Add BA Response is received. In this case, the starting sequence number shall
+        // be set equal to the sequence number of such packet.
         uint16_t startingSeq = m_txMiddle->GetNextSeqNumberByTidAndAddress(tid, recipient);
         auto peekedItem = m_queue->PeekByTidAndAddress(tid, recipient);
-        if (peekedItem && peekedItem->GetHeader().IsRetry())
+        if (peekedItem && peekedItem->HasSeqNoAssigned())
         {
             startingSeq = peekedItem->GetHeader().GetSequenceNumber();
         }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/qos-txop.h ns-3.43/src/wifi/model/qos-txop.h
--- ns-3.42/src/wifi/model/qos-txop.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/qos-txop.h	2024-10-09 16:41:10.124656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -41,13 +30,13 @@
 class WifiTxParameters;
 
 /**
- * \brief Handle packet fragmentation and retransmissions for QoS data frames as well
- * as MSDU aggregation (A-MSDU) and block ack sessions, for a given access class.
+ * \brief Handles the packet queue and stores DCF/EDCA access parameters
+ * (one Txop per AC).
  * \ingroup wifi
  *
- * This class implements the packet fragmentation and retransmission policy for
- * QoS data frames. It uses the ns3::ChannelAccessManager helper class to decide
- * when to send a packet. Packets are stored in a ns3::WifiMacQueue until they can be sent.
+ * This class handles the packet queue and stores DCF/EDCA access
+ * parameters (one Txop per AC). It generates backoff values and stores the channel access status
+ * (not requested, requested, granted) for the corresponding DCF/EDCA and for each link.
  *
  * This queue contains packets for a particular access class.
  * Possibles access classes are:
@@ -57,17 +46,6 @@
  *   - AC_BK : background, TID = 1,2
  *
  * This class also implements block ack sessions and MSDU aggregation (A-MSDU).
- *
- * The fragmentation policy currently implemented uses a simple
- * threshold: any packet bigger than this threshold is fragmented
- * in fragments whose size is smaller than the threshold.
- *
- * The retransmission policy is also very simple: every packet is
- * retransmitted until it is either successfully transmitted or
- * it has been retransmitted up until the SSRC or SLRC thresholds.
- *
- * The RTS/CTS policy is similar to the fragmentation policy: when
- * a packet is bigger than a threshold, the RTS/CTS protocol is used.
  */
 
 class QosTxop : public Txop
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/qos-utils.cc ns-3.43/src/wifi/model/qos-utils.cc
--- ns-3.42/src/wifi/model/qos-utils.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/qos-utils.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mirko Banchi <mk.banchi@gmail.com>
  *          Cecchi Niccolò <insa@igeek.it>
@@ -152,21 +141,6 @@
     return AC_UNDEF;
 }
 
-uint8_t
-QosUtilsGetTidForPacket(Ptr<const Packet> packet)
-{
-    SocketPriorityTag qos;
-    uint8_t tid = 8;
-    if (packet->PeekPacketTag(qos))
-    {
-        if (qos.GetPriority() < 8)
-        {
-            tid = qos.GetPriority();
-        }
-    }
-    return tid;
-}
-
 uint32_t
 QosUtilsMapSeqControlToUniqueInteger(uint16_t seqControl, uint16_t endSequence)
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/qos-utils.h ns-3.43/src/wifi/model/qos-utils.h
--- ns-3.42/src/wifi/model/qos-utils.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/qos-utils.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
@@ -220,18 +209,6 @@
 
 /**
  * \ingroup wifi
- * If a QoS tag is attached to the packet, returns a value < 8.
- * A value >= 8 is returned otherwise.
- *
- * \param packet the packet to checked for a QoS tag
- *
- * \return a value less than 8 if QoS tag was present, a value >= 8
- *         is returned if no QoS tag was present
- */
-uint8_t QosUtilsGetTidForPacket(Ptr<const Packet> packet);
-
-/**
- * \ingroup wifi
  * Next function is useful to correctly sort buffered packets under block ack.
  * When an BAR is received from originator station, completed "old"
  * (see section 9.10.3 in IEEE 802.11e) packets must be forwarded up before "new" packets.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/aarfcd-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/aarfcd-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/aarfcd-wifi-manager.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/aarfcd-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2004,2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Federico Maguolo <maguolof@dei.unipd.it>
  */
@@ -279,7 +268,7 @@
                                   double ackSnr,
                                   WifiMode ackMode,
                                   double dataSnr,
-                                  uint16_t dataChannelWidth,
+                                  MHz_u dataChannelWidth,
                                   uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -325,11 +314,11 @@
 }
 
 WifiTxVector
-AarfcdWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+AarfcdWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<AarfcdWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -345,7 +334,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -360,7 +349,7 @@
     /// \todo we could/should implement the AARF algorithm for
     /// RTS only by picking a single rate within the BasicRateSet.
     auto station = static_cast<AarfcdWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -378,7 +367,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/aarfcd-wifi-manager.h ns-3.43/src/wifi/model/rate-control/aarfcd-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/aarfcd-wifi-manager.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/aarfcd-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Federico Maguolo <maguolof@dei.unipd.it>
  */
@@ -78,11 +67,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
     bool DoNeedRts(WifiRemoteStation* station, uint32_t size, bool normally) override;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/aarf-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/aarf-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/aarf-wifi-manager.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/aarf-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2004,2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -220,7 +209,7 @@
                                 double ackSnr,
                                 WifiMode ackMode,
                                 double dataSnr,
-                                uint16_t dataChannelWidth,
+                                MHz_u dataChannelWidth,
                                 uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -256,11 +245,11 @@
 }
 
 WifiTxVector
-AarfWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+AarfWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<AarfWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -276,7 +265,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -291,7 +280,7 @@
     /// \todo we could/should implement the AARF algorithm for
     /// RTS only by picking a single rate within the BasicRateSet.
     auto station = static_cast<AarfWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -309,7 +298,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/aarf-wifi-manager.h ns-3.43/src/wifi/model/rate-control/aarf-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/aarf-wifi-manager.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/aarf-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -64,11 +53,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     uint32_t m_minTimerThreshold;   ///< minimum timer threshold
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/amrr-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/amrr-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/amrr-wifi-manager.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/amrr-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2003,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -177,7 +166,7 @@
                                 double ackSnr,
                                 WifiMode ackMode,
                                 double dataSnr,
-                                uint16_t dataChannelWidth,
+                                MHz_u dataChannelWidth,
                                 uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -331,7 +320,7 @@
 }
 
 WifiTxVector
-AmrrWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+AmrrWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<AmrrWifiRemoteStation*>(st);
@@ -375,7 +364,7 @@
             rateIndex = station->m_txrate;
         }
     }
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -391,7 +380,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -404,7 +393,7 @@
 {
     NS_LOG_FUNCTION(this << st);
     auto station = static_cast<AmrrWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -423,7 +412,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/amrr-wifi-manager.h ns-3.43/src/wifi/model/rate-control/amrr-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/amrr-wifi-manager.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/amrr-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2003,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -67,11 +56,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/aparf-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/aparf-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/aparf-wifi-manager.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/aparf-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matias Richart <mrichart@fing.edu.uy>
  */
@@ -188,9 +177,9 @@
         station->m_prevPowerLevel = m_maxPower;
         station->m_critRateIndex = 0;
         WifiMode mode = GetSupported(station, station->m_rateIndex);
-        uint16_t channelWidth = GetChannelWidth(station);
+        auto channelWidth = GetChannelWidth(station);
         DataRate rate(mode.GetDataRate(channelWidth));
-        double power = GetPhy()->GetPowerDbm(m_maxPower);
+        const auto power = GetPhy()->GetPower(m_maxPower);
         m_powerChange(power, power, station->m_state->m_address);
         m_rateChange(rate, rate, station->m_state->m_address);
         station->m_initialized = true;
@@ -267,7 +256,7 @@
                                  double ackSnr,
                                  WifiMode ackMode,
                                  double dataSnr,
-                                 uint16_t dataChannelWidth,
+                                 MHz_u dataChannelWidth,
                                  uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -348,11 +337,11 @@
 }
 
 WifiTxVector
-AparfWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+AparfWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<AparfWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -361,8 +350,8 @@
     WifiMode mode = GetSupported(station, station->m_rateIndex);
     DataRate rate(mode.GetDataRate(channelWidth));
     DataRate prevRate(GetSupported(station, station->m_prevRateIndex).GetDataRate(channelWidth));
-    double power = GetPhy()->GetPowerDbm(station->m_powerLevel);
-    double prevPower = GetPhy()->GetPowerDbm(station->m_prevPowerLevel);
+    const auto power = GetPhy()->GetPower(station->m_powerLevel);
+    const auto prevPower = GetPhy()->GetPower(station->m_prevPowerLevel);
     if (station->m_prevPowerLevel != station->m_powerLevel)
     {
         m_powerChange(prevPower, power, station->m_state->m_address);
@@ -377,7 +366,7 @@
         mode,
         station->m_powerLevel,
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -392,7 +381,7 @@
     /// \todo we could/should implement the ARF algorithm for
     /// RTS only by picking a single rate within the BasicRateSet.
     auto station = static_cast<AparfWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -410,7 +399,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/aparf-wifi-manager.h ns-3.43/src/wifi/model/rate-control/aparf-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/aparf-wifi-manager.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/aparf-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matias Richart <mrichart@fing.edu.uy>
  */
@@ -79,11 +68,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     /** Check for initializations.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/arf-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/arf-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/arf-wifi-manager.cc	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/arf-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2004,2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -198,7 +187,7 @@
                                double ackSnr,
                                WifiMode ackMode,
                                double dataSnr,
-                               uint16_t dataChannelWidth,
+                               MHz_u dataChannelWidth,
                                uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -233,11 +222,11 @@
 }
 
 WifiTxVector
-ArfWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+ArfWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<ArfWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -253,7 +242,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -268,7 +257,7 @@
     /// \todo we could/should implement the ARF algorithm for
     /// RTS only by picking a single rate within the BasicRateSet.
     auto station = static_cast<ArfWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -286,7 +275,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/arf-wifi-manager.h ns-3.43/src/wifi/model/rate-control/arf-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/arf-wifi-manager.h	2024-05-29 15:29:47.204074000 -0700
+++ ns-3.43/src/wifi/model/rate-control/arf-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -70,11 +59,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     uint32_t m_timerThreshold;   ///< timer threshold
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/cara-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/cara-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/cara-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/cara-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2004,2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Federico Maguolo <maguolof@dei.unipd.it>
  */
@@ -169,7 +158,7 @@
                                 double ackSnr,
                                 WifiMode ackMode,
                                 double dataSnr,
-                                uint16_t dataChannelWidth,
+                                MHz_u dataChannelWidth,
                                 uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -204,11 +193,11 @@
 }
 
 WifiTxVector
-CaraWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+CaraWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<CaraWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -224,7 +213,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -239,7 +228,7 @@
     auto station = static_cast<CaraWifiRemoteStation*>(st);
     /// \todo we could/should implement the Arf algorithm for
     /// RTS only by picking a single rate within the BasicRateSet.
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -257,7 +246,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/cara-wifi-manager.h ns-3.43/src/wifi/model/rate-control/cara-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/cara-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/cara-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Federico Maguolo <maguolof@dei.unipd.it>
  */
@@ -66,11 +55,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
     bool DoNeedRts(WifiRemoteStation* station, uint32_t size, bool normally) override;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/constant-rate-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/constant-rate-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/constant-rate-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/constant-rate-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2004,2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -105,7 +94,7 @@
                                         double ackSnr,
                                         WifiMode ackMode,
                                         double dataSnr,
-                                        uint16_t dataChannelWidth,
+                                        MHz_u dataChannelWidth,
                                         uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -124,7 +113,7 @@
 }
 
 WifiTxVector
-ConstantRateWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+ConstantRateWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     uint8_t nss = std::min(GetMaxNumberOfTransmitStreams(), GetNumberOfSupportedStreams(st));
@@ -136,9 +125,9 @@
         m_dataMode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(m_dataMode.GetModulationClass(), GetShortPreambleEnabled()),
-        ConvertGuardIntervalToNanoSeconds(m_dataMode,
-                                          GetShortGuardIntervalSupported(st),
-                                          NanoSeconds(GetGuardInterval(st))),
+        GetGuardIntervalForMode(m_dataMode,
+                                GetShortGuardIntervalSupported(st),
+                                GetGuardInterval(st)),
         GetNumberOfAntennas(),
         nss,
         0,
@@ -154,9 +143,9 @@
         m_ctlMode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(m_ctlMode.GetModulationClass(), GetShortPreambleEnabled()),
-        ConvertGuardIntervalToNanoSeconds(m_ctlMode,
-                                          GetShortGuardIntervalSupported(st),
-                                          NanoSeconds(GetGuardInterval(st))),
+        GetGuardIntervalForMode(m_ctlMode,
+                                GetShortGuardIntervalSupported(st),
+                                GetGuardInterval(st)),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/constant-rate-wifi-manager.h ns-3.43/src/wifi/model/rate-control/constant-rate-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/constant-rate-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/constant-rate-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -56,11 +45,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     WifiMode m_dataMode; //!< Wifi mode for unicast Data frames
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/ideal-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/ideal-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/ideal-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/ideal-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -38,15 +27,14 @@
 struct IdealWifiRemoteStation : public WifiRemoteStation
 {
     double m_lastSnrObserved; //!< SNR of most recently reported packet sent to the remote station
-    uint16_t m_lastChannelWidthObserved; //!< Channel width (in MHz) of most recently reported
-                                         //!< packet sent to the remote station
+    MHz_u m_lastChannelWidthObserved; //!< Channel width of most recently
+                                      //!< reported packet sent to the remote station
     uint16_t m_lastNssObserved; //!<  Number of spatial streams of most recently reported packet
                                 //!<  sent to the remote station
     double m_lastSnrCached;     //!< SNR most recently used to select a rate
     uint8_t m_lastNss;   //!< Number of spatial streams most recently used to the remote station
     WifiMode m_lastMode; //!< Mode most recently used to the remote station
-    uint16_t
-        m_lastChannelWidth; //!< Channel width (in MHz) most recently used to the remote station
+    MHz_u m_lastChannelWidth; //!< Channel width most recently used to the remote station
 };
 
 /// To avoid using the cache before a valid value has been cached
@@ -94,7 +82,7 @@
     WifiRemoteStationManager::SetupPhy(phy);
 }
 
-uint16_t
+MHz_u
 IdealWifiManager::GetChannelWidthForNonHtMode(WifiMode mode) const
 {
     NS_ASSERT(mode.GetModulationClass() < WIFI_MOD_CLASS_HT);
@@ -136,12 +124,13 @@
     {
         for (const auto& mode : GetPhy()->GetMcsList())
         {
-            for (uint16_t j = 20; j <= GetPhy()->GetChannelWidth(); j *= 2)
+            for (MHz_u j = 20; j <= GetPhy()->GetChannelWidth(); j *= 2)
             {
                 txVector.SetChannelWidth(j);
                 if (mode.GetModulationClass() == WIFI_MOD_CLASS_HT)
                 {
-                    uint16_t guardInterval = GetShortGuardIntervalSupported() ? 400 : 800;
+                    const auto guardInterval =
+                        NanoSeconds(GetShortGuardIntervalSupported() ? 400 : 800);
                     txVector.SetGuardInterval(guardInterval);
                     // derive NSS from the MCS index
                     nss = (mode.GetMcsValue() / 8) + 1;
@@ -153,10 +142,10 @@
                 }
                 else
                 {
-                    uint16_t guardInterval;
+                    Time guardInterval{};
                     if (mode.GetModulationClass() == WIFI_MOD_CLASS_VHT)
                     {
-                        guardInterval = GetShortGuardIntervalSupported() ? 400 : 800;
+                        guardInterval = NanoSeconds(GetShortGuardIntervalSupported() ? 400 : 800);
                     }
                     else
                     {
@@ -280,7 +269,7 @@
                                  double ackSnr,
                                  WifiMode ackMode,
                                  double dataSnr,
-                                 uint16_t dataChannelWidth,
+                                 MHz_u dataChannelWidth,
                                  uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode.GetUniqueName() << dataSnr << dataChannelWidth
@@ -302,7 +291,7 @@
                                         uint16_t nFailedMpdus,
                                         double rxSnr,
                                         double dataSnr,
-                                        uint16_t dataChannelWidth,
+                                        MHz_u dataChannelWidth,
                                         uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << nSuccessfulMpdus << nFailedMpdus << rxSnr << dataSnr
@@ -333,7 +322,7 @@
 }
 
 WifiTxVector
-IdealWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+IdealWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<IdealWifiRemoteStation*>(st);
@@ -344,8 +333,8 @@
     WifiTxVector txVector;
     uint64_t bestRate = 0;
     uint8_t selectedNss = 1;
-    uint16_t guardInterval;
-    uint16_t channelWidth = std::min(GetChannelWidth(station), allowedWidth);
+    Time guardInterval{};
+    const auto channelWidth = std::min(GetChannelWidth(station), allowedWidth);
     txVector.SetChannelWidth(channelWidth);
     if ((station->m_lastSnrCached != CACHE_INITIAL_VALUE) &&
         (station->m_lastSnrObserved == station->m_lastSnrCached) &&
@@ -373,16 +362,16 @@
                     continue;
                 }
                 txVector.SetMode(mode);
-                uint16_t guardInterval;
+                Time guardInterval{};
                 if (mode.GetModulationClass() >= WIFI_MOD_CLASS_HE)
                 {
                     guardInterval = std::max(GetGuardInterval(station), GetGuardInterval());
                 }
                 else
                 {
-                    guardInterval = static_cast<uint16_t>(
-                        std::max(GetShortGuardIntervalSupported(station) ? 400 : 800,
-                                 GetShortGuardIntervalSupported() ? 400 : 800));
+                    guardInterval =
+                        std::max(NanoSeconds(GetShortGuardIntervalSupported(station) ? 400 : 800),
+                                 NanoSeconds(GetShortGuardIntervalSupported() ? 400 : 800));
                 }
                 txVector.SetGuardInterval(guardInterval);
                 if (mode.GetModulationClass() == WIFI_MOD_CLASS_HT)
@@ -466,7 +455,7 @@
                 auto mode = GetSupported(station, i);
                 txVector.SetMode(mode);
                 txVector.SetNss(selectedNss);
-                uint16_t channelWidth = GetChannelWidthForNonHtMode(mode);
+                const auto channelWidth = GetChannelWidthForNonHtMode(mode);
                 txVector.SetChannelWidth(channelWidth);
                 double threshold = GetSnrThreshold(txVector);
                 uint64_t dataRate = mode.GetDataRate(txVector.GetChannelWidth(),
@@ -500,13 +489,12 @@
     }
     else if ((maxMode.GetModulationClass() >= WIFI_MOD_CLASS_HT))
     {
-        guardInterval =
-            static_cast<uint16_t>(std::max(GetShortGuardIntervalSupported(station) ? 400 : 800,
-                                           GetShortGuardIntervalSupported() ? 400 : 800));
+        guardInterval = std::max(NanoSeconds(GetShortGuardIntervalSupported(station) ? 400 : 800),
+                                 NanoSeconds(GetShortGuardIntervalSupported() ? 400 : 800));
     }
     else
     {
-        guardInterval = 800;
+        guardInterval = NanoSeconds(800);
     }
     WifiTxVector bestTxVector{
         maxMode,
@@ -558,7 +546,7 @@
         maxMode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(maxMode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         GetNumberOfAntennas(),
         nss,
         0,
@@ -568,7 +556,7 @@
 
 double
 IdealWifiManager::GetLastObservedSnr(IdealWifiRemoteStation* station,
-                                     uint16_t channelWidth,
+                                     MHz_u channelWidth,
                                      uint8_t nss) const
 {
     double snr = station->m_lastSnrObserved;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/ideal-wifi-manager.h ns-3.43/src/wifi/model/rate-control/ideal-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/ideal-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/ideal-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -70,18 +59,18 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportAmpduTxStatus(WifiRemoteStation* station,
                                uint16_t nSuccessfulMpdus,
                                uint16_t nFailedMpdus,
                                double rxSnr,
                                double dataSnr,
-                               uint16_t dataChannelWidth,
+                               MHz_u dataChannelWidth,
                                uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     /**
@@ -119,9 +108,9 @@
     /**
      * Convenience function for selecting a channel width for non-HT mode
      * \param mode non-HT WifiMode
-     * \return the channel width (MHz) for the selected mode
+     * \return the channel width for the selected mode
      */
-    uint16_t GetChannelWidthForNonHtMode(WifiMode mode) const;
+    MHz_u GetChannelWidthForNonHtMode(WifiMode mode) const;
 
     /**
      * Convenience function to get the last observed SNR from a given station for a given channel
@@ -130,12 +119,12 @@
      * some computations to get the corresponding SNR.
      *
      * \param station the station being queried
-     * \param channelWidth the channel width (in MHz)
+     * \param channelWidth the channel width
      * \param nss the number of spatial streams
      * \return the SNR in linear scale
      */
     double GetLastObservedSnr(IdealWifiRemoteStation* station,
-                              uint16_t channelWidth,
+                              MHz_u channelWidth,
                               uint8_t nss) const;
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/minstrel-ht-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/minstrel-ht-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/minstrel-ht-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/minstrel-ht-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 Duy Nguyen
  * Copyright (c) 2015 Ghada Badawy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Duy Nguyen <duy@soe.ucsc.edu>
  *          Ghada Badawy <gbadawy@gmail.com>
@@ -228,16 +217,17 @@
     if (GetHtSupported())
     {
         // Initialize all HT groups
-        for (uint16_t chWidth = 20; chWidth <= MAX_HT_WIDTH; chWidth *= 2)
+        for (MHz_u chWidth = 20; chWidth <= MAX_HT_WIDTH; chWidth *= 2)
         {
             for (int gi = 800; gi >= 400;)
             {
+                const auto guardInterval = NanoSeconds(gi);
                 for (uint8_t streams = 1; streams <= MAX_HT_SUPPORTED_STREAMS; streams++)
                 {
-                    uint8_t groupId = GetHtGroupId(streams, gi, chWidth);
+                    uint8_t groupId = GetHtGroupId(streams, guardInterval, chWidth);
 
                     m_minstrelGroups[groupId].streams = streams;
-                    m_minstrelGroups[groupId].gi = gi;
+                    m_minstrelGroups[groupId].gi = guardInterval;
                     m_minstrelGroups[groupId].chWidth = chWidth;
                     m_minstrelGroups[groupId].type = WIFI_MINSTREL_GROUP_HT;
                     m_minstrelGroups[groupId].isSupported = false;
@@ -262,7 +252,7 @@
                                                mode,
                                                CalculateMpduTxDuration(GetPhy(),
                                                                        streams,
-                                                                       gi,
+                                                                       guardInterval,
                                                                        chWidth,
                                                                        mode,
                                                                        FIRST_MPDU_IN_AGGREGATE));
@@ -270,13 +260,14 @@
                                           mode,
                                           CalculateMpduTxDuration(GetPhy(),
                                                                   streams,
-                                                                  gi,
+                                                                  guardInterval,
                                                                   chWidth,
                                                                   mode,
                                                                   MIDDLE_MPDU_IN_AGGREGATE));
                         }
                         NS_LOG_DEBUG("Initialized group " << +groupId << ": (" << +streams << ","
-                                                          << gi << "," << chWidth << ")");
+                                                          << guardInterval << "," << chWidth
+                                                          << ")");
                     }
                 }
                 gi /= 2;
@@ -287,16 +278,17 @@
     if (GetVhtSupported())
     {
         // Initialize all VHT groups
-        for (uint16_t chWidth = 20; chWidth <= MAX_VHT_WIDTH; chWidth *= 2)
+        for (MHz_u chWidth = 20; chWidth <= MAX_VHT_WIDTH; chWidth *= 2)
         {
             for (int gi = 800; gi >= 400;)
             {
+                const auto guardInterval = NanoSeconds(gi);
                 for (uint8_t streams = 1; streams <= MAX_VHT_SUPPORTED_STREAMS; streams++)
                 {
-                    uint8_t groupId = GetVhtGroupId(streams, gi, chWidth);
+                    uint8_t groupId = GetVhtGroupId(streams, guardInterval, chWidth);
 
                     m_minstrelGroups[groupId].streams = streams;
-                    m_minstrelGroups[groupId].gi = gi;
+                    m_minstrelGroups[groupId].gi = guardInterval;
                     m_minstrelGroups[groupId].chWidth = chWidth;
                     m_minstrelGroups[groupId].type = WIFI_MINSTREL_GROUP_VHT;
                     m_minstrelGroups[groupId].isSupported = false;
@@ -324,7 +316,7 @@
                                     mode,
                                     CalculateMpduTxDuration(GetPhy(),
                                                             streams,
-                                                            gi,
+                                                            guardInterval,
                                                             chWidth,
                                                             mode,
                                                             FIRST_MPDU_IN_AGGREGATE));
@@ -332,7 +324,7 @@
                                               mode,
                                               CalculateMpduTxDuration(GetPhy(),
                                                                       streams,
-                                                                      gi,
+                                                                      guardInterval,
                                                                       chWidth,
                                                                       mode,
                                                                       MIDDLE_MPDU_IN_AGGREGATE));
@@ -350,22 +342,24 @@
     if (GetHeSupported())
     {
         // Initialize all HE groups
-        for (uint16_t chWidth = 20; chWidth <= MAX_HE_WIDTH; chWidth *= 2)
+        for (MHz_u chWidth = 20; chWidth <= MAX_HE_WIDTH; chWidth *= 2)
         {
             for (int gi = 3200; gi >= 800;)
             {
+                const auto guardInterval = NanoSeconds(gi);
                 for (uint8_t streams = 1; streams <= MAX_HE_SUPPORTED_STREAMS; streams++)
                 {
-                    uint8_t groupId = GetHeGroupId(streams, gi, chWidth);
+                    uint8_t groupId = GetHeGroupId(streams, guardInterval, chWidth);
 
                     m_minstrelGroups[groupId].streams = streams;
-                    m_minstrelGroups[groupId].gi = gi;
+                    m_minstrelGroups[groupId].gi = guardInterval;
                     m_minstrelGroups[groupId].chWidth = chWidth;
                     m_minstrelGroups[groupId].type = WIFI_MINSTREL_GROUP_HE;
                     m_minstrelGroups[groupId].isSupported = false;
 
                     // Check capabilities of the device
-                    if ((GetGuardInterval() <= gi) /// Is GI supported by the transmitter?
+                    if ((GetGuardInterval() <=
+                         guardInterval) /// Is GI supported by the transmitter?
                         && (GetPhy()->GetChannelWidth() >=
                             chWidth) /// Is channel width supported by the transmitter?
                         && (GetPhy()->GetMaxSupportedTxSpatialStreams() >=
@@ -386,7 +380,7 @@
                                     mode,
                                     CalculateMpduTxDuration(GetPhy(),
                                                             streams,
-                                                            gi,
+                                                            guardInterval,
                                                             chWidth,
                                                             mode,
                                                             FIRST_MPDU_IN_AGGREGATE));
@@ -394,7 +388,7 @@
                                               mode,
                                               CalculateMpduTxDuration(GetPhy(),
                                                                       streams,
-                                                                      gi,
+                                                                      guardInterval,
                                                                       chWidth,
                                                                       mode,
                                                                       MIDDLE_MPDU_IN_AGGREGATE));
@@ -411,10 +405,7 @@
 }
 
 bool
-MinstrelHtWifiManager::IsValidMcs(Ptr<WifiPhy> phy,
-                                  uint8_t streams,
-                                  uint16_t chWidth,
-                                  WifiMode mode)
+MinstrelHtWifiManager::IsValidMcs(Ptr<WifiPhy> phy, uint8_t streams, MHz_u chWidth, WifiMode mode)
 {
     NS_LOG_FUNCTION(this << phy << +streams << chWidth << mode);
     WifiTxVector txvector;
@@ -427,8 +418,8 @@
 Time
 MinstrelHtWifiManager::CalculateMpduTxDuration(Ptr<WifiPhy> phy,
                                                uint8_t streams,
-                                               uint16_t gi,
-                                               uint16_t chWidth,
+                                               Time gi,
+                                               MHz_u chWidth,
                                                WifiMode mode,
                                                MpduType mpduType)
 {
@@ -641,7 +632,7 @@
                                       double ackSnr,
                                       WifiMode ackMode,
                                       double dataSnr,
-                                      uint16_t dataChannelWidth,
+                                      MHz_u dataChannelWidth,
                                       uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -653,14 +644,14 @@
         return;
     }
 
-    NS_LOG_DEBUG("DoReportDataOk m_txrate = "
-                 << station->m_txrate
-                 << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt
-                 << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess
-                 << " (before update).");
-
     if (!station->m_isHt)
     {
+        NS_LOG_DEBUG("DoReportDataOk m_txrate = "
+                     << station->m_txrate
+                     << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt
+                     << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess
+                     << " (before update).");
+
         station->m_minstrelTable[station->m_txrate].numRateSuccess++;
         station->m_minstrelTable[station->m_txrate].numRateAttempt++;
 
@@ -684,16 +675,25 @@
     {
         uint8_t rateId = GetRateId(station->m_txrate);
         uint8_t groupId = GetGroupId(station->m_txrate);
+
+        NS_LOG_DEBUG(
+            "DoReportDataOk m_txrate = "
+            << station->m_txrate
+            << ", attempt = " << station->m_groupsTable[groupId].m_ratesTable[rateId].numRateAttempt
+            << ", success = " << station->m_groupsTable[groupId].m_ratesTable[rateId].numRateSuccess
+            << " (before update).");
+
         station->m_groupsTable[groupId].m_ratesTable[rateId].numRateSuccess++;
         station->m_groupsTable[groupId].m_ratesTable[rateId].numRateAttempt++;
 
         UpdatePacketCounters(station, 1, 0);
 
-        NS_LOG_DEBUG("DoReportDataOk m_txrate = "
-                     << station->m_txrate
-                     << ", attempt = " << station->m_minstrelTable[station->m_txrate].numRateAttempt
-                     << ", success = " << station->m_minstrelTable[station->m_txrate].numRateSuccess
-                     << " (after update).");
+        NS_LOG_DEBUG(
+            "DoReportDataOk m_txrate = "
+            << station->m_txrate
+            << ", attempt = " << station->m_groupsTable[groupId].m_ratesTable[rateId].numRateAttempt
+            << ", success = " << station->m_groupsTable[groupId].m_ratesTable[rateId].numRateSuccess
+            << " (after update).");
 
         station->m_isSampling = false;
         station->m_sampleDeferred = false;
@@ -766,7 +766,7 @@
                                              uint16_t nFailedMpdus,
                                              double rxSnr,
                                              double dataSnr,
-                                             uint16_t dataChannelWidth,
+                                             MHz_u dataChannelWidth,
                                              uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << nSuccessfulMpdus << nFailedMpdus << rxSnr << dataSnr
@@ -963,7 +963,7 @@
 }
 
 uint16_t
-MinstrelHtWifiManager::UpdateRateAfterAllowedWidth(uint16_t txRate, uint16_t allowedWidth)
+MinstrelHtWifiManager::UpdateRateAfterAllowedWidth(uint16_t txRate, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << txRate << allowedWidth);
 
@@ -977,11 +977,11 @@
     }
 
     NS_ASSERT(GetPhy()->GetDevice()->GetHtConfiguration() != nullptr);
-    NS_ASSERT(group.chWidth % 20 == 0);
+    NS_ASSERT(static_cast<uint16_t>(group.chWidth) % 20 == 0);
     // try halving the channel width and check if the group with the same number of
     // streams and same GI is supported, until either a supported group is found or
     // the width becomes lower than 20 MHz
-    uint16_t width = group.chWidth / 2;
+    auto width = group.chWidth / 2;
 
     while (width >= 20)
     {
@@ -1021,7 +1021,7 @@
 }
 
 WifiTxVector
-MinstrelHtWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+MinstrelHtWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<MinstrelHtWifiRemoteStation*>(st);
@@ -1058,7 +1058,7 @@
     // Check consistency of rate selected.
     if (((group.type == WIFI_MINSTREL_GROUP_HE) && (group.gi < GetGuardInterval(station))) ||
         (((group.type == WIFI_MINSTREL_GROUP_HT) || (group.type == WIFI_MINSTREL_GROUP_VHT)) &&
-         (group.gi == 400) && !GetShortGuardIntervalSupported(station)) ||
+         (group.gi.GetNanoSeconds() == 400) && !GetShortGuardIntervalSupported(station)) ||
         (group.chWidth > GetChannelWidth(station)) ||
         (group.streams > GetNumberOfSupportedStreams(station)))
     {
@@ -1067,7 +1067,7 @@
                        << " Station capabilities: (" << GetNumberOfSupportedStreams(station) << ","
                        << ((group.type == WIFI_MINSTREL_GROUP_HE)
                                ? GetGuardInterval(station)
-                               : (GetShortGuardIntervalSupported(station) ? 400 : 800))
+                               : NanoSeconds(GetShortGuardIntervalSupported(station) ? 400 : 800))
                        << "," << GetChannelWidth(station) << ")");
     }
     WifiMode mode = GetMcsSupported(station, mcsIndex);
@@ -1164,7 +1164,7 @@
             rtsRate,
             GetDefaultTxPowerLevel(),
             GetPreambleForTransmission(rtsRate.GetModulationClass(), GetShortPreambleEnabled()),
-            800,
+            NanoSeconds(800),
             1,
             1,
             0,
@@ -1742,7 +1742,8 @@
             }
             if (((m_minstrelGroups[groupId].type == WIFI_MINSTREL_GROUP_HT) ||
                  (m_minstrelGroups[groupId].type == WIFI_MINSTREL_GROUP_VHT)) &&
-                (m_minstrelGroups[groupId].gi == 400) && !GetShortGuardIntervalSupported(station))
+                (m_minstrelGroups[groupId].gi.GetNanoSeconds() == 400) &&
+                !GetShortGuardIntervalSupported(station))
             {
                 // It is a SGI group but the receiver does not support SGI: skip
                 continue;
@@ -2108,20 +2109,20 @@
 }
 
 uint8_t
-MinstrelHtWifiManager::GetHtGroupId(uint8_t txstreams, uint16_t gi, uint16_t chWidth)
+MinstrelHtWifiManager::GetHtGroupId(uint8_t txstreams, Time guardInterval, MHz_u chWidth)
 {
-    NS_LOG_FUNCTION(this << +txstreams << gi << chWidth);
-    uint8_t giIndex = (gi == 400) ? 1 : 0;
+    NS_LOG_FUNCTION(this << +txstreams << guardInterval << chWidth);
+    uint8_t giIndex = (guardInterval.GetNanoSeconds() == 400) ? 1 : 0;
     uint8_t widthIndex = (chWidth == 40) ? 1 : 0;
     return (MAX_HT_SUPPORTED_STREAMS * 2 * widthIndex) + (MAX_HT_SUPPORTED_STREAMS * giIndex) +
            txstreams - 1;
 }
 
 uint8_t
-MinstrelHtWifiManager::GetVhtGroupId(uint8_t txstreams, uint16_t gi, uint16_t chWidth)
+MinstrelHtWifiManager::GetVhtGroupId(uint8_t txstreams, Time guardInterval, MHz_u chWidth)
 {
-    NS_LOG_FUNCTION(this << +txstreams << gi << chWidth);
-    uint8_t giIndex = (gi == 400) ? 1 : 0;
+    NS_LOG_FUNCTION(this << +txstreams << guardInterval << chWidth);
+    uint8_t giIndex = (guardInterval.GetNanoSeconds() == 400) ? 1 : 0;
     uint8_t widthIndex;
     if (chWidth == 160)
     {
@@ -2146,11 +2147,11 @@
 }
 
 uint8_t
-MinstrelHtWifiManager::GetHeGroupId(uint8_t txstreams, uint16_t gi, uint16_t chWidth)
+MinstrelHtWifiManager::GetHeGroupId(uint8_t txstreams, Time guardInterval, MHz_u chWidth)
 {
-    NS_LOG_FUNCTION(this << +txstreams << gi << chWidth);
+    NS_LOG_FUNCTION(this << +txstreams << guardInterval << chWidth);
     uint8_t giIndex;
-    if (gi == 800)
+    if (const auto gi = guardInterval.GetNanoSeconds(); gi == 800)
     {
         giIndex = 2;
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/minstrel-ht-wifi-manager.h ns-3.43/src/wifi/model/rate-control/minstrel-ht-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/minstrel-ht-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/minstrel-ht-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 Duy Nguyen
  * Copyright (c) 2015 Ghada Badawy
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *Authors: Duy Nguyen <duy@soe.ucsc.edu>
  *         Ghada Badawy <gbadawy@gmail.com>
@@ -27,8 +16,8 @@
 
 #include "minstrel-wifi-manager.h"
 
-#include "ns3/wifi-mpdu-type.h"
 #include "ns3/wifi-remote-station-manager.h"
+#include "ns3/wifi-types.h"
 
 namespace ns3
 {
@@ -81,8 +70,8 @@
 struct McsGroup
 {
     uint8_t streams;   ///< number of spatial streams
-    uint16_t gi;       ///< guard interval duration (nanoseconds)
-    uint16_t chWidth;  ///< channel width (MHz)
+    Time gi;           ///< guard interval duration
+    MHz_u chWidth;     ///< channel width
     McsGroupType type; ///< identifies the group, \see McsGroupType
     bool isSupported;  ///< flag whether group is  supported
     // To accurately account for TX times, we separate the TX time of the first
@@ -185,9 +174,9 @@
 static const uint8_t MAX_HT_GROUP_RATES = 8;   //!< Number of rates (or MCS) per HT group.
 static const uint8_t MAX_VHT_GROUP_RATES = 10; //!< Number of rates (or MCS) per VHT group.
 static const uint8_t MAX_HE_GROUP_RATES = 12;  //!< Number of rates (or MCS) per HE group.
-static const uint8_t MAX_HT_WIDTH = 40;        //!< Maximal channel width in MHz.
-static const uint8_t MAX_VHT_WIDTH = 160;      //!< Maximal channel width in MHz.
-static const uint8_t MAX_HE_WIDTH = 160;       //!< Maximal channel width in MHz.
+static const MHz_u MAX_HT_WIDTH = 40;          //!< Maximal channel width.
+static const MHz_u MAX_VHT_WIDTH = 160;        //!< Maximal channel width.
+static const MHz_u MAX_HE_WIDTH = 160;         //!< Maximal channel width.
 
 /**
  * \brief Implementation of Minstrel-HT Rate Control Algorithm
@@ -270,18 +259,18 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
     void DoReportAmpduTxStatus(WifiRemoteStation* station,
                                uint16_t nSuccessfulMpdus,
                                uint16_t nFailedMpdus,
                                double rxSnr,
                                double dataSnr,
-                               uint16_t dataChannelWidth,
+                               MHz_u dataChannelWidth,
                                uint8_t dataNss) override;
     bool DoNeedRetransmission(WifiRemoteStation* st,
                               Ptr<const Packet> packet,
@@ -292,11 +281,11 @@
      *
      * \param phy pointer to the wifi PHY
      * \param streams the number of streams
-     * \param chWidth the channel width (MHz)
+     * \param chWidth the channel width
      * \param mode the wifi mode
      * \returns true if the combination is valid
      */
-    bool IsValidMcs(Ptr<WifiPhy> phy, uint8_t streams, uint16_t chWidth, WifiMode mode);
+    bool IsValidMcs(Ptr<WifiPhy> phy, uint8_t streams, MHz_u chWidth, WifiMode mode);
 
     /**
      * Estimates the TxTime of a frame with a given mode and group (stream, guard interval and
@@ -304,16 +293,16 @@
      *
      * \param phy pointer to the wifi PHY
      * \param streams the number of streams
-     * \param gi guard interval duration (nanoseconds)
-     * \param chWidth the channel width (MHz)
+     * \param gi guard interval duration
+     * \param chWidth the channel width
      * \param mode the wifi mode
      * \param mpduType the type of the MPDU
      * \returns the transmit time
      */
     Time CalculateMpduTxDuration(Ptr<WifiPhy> phy,
                                  uint8_t streams,
-                                 uint16_t gi,
-                                 uint16_t chWidth,
+                                 Time gi,
+                                 MHz_u chWidth,
                                  WifiMode mode,
                                  MpduType mpduType);
 
@@ -577,31 +566,31 @@
      * Returns the groupId of an HT MCS with the given number of streams, GI and channel width used.
      *
      * \param txstreams the number of streams
-     * \param gi guard interval duration (nanoseconds)
-     * \param chWidth the channel width (MHz)
+     * \param guardInterval guard interval duration
+     * \param chWidth the channel width
      * \returns the HT group ID
      */
-    uint8_t GetHtGroupId(uint8_t txstreams, uint16_t gi, uint16_t chWidth);
+    uint8_t GetHtGroupId(uint8_t txstreams, Time guardInterval, MHz_u chWidth);
 
     /**
      * Returns the groupId of a VHT MCS with the given number of streams, GI and channel width used.
      *
      * \param txstreams the number of streams
-     * \param gi guard interval duration (nanoseconds)
-     * \param chWidth the channel width (MHz)
+     * \param guardInterval guard interval duration
+     * \param chWidth the channel width
      * \returns the VHT group ID
      */
-    uint8_t GetVhtGroupId(uint8_t txstreams, uint16_t gi, uint16_t chWidth);
+    uint8_t GetVhtGroupId(uint8_t txstreams, Time guardInterval, MHz_u chWidth);
 
     /**
      * Returns the groupId of an HE MCS with the given number of streams, GI and channel width used.
      *
      * \param txstreams the number of streams
-     * \param gi guard interval duration (nanoseconds)
-     * \param chWidth the channel width (MHz)
+     * \param guardInterval guard interval duration
+     * \param chWidth the channel width
      * \returns the HE group ID
      */
-    uint8_t GetHeGroupId(uint8_t txstreams, uint16_t gi, uint16_t chWidth);
+    uint8_t GetHeGroupId(uint8_t txstreams, Time guardInterval, MHz_u chWidth);
 
     /**
      * Returns the lowest global index of the rates supported by the station.
@@ -648,11 +637,11 @@
      * found, the simulation aborts.
      *
      * \param txRate the index of the current TX rate
-     * \param allowedWidth the allowed width in MHz
+     * \param allowedWidth the allowed width
      * \return the index of a TX rate whose channel width is not greater than the
      *         allowed width, if found (otherwise, the simulation aborts)
      */
-    uint16_t UpdateRateAfterAllowedWidth(uint16_t txRate, uint16_t allowedWidth);
+    uint16_t UpdateRateAfterAllowedWidth(uint16_t txRate, MHz_u allowedWidth);
 
     Time m_updateStats;            //!< How frequent do we calculate the stats.
     Time m_legacyUpdateStats;      //!< How frequent do we calculate the stats for legacy
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/minstrel-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/minstrel-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/minstrel-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/minstrel-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Duy Nguyen
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Duy Nguyen <duy@soe.ucsc.edu>
  *          Matías Richart <mrichart@fing.edu.uy>
@@ -385,7 +374,7 @@
 MinstrelWifiManager::GetDataTxVector(MinstrelWifiRemoteStation* station)
 {
     NS_LOG_FUNCTION(this << station);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -405,7 +394,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -418,7 +407,7 @@
 {
     NS_LOG_FUNCTION(this << station);
     NS_LOG_DEBUG("DoGetRtsMode m_txrate=" << station->m_txrate);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -436,7 +425,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -818,7 +807,7 @@
                                     double ackSnr,
                                     WifiMode ackMode,
                                     double dataSnr,
-                                    uint16_t dataChannelWidth,
+                                    MHz_u dataChannelWidth,
                                     uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -932,7 +921,7 @@
 }
 
 WifiTxVector
-MinstrelWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+MinstrelWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<MinstrelWifiRemoteStation*>(st);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/minstrel-wifi-manager.h ns-3.43/src/wifi/model/rate-control/minstrel-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/minstrel-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/minstrel-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 Duy Nguyen
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Duy Nguyen <duy@soe.ucsc.edu>
  *          Matías Richart <mrichart@fing.edu.uy>
@@ -257,11 +246,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     bool DoNeedRetransmission(WifiRemoteStation* st,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/onoe-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/onoe-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/onoe-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/onoe-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2003,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -168,7 +157,7 @@
                                 double ackSnr,
                                 WifiMode ackMode,
                                 double dataSnr,
-                                uint16_t dataChannelWidth,
+                                MHz_u dataChannelWidth,
                                 uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -290,7 +279,7 @@
 }
 
 WifiTxVector
-OnoeWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+OnoeWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<OnoeWifiRemoteStation*>(st);
@@ -334,7 +323,7 @@
             rateIndex = station->m_txrate;
         }
     }
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -350,7 +339,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -363,7 +352,7 @@
 {
     NS_LOG_FUNCTION(this << st);
     auto station = static_cast<OnoeWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -382,7 +371,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/onoe-wifi-manager.h ns-3.43/src/wifi/model/rate-control/onoe-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/onoe-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/onoe-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2003,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -68,11 +57,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/parf-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/parf-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/parf-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/parf-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matias Richart <mrichart@fing.edu.uy>
  */
@@ -154,9 +143,9 @@
         station->m_powerLevel = m_maxPower;
         station->m_prevPowerLevel = m_maxPower;
         WifiMode mode = GetSupported(station, station->m_rateIndex);
-        uint16_t channelWidth = GetChannelWidth(station);
+        auto channelWidth = GetChannelWidth(station);
         DataRate rate(mode.GetDataRate(channelWidth));
-        double power = GetPhy()->GetPowerDbm(m_maxPower);
+        const auto power = GetPhy()->GetPower(m_maxPower);
         m_powerChange(power, power, station->m_state->m_address);
         m_rateChange(rate, rate, station->m_state->m_address);
         station->m_initialized = true;
@@ -269,7 +258,7 @@
                                 double ackSnr,
                                 WifiMode ackMode,
                                 double dataSnr,
-                                uint16_t dataChannelWidth,
+                                MHz_u dataChannelWidth,
                                 uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -320,11 +309,11 @@
 }
 
 WifiTxVector
-ParfWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+ParfWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<ParfWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -333,8 +322,8 @@
     WifiMode mode = GetSupported(station, station->m_rateIndex);
     DataRate rate(mode.GetDataRate(channelWidth));
     DataRate prevRate(GetSupported(station, station->m_prevRateIndex).GetDataRate(channelWidth));
-    double power = GetPhy()->GetPowerDbm(station->m_powerLevel);
-    double prevPower = GetPhy()->GetPowerDbm(station->m_prevPowerLevel);
+    const auto power = GetPhy()->GetPower(station->m_powerLevel);
+    const auto prevPower = GetPhy()->GetPower(station->m_prevPowerLevel);
     if (station->m_prevPowerLevel != station->m_powerLevel)
     {
         m_powerChange(prevPower, power, station->m_state->m_address);
@@ -349,7 +338,7 @@
         mode,
         station->m_powerLevel,
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -364,7 +353,7 @@
     /// \todo we could/should implement the ARF algorithm for
     /// RTS only by picking a single rate within the BasicRateSet.
     auto station = static_cast<ParfWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -382,7 +371,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/parf-wifi-manager.h ns-3.43/src/wifi/model/rate-control/parf-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/parf-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/parf-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matias Richart <mrichart@fing.edu.uy>
  */
@@ -68,11 +57,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     /** Check for initializations.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/rraa-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/rraa-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/rraa-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/rraa-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2004,2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Federico Maguolo <maguolof@dei.unipd.it>
  */
@@ -329,7 +318,7 @@
                                 double ackSnr,
                                 WifiMode ackMode,
                                 double dataSnr,
-                                uint16_t dataChannelWidth,
+                                MHz_u dataChannelWidth,
                                 uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -353,11 +342,11 @@
 }
 
 WifiTxVector
-RraaWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+RraaWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<RraaWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -374,7 +363,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -387,7 +376,7 @@
 {
     NS_LOG_FUNCTION(this << st);
     auto station = static_cast<RraaWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -405,7 +394,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/rraa-wifi-manager.h ns-3.43/src/wifi/model/rate-control/rraa-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/rraa-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/rraa-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Federico Maguolo <maguolof@dei.unipd.it>
  */
@@ -84,11 +73,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
     bool DoNeedRts(WifiRemoteStation* st, uint32_t size, bool normally) override;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/rrpaa-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/rrpaa-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/rrpaa-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/rrpaa-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matías Richart <mrichart@fing.edu.uy>
  */
@@ -261,9 +250,9 @@
         station->m_prevPowerLevel = m_maxPowerLevel;
         station->m_powerLevel = m_maxPowerLevel;
         WifiMode mode = GetSupported(station, 0);
-        uint16_t channelWidth = GetChannelWidth(station);
+        auto channelWidth = GetChannelWidth(station);
         DataRate rate(mode.GetDataRate(channelWidth));
-        double power = GetPhy()->GetPowerDbm(station->m_powerLevel);
+        const auto power = GetPhy()->GetPower(station->m_powerLevel);
         m_rateChange(rate, rate, station->m_state->m_address);
         m_powerChange(power, power, station->m_state->m_address);
 
@@ -372,7 +361,7 @@
                                  double ackSnr,
                                  WifiMode ackMode,
                                  double dataSnr,
-                                 uint16_t dataChannelWidth,
+                                 MHz_u dataChannelWidth,
                                  uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode << dataSnr << dataChannelWidth << +dataNss);
@@ -397,11 +386,11 @@
 }
 
 WifiTxVector
-RrpaaWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+RrpaaWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     auto station = static_cast<RrpaaWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -410,8 +399,8 @@
     WifiMode mode = GetSupported(station, station->m_rateIndex);
     DataRate rate(mode.GetDataRate(channelWidth));
     DataRate prevRate(GetSupported(station, station->m_prevRateIndex).GetDataRate(channelWidth));
-    double power = GetPhy()->GetPowerDbm(station->m_powerLevel);
-    double prevPower = GetPhy()->GetPowerDbm(station->m_prevPowerLevel);
+    const auto power = GetPhy()->GetPower(station->m_powerLevel);
+    const auto prevPower = GetPhy()->GetPower(station->m_prevPowerLevel);
     if (station->m_prevRateIndex != station->m_rateIndex)
     {
         m_rateChange(prevRate, rate, station->m_state->m_address);
@@ -426,7 +415,7 @@
         mode,
         station->m_powerLevel,
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
@@ -439,7 +428,7 @@
 {
     NS_LOG_FUNCTION(this << st);
     auto station = static_cast<RrpaaWifiRemoteStation*>(st);
-    uint16_t channelWidth = GetChannelWidth(station);
+    auto channelWidth = GetChannelWidth(station);
     if (channelWidth > 20 && channelWidth != 22)
     {
         channelWidth = 20;
@@ -457,7 +446,7 @@
         mode,
         GetDefaultTxPowerLevel(),
         GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()),
-        800,
+        NanoSeconds(800),
         1,
         1,
         0,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/rrpaa-wifi-manager.h ns-3.43/src/wifi/model/rate-control/rrpaa-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/rrpaa-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/rrpaa-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matías Richart <mrichart@fing.edu.uy>
  */
@@ -110,11 +99,11 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
     bool DoNeedRts(WifiRemoteStation* st, uint32_t size, bool normally) override;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/thompson-sampling-wifi-manager.cc ns-3.43/src/wifi/model/rate-control/thompson-sampling-wifi-manager.cc
--- ns-3.42/src/wifi/model/rate-control/thompson-sampling-wifi-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/thompson-sampling-wifi-manager.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  */
@@ -40,9 +29,9 @@
  */
 struct RateStats
 {
-    WifiMode mode;         ///< MCS
-    uint16_t channelWidth; ///< channel width in MHz
-    uint8_t nss;           ///< Number of spatial streams
+    WifiMode mode;      ///< MCS
+    MHz_u channelWidth; ///< channel width
+    uint8_t nss;        ///< Number of spatial streams
 
     double success{0.0}; ///< averaged number of successful transmissions
     double fails{0.0};   ///< averaged number of failed transmissions
@@ -123,7 +112,7 @@
     // Add HT, VHT or HE MCSes
     for (const auto& mode : GetPhy()->GetMcsList())
     {
-        for (uint16_t j = 20; j <= GetPhy()->GetChannelWidth(); j *= 2)
+        for (MHz_u j = 20; j <= GetPhy()->GetChannelWidth(); j *= 2)
         {
             WifiModulationClass modulationClass = WIFI_MOD_CLASS_HT;
             if (GetVhtSupported())
@@ -227,12 +216,12 @@
     for (uint32_t i = 0; i < station->m_mcsStats.size(); i++)
     {
         Decay(st, i);
-        const WifiMode mode{station->m_mcsStats.at(i).mode};
+        const auto mode{station->m_mcsStats.at(i).mode};
 
-        uint16_t guardInterval = GetModeGuardInterval(st, mode);
-        double rate = mode.GetDataRate(station->m_mcsStats.at(i).channelWidth,
-                                       guardInterval,
-                                       station->m_mcsStats.at(i).nss);
+        const auto guardInterval = GetModeGuardInterval(st, mode);
+        const auto rate = mode.GetDataRate(station->m_mcsStats.at(i).channelWidth,
+                                           guardInterval,
+                                           station->m_mcsStats.at(i).nss);
 
         // Thompson sampling
         frameSuccessRate = SampleBetaVariable(1.0 + station->m_mcsStats.at(i).success,
@@ -254,7 +243,7 @@
                                             double ackSnr,
                                             WifiMode ackMode,
                                             double dataSnr,
-                                            uint16_t dataChannelWidth,
+                                            MHz_u dataChannelWidth,
                                             uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << ackSnr << ackMode.GetUniqueName() << dataSnr);
@@ -271,7 +260,7 @@
                                                    uint16_t nFailedMpdus,
                                                    double rxSnr,
                                                    double dataSnr,
-                                                   uint16_t dataChannelWidth,
+                                                   MHz_u dataChannelWidth,
                                                    uint8_t dataNss)
 {
     NS_LOG_FUNCTION(this << st << nSuccessfulMpdus << nFailedMpdus << rxSnr << dataSnr);
@@ -297,7 +286,7 @@
     NS_LOG_FUNCTION(this << station);
 }
 
-uint16_t
+Time
 ThompsonSamplingWifiManager::GetModeGuardInterval(WifiRemoteStation* st, WifiMode mode) const
 {
     if (mode.GetModulationClass() == WIFI_MOD_CLASS_HE)
@@ -307,27 +296,27 @@
     else if ((mode.GetModulationClass() == WIFI_MOD_CLASS_HT) ||
              (mode.GetModulationClass() == WIFI_MOD_CLASS_VHT))
     {
-        return std::max<uint16_t>(GetShortGuardIntervalSupported(st) ? 400 : 800,
-                                  GetShortGuardIntervalSupported() ? 400 : 800);
+        auto useSgi = GetShortGuardIntervalSupported(st) && GetShortGuardIntervalSupported();
+        return NanoSeconds(useSgi ? 400 : 800);
     }
     else
     {
-        return 800;
+        return NanoSeconds(800);
     }
 }
 
 WifiTxVector
-ThompsonSamplingWifiManager::DoGetDataTxVector(WifiRemoteStation* st, uint16_t allowedWidth)
+ThompsonSamplingWifiManager::DoGetDataTxVector(WifiRemoteStation* st, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << st << allowedWidth);
     InitializeStation(st);
     auto station = static_cast<ThompsonSamplingWifiRemoteStation*>(st);
 
     auto& stats = station->m_mcsStats.at(station->m_nextMode);
-    WifiMode mode = stats.mode;
-    uint16_t channelWidth = std::min(stats.channelWidth, allowedWidth);
-    uint8_t nss = stats.nss;
-    uint16_t guardInterval = GetModeGuardInterval(st, mode);
+    const auto mode = stats.mode;
+    const auto channelWidth = std::min(stats.channelWidth, allowedWidth);
+    const auto nss = stats.nss;
+    const auto guardInterval = GetModeGuardInterval(st, mode);
 
     station->m_lastMode = station->m_nextMode;
 
@@ -335,7 +324,7 @@
                  << " mode=" << mode << " channelWidth=" << channelWidth << " nss=" << +nss
                  << " guardInterval=" << guardInterval);
 
-    uint64_t rate = mode.GetDataRate(channelWidth, guardInterval, nss);
+    const auto rate = mode.GetDataRate(channelWidth, guardInterval, nss);
     if (m_currentRate != rate)
     {
         NS_LOG_DEBUG("New datarate: " << rate);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/rate-control/thompson-sampling-wifi-manager.h ns-3.43/src/wifi/model/rate-control/thompson-sampling-wifi-manager.h
--- ns-3.42/src/wifi/model/rate-control/thompson-sampling-wifi-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/rate-control/thompson-sampling-wifi-manager.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  */
@@ -62,18 +51,18 @@
                         double ackSnr,
                         WifiMode ackMode,
                         double dataSnr,
-                        uint16_t dataChannelWidth,
+                        MHz_u dataChannelWidth,
                         uint8_t dataNss) override;
     void DoReportAmpduTxStatus(WifiRemoteStation* station,
                                uint16_t nSuccessfulMpdus,
                                uint16_t nFailedMpdus,
                                double rxSnr,
                                double dataSnr,
-                               uint16_t dataChannelWidth,
+                               MHz_u dataChannelWidth,
                                uint8_t dataNss) override;
     void DoReportFinalRtsFailed(WifiRemoteStation* station) override;
     void DoReportFinalDataFailed(WifiRemoteStation* station) override;
-    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) override;
+    WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) override;
     WifiTxVector DoGetRtsTxVector(WifiRemoteStation* station) override;
 
     /**
@@ -106,13 +95,13 @@
     void Decay(WifiRemoteStation* st, size_t i) const;
 
     /**
-     * Returns guard interval in nanoseconds for the given mode.
+     * Returns guard interval for the given mode.
      *
-     * \param st Remote STA.
-     * \param mode The WifiMode.
-     * \return the guard interval in nanoseconds
+     * \param st Remote STA
+     * \param mode The WifiMode
+     * \return the guard interval
      */
-    uint16_t GetModeGuardInterval(WifiRemoteStation* st, WifiMode mode) const;
+    Time GetModeGuardInterval(WifiRemoteStation* st, WifiMode mode) const;
 
     /**
      * Sample beta random variable with given parameters
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/recipient-block-ack-agreement.cc ns-3.43/src/wifi/model/recipient-block-ack-agreement.cc
--- ns-3.42/src/wifi/model/recipient-block-ack-agreement.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/recipient-block-ack-agreement.cc	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/recipient-block-ack-agreement.h ns-3.43/src/wifi/model/recipient-block-ack-agreement.h
--- ns-3.42/src/wifi/model/recipient-block-ack-agreement.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/recipient-block-ack-agreement.h	2024-10-09 16:41:10.124656700 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/reduced-neighbor-report.cc ns-3.43/src/wifi/model/reduced-neighbor-report.cc
--- ns-3.42/src/wifi/model/reduced-neighbor-report.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/reduced-neighbor-report.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -168,7 +157,7 @@
                         << "band " << channel.GetPhyBand());
 
     // find the primary channel number
-    uint16_t startingFreq = 0;
+    MHz_u startingFreq = 0;
 
     switch (channel.GetPhyBand())
     {
@@ -200,7 +189,7 @@
     NS_ASSERT(nbrApInfoId < m_nbrApInfoFields.size());
 
     WifiPhyBand band = WIFI_PHY_BAND_UNSPECIFIED;
-    uint16_t width = 0;
+    MHz_u width = 0;
 
     switch (m_nbrApInfoFields.at(nbrApInfoId).operatingClass)
     {
@@ -256,7 +245,7 @@
 
     NS_ABORT_IF(band == WIFI_PHY_BAND_UNSPECIFIED || width == 0);
 
-    uint16_t startingFreq = 0;
+    MHz_u startingFreq = 0;
 
     switch (band)
     {
@@ -276,17 +265,17 @@
     }
 
     uint8_t primaryChannelNumber = m_nbrApInfoFields.at(nbrApInfoId).channelNumber;
-    uint16_t primaryChannelCenterFrequency = startingFreq + primaryChannelNumber * 5;
+    MHz_u primaryChannelCenterFrequency = startingFreq + primaryChannelNumber * 5;
 
     uint8_t channelNumber = 0;
-    uint16_t frequency = 0;
+    MHz_u frequency = 0;
 
     for (const auto& channel : WifiPhyOperatingChannel::m_frequencyChannels)
     {
-        if (std::get<2>(channel) == width && std::get<3>(channel) == WIFI_PHY_OFDM_CHANNEL &&
-            std::get<4>(channel) == band &&
-            primaryChannelCenterFrequency > std::get<1>(channel) - width / 2 &&
-            primaryChannelCenterFrequency < std::get<1>(channel) + width / 2)
+        if (channel.width == width && channel.type == FrequencyChannelType::OFDM &&
+            channel.band == band &&
+            primaryChannelCenterFrequency > (channel.frequency - (width / 2)) &&
+            primaryChannelCenterFrequency < (channel.frequency + (width / 2)))
         {
             // the center frequency of the primary channel falls into the frequency
             // range of this channel
@@ -301,17 +290,17 @@
                 // frequency channels overlap in the 2.4 GHz band, hence we have to check
                 // that the given primary channel center frequency can be the center frequency
                 // of the primary20 channel of the channel under consideration
-                switch (width)
+                switch (static_cast<uint16_t>(width))
                 {
                 case 20:
-                    if (std::get<1>(channel) == primaryChannelCenterFrequency)
+                    if (channel.frequency == primaryChannelCenterFrequency)
                     {
                         found = true;
                     }
                     break;
                 case 40:
-                    if (std::get<1>(channel) == primaryChannelCenterFrequency + 10 ||
-                        std::get<1>(channel) == primaryChannelCenterFrequency - 10)
+                    if ((channel.frequency == primaryChannelCenterFrequency + 10) ||
+                        (channel.frequency == primaryChannelCenterFrequency - 10))
                     {
                         found = true;
                     }
@@ -323,8 +312,8 @@
 
             if (found)
             {
-                channelNumber = std::get<0>(channel);
-                frequency = std::get<1>(channel);
+                channelNumber = channel.number;
+                frequency = channel.frequency;
                 break;
             }
         }
@@ -333,10 +322,10 @@
     NS_ABORT_IF(channelNumber == 0 || frequency == 0);
 
     WifiPhyOperatingChannel channel;
-    channel.Set(channelNumber, frequency, width, WIFI_STANDARD_UNSPECIFIED, band);
+    channel.Set({{channelNumber, frequency, width, band}}, WIFI_STANDARD_UNSPECIFIED);
 
-    uint16_t channelLowestFreq = frequency - width / 2;
-    uint16_t primaryChannelLowestFreq = primaryChannelCenterFrequency - 10;
+    MHz_u channelLowestFreq = frequency - width / 2;
+    MHz_u primaryChannelLowestFreq = primaryChannelCenterFrequency - 10;
     channel.SetPrimary20Index((primaryChannelLowestFreq - channelLowestFreq) / 20);
 
     return channel;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/reduced-neighbor-report.h ns-3.43/src/wifi/model/reduced-neighbor-report.h
--- ns-3.42/src/wifi/model/reduced-neighbor-report.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/reduced-neighbor-report.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/reference/error-rate-tables.cc ns-3.43/src/wifi/model/reference/error-rate-tables.cc
--- ns-3.42/src/wifi/model/reference/error-rate-tables.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/reference/error-rate-tables.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rohan Patidar <rpatidar@uw.edu>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/reference/error-rate-tables.h ns-3.43/src/wifi/model/reference/error-rate-tables.h
--- ns-3.42/src/wifi/model/reference/error-rate-tables.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/reference/error-rate-tables.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rohan Patidar <rpatidar@uw.edu>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -25,7 +14,8 @@
 #ifndef ERROR_RATE_TABLES_H
 #define ERROR_RATE_TABLES_H
 
-#include <cstdint>
+#include "ns3/wifi-units.h"
+
 #include <utility>
 #include <vector>
 
@@ -40,8 +30,8 @@
 const uint8_t ERROR_TABLE_BCC_MAX_NUM_MCS = 10;    //!< maximum number of MCSs for BCC
 const uint8_t ERROR_TABLE_LDPC_MAX_NUM_MCS = 12;   //!< maximum number of MCSs for LDPC
 
-/// Table of SNR (dB) and PER pairs
-typedef std::vector<std::pair<double /* SNR (dB) */, double /* PER */>> SnrPerTable;
+/// Table of SNR and PER pairs
+typedef std::vector<std::pair<dB_u /* SNR */, double /* PER */>> SnrPerTable;
 
 /// AWGN error table for BCC with reference size of 32 bytes
 extern const SnrPerTable AwgnErrorTableBcc32[ERROR_TABLE_BCC_MAX_NUM_MCS];
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/simple-frame-capture-model.cc ns-3.43/src/wifi/model/simple-frame-capture-model.cc
--- ns-3.42/src/wifi/model/simple-frame-capture-model.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/simple-frame-capture-model.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -48,7 +37,7 @@
                 DoubleValue(5),
                 MakeDoubleAccessor(&SimpleFrameCaptureModel::GetMargin,
                                    &SimpleFrameCaptureModel::SetMargin),
-                MakeDoubleChecker<double>());
+                MakeDoubleChecker<dB_u>());
     return tid;
 }
 
@@ -63,13 +52,13 @@
 }
 
 void
-SimpleFrameCaptureModel::SetMargin(double margin)
+SimpleFrameCaptureModel::SetMargin(dB_u margin)
 {
     NS_LOG_FUNCTION(this << margin);
     m_margin = margin;
 }
 
-double
+dB_u
 SimpleFrameCaptureModel::GetMargin() const
 {
     return m_margin;
@@ -79,7 +68,7 @@
 SimpleFrameCaptureModel::CaptureNewFrame(Ptr<Event> currentEvent, Ptr<Event> newEvent) const
 {
     NS_LOG_FUNCTION(this);
-    return WToDbm(currentEvent->GetRxPowerW()) + GetMargin() < WToDbm(newEvent->GetRxPowerW()) &&
+    return WToDbm(currentEvent->GetRxPower()) + GetMargin() < WToDbm(newEvent->GetRxPower()) &&
            IsInCaptureWindow(currentEvent->GetStartTime());
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/simple-frame-capture-model.h ns-3.43/src/wifi/model/simple-frame-capture-model.h
--- ns-3.42/src/wifi/model/simple-frame-capture-model.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/simple-frame-capture-model.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -21,6 +10,7 @@
 #define SIMPLE_FRAME_CAPTURE_MODEL_H
 
 #include "frame-capture-model.h"
+#include "wifi-units.h"
 
 namespace ns3
 {
@@ -47,17 +37,17 @@
     ~SimpleFrameCaptureModel() override;
 
     /**
-     * Sets the frame capture margin (dB).
+     * Sets the frame capture margin.
      *
-     * \param margin the frame capture margin in dB
+     * \param margin the frame capture margin
      */
-    void SetMargin(double margin);
+    void SetMargin(dB_u margin);
     /**
-     * Return the frame capture margin (dB).
+     * Return the frame capture margin.
      *
-     * \return the frame capture margin in dB
+     * \return the frame capture margin
      */
-    double GetMargin() const;
+    dB_u GetMargin() const;
 
     /**
      * This method returns whether the reception should be switched to a
@@ -72,7 +62,7 @@
     bool CaptureNewFrame(Ptr<Event> currentEvent, Ptr<Event> newEvent) const override;
 
   private:
-    double m_margin; ///< margin for determining if a new frame (dB)
+    dB_u m_margin; ///< margin for determining if a new frame
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/snr-tag.cc ns-3.43/src/wifi/model/snr-tag.cc
--- ns-3.42/src/wifi/model/snr-tag.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/snr-tag.cc	2024-10-09 16:41:10.128656900 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2009 MIRKO BANCHI
  * Copyright (c) 2013 University of Surrey
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/snr-tag.h ns-3.43/src/wifi/model/snr-tag.h
--- ns-3.42/src/wifi/model/snr-tag.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/snr-tag.h	2024-10-09 16:41:10.128656900 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2009 MIRKO BANCHI
  * Copyright (c) 2013 University of Surrey
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/spectrum-wifi-phy.cc ns-3.43/src/wifi/model/spectrum-wifi-phy.cc
--- ns-3.42/src/wifi/model/spectrum-wifi-phy.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/spectrum-wifi-phy.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Ghada Badawy <gbadawy@gmail.com>
@@ -40,9 +29,10 @@
 #include "ns3/spectrum-channel.h"
 
 #include <algorithm>
+#include <numeric>
 
 #undef NS_LOG_APPEND_CONTEXT
-#define NS_LOG_APPEND_CONTEXT WIFI_PHY_NS_LOG_APPEND_CONTEXT(Ptr(this))
+#define NS_LOG_APPEND_CONTEXT WIFI_PHY_NS_LOG_APPEND_CONTEXT(Ptr(this, false))
 
 namespace ns3
 {
@@ -75,19 +65,19 @@
                 "Minimum rejection (dBr) for the inner band of the transmit spectrum mask",
                 DoubleValue(-20.0),
                 MakeDoubleAccessor(&SpectrumWifiPhy::m_txMaskInnerBandMinimumRejection),
-                MakeDoubleChecker<double>())
+                MakeDoubleChecker<dBr_u>())
             .AddAttribute(
                 "TxMaskOuterBandMinimumRejection",
                 "Minimum rejection (dBr) for the outer band of the transmit spectrum mask",
                 DoubleValue(-28.0),
                 MakeDoubleAccessor(&SpectrumWifiPhy::m_txMaskOuterBandMinimumRejection),
-                MakeDoubleChecker<double>())
+                MakeDoubleChecker<dBr_u>())
             .AddAttribute(
                 "TxMaskOuterBandMaximumRejection",
                 "Maximum rejection (dBr) for the outer band of the transmit spectrum mask",
                 DoubleValue(-40.0),
                 MakeDoubleAccessor(&SpectrumWifiPhy::m_txMaskOuterBandMaximumRejection),
-                MakeDoubleChecker<double>())
+                MakeDoubleChecker<dBr_u>())
             .AddTraceSource(
                 "SignalArrival",
                 "Trace start of all signal arrivals, including weak and foreign signals",
@@ -98,7 +88,9 @@
 
 SpectrumWifiPhy::SpectrumWifiPhy()
     : m_spectrumPhyInterfaces{},
-      m_currentSpectrumPhyInterface{nullptr}
+      m_currentSpectrumPhyInterface{nullptr},
+      m_frequenciesBeforeSwitch{},
+      m_widthsBeforeSwitch{}
 {
     NS_LOG_FUNCTION(this);
 }
@@ -138,9 +130,9 @@
     }
     else
     {
-        for (uint16_t bw = channelWidth; bw >= 20; bw = bw / 2)
+        for (MHz_u bw = channelWidth; bw >= 20; bw = bw / 2)
         {
-            for (uint32_t i = 0; i < (channelWidth / bw); ++i)
+            for (uint16_t i = 0; i < (channelWidth / bw); ++i)
             {
                 bands.push_back(GetBandForInterface(spectrumPhyInterface, bw, i));
             }
@@ -151,11 +143,11 @@
 
 HeRuBands
 SpectrumWifiPhy::GetHeRuBands(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface,
-                              uint16_t guardBandwidth)
+                              MHz_u guardBandwidth)
 {
     HeRuBands heRuBands{};
     const auto channelWidth = spectrumPhyInterface->GetChannelWidth();
-    for (uint16_t bw = channelWidth; bw >= 20; bw = bw / 2)
+    for (MHz_u bw = channelWidth; bw >= 20; bw = bw / 2)
     {
         for (uint32_t i = 0; i < (channelWidth / bw); ++i)
         {
@@ -168,14 +160,23 @@
                     HeRu::SubcarrierGroup group = HeRu::GetSubcarrierGroup(bw, ruType, phyIndex);
                     HeRu::SubcarrierRange subcarrierRange =
                         std::make_pair(group.front().first, group.back().second);
-                    const auto bandIndices = HePhy::ConvertHeRuSubcarriers(bw,
-                                                                           guardBandwidth,
-                                                                           GetSubcarrierSpacing(),
-                                                                           subcarrierRange,
-                                                                           i);
-                    const auto bandFrequencies =
-                        ConvertIndicesToFrequenciesForInterface(spectrumPhyInterface, bandIndices);
-                    WifiSpectrumBandInfo band = {bandIndices, bandFrequencies};
+                    const auto bandIndices =
+                        HePhy::ConvertHeRuSubcarriers(bw,
+                                                      guardBandwidth,
+                                                      spectrumPhyInterface->GetCenterFrequencies(),
+                                                      spectrumPhyInterface->GetChannelWidth(),
+                                                      GetSubcarrierSpacing(),
+                                                      subcarrierRange,
+                                                      i);
+
+                    WifiSpectrumBandInfo band{};
+                    for (const auto& indicesPerSegment : bandIndices)
+                    {
+                        band.indices.emplace_back(indicesPerSegment);
+                        band.frequencies.emplace_back(
+                            ConvertIndicesToFrequenciesForInterface(spectrumPhyInterface,
+                                                                    indicesPerSegment));
+                    }
                     std::size_t index =
                         (bw == 160 && phyIndex > nRus / 2 ? phyIndex - nRus / 2 : phyIndex);
                     const auto p20Index = GetOperatingChannel().GetPrimaryChannelIndex(20);
@@ -263,10 +264,15 @@
 
 void
 SpectrumWifiPhy::ResetSpectrumModel(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface,
-                                    uint16_t centerFrequency,
-                                    uint16_t channelWidth)
+                                    const std::vector<MHz_u>& centerFrequencies,
+                                    MHz_u channelWidth)
 {
-    NS_LOG_FUNCTION(this << spectrumPhyInterface << centerFrequency << channelWidth);
+    std::stringstream ss;
+    for (const auto& centerFrequency : centerFrequencies)
+    {
+        ss << centerFrequency << " ";
+    }
+    NS_LOG_FUNCTION(this << spectrumPhyInterface << ss.str() << channelWidth);
 
     // We have to reset the spectrum model because we changed RF channel. Consequently,
     // we also have to add the spectrum interface to the spectrum channel again because
@@ -277,7 +283,7 @@
     // it again in the entry associated with the new RX spectrum model UID)
 
     // Replace existing spectrum model with new one
-    spectrumPhyInterface->SetRxSpectrumModel(centerFrequency,
+    spectrumPhyInterface->SetRxSpectrumModel(centerFrequencies,
                                              channelWidth,
                                              GetSubcarrierSpacing(),
                                              GetGuardBandwidth(channelWidth));
@@ -291,12 +297,21 @@
 SpectrumWifiPhy::DoChannelSwitch()
 {
     NS_LOG_FUNCTION(this);
-    const auto frequencyBefore = GetOperatingChannel().IsSet() ? GetFrequency() : 0;
-    const auto widthBefore = GetOperatingChannel().IsSet() ? GetChannelWidth() : 0;
+    m_frequenciesBeforeSwitch = GetOperatingChannel().IsSet()
+                                    ? GetOperatingChannel().GetFrequencies()
+                                    : std::vector<MHz_u>{};
+    m_widthsBeforeSwitch =
+        GetOperatingChannel().IsSet() ? GetOperatingChannel().GetWidths() : std::vector<MHz_u>{};
     WifiPhy::DoChannelSwitch();
-    const auto frequencyAfter = GetFrequency();
-    const auto widthAfter = GetChannelWidth();
-    if ((frequencyBefore == frequencyAfter) && (widthBefore == widthAfter))
+}
+
+void
+SpectrumWifiPhy::FinalizeChannelSwitch()
+{
+    NS_LOG_FUNCTION(this);
+    const auto frequenciesAfter = GetOperatingChannel().GetFrequencies();
+    const auto widthsAfter = GetOperatingChannel().GetWidths();
+    if ((m_frequenciesBeforeSwitch == frequenciesAfter) && (m_widthsBeforeSwitch == widthsAfter))
     {
         NS_LOG_DEBUG("Same RF channel as before, do nothing");
         if (IsInitialized())
@@ -306,18 +321,38 @@
         return;
     }
 
-    auto newSpectrumPhyInterface = GetInterfaceCoveringChannelBand(frequencyAfter, widthAfter);
+    Ptr<WifiSpectrumPhyInterface> newSpectrumPhyInterface;
+    const auto numSegments = GetOperatingChannel().GetNSegments();
+    NS_ASSERT(numSegments == frequenciesAfter.size() && numSegments == widthsAfter.size());
+    for (std::size_t i = 0; i < numSegments; ++i)
+    {
+        auto interfaceCoveringBand =
+            GetInterfaceCoveringChannelBand(frequenciesAfter.at(i), widthsAfter.at(i));
+        NS_ABORT_MSG_IF(!interfaceCoveringBand,
+                        "No spectrum channel covers frequency range ["
+                            << frequenciesAfter.at(i) - (widthsAfter.at(i) / 2) << " MHz - "
+                            << frequenciesAfter.at(i) + (widthsAfter.at(i) / 2) << " MHz]");
+        if (!newSpectrumPhyInterface)
+        {
+            newSpectrumPhyInterface = interfaceCoveringBand;
+        }
+        else
+        {
+            NS_ABORT_MSG_IF(interfaceCoveringBand != newSpectrumPhyInterface,
+                            "All segments are not covered by the same spectrum channel");
+        }
+    }
     const auto interfaceChanged = (newSpectrumPhyInterface != m_currentSpectrumPhyInterface);
 
-    NS_ABORT_MSG_IF(!newSpectrumPhyInterface,
-                    "No spectrum channel covers frequency range ["
-                        << frequencyAfter - (widthAfter / 2) << " MHz - "
-                        << frequencyAfter + (widthAfter / 2) << " MHz]");
-
     if (interfaceChanged)
     {
-        NS_LOG_DEBUG("Switch to existing RF interface with frequency/width pair of ("
-                     << frequencyAfter << ", " << widthAfter << ")");
+        std::stringstream ss;
+        for (std::size_t i = 0; i < frequenciesAfter.size(); ++i)
+        {
+            ss << "(" << frequenciesAfter.at(i) << ", " << widthsAfter.at(i) << ") ";
+        }
+        NS_LOG_DEBUG("Switch to existing RF interface with frequency/width "
+                     << (numSegments > 1 ? "pair" : "pairs") << " of " << ss.str());
         if (m_currentSpectrumPhyInterface && !m_trackSignalsInactiveInterfaces)
         {
             m_currentSpectrumPhyInterface->GetChannel()->RemoveRx(m_currentSpectrumPhyInterface);
@@ -327,9 +362,9 @@
     m_currentSpectrumPhyInterface = newSpectrumPhyInterface;
 
     auto reset = true;
-    if (m_currentSpectrumPhyInterface->GetCenterFrequency() == frequencyAfter)
+    if (m_currentSpectrumPhyInterface->GetCenterFrequencies() == frequenciesAfter)
     {
-        // Center frequency has not changed for that interface, hence we do not need to
+        // Center frequencies have not changed for that interface, hence we do not need to
         // reset the spectrum model nor update any band stored in the interference helper
         if (!m_trackSignalsInactiveInterfaces)
         {
@@ -343,15 +378,19 @@
 
     if (reset)
     {
-        ResetSpectrumModel(m_currentSpectrumPhyInterface, frequencyAfter, widthAfter);
+        ResetSpectrumModel(m_currentSpectrumPhyInterface,
+                           frequenciesAfter,
+                           GetOperatingChannel().GetTotalWidth());
     }
 
     if (IsInitialized())
     {
-        SwitchMaybeToCcaBusy(nullptr);
+        NotifyChannelSwitched();
+    }
+    else
+    {
+        Simulator::ScheduleNow(&SpectrumWifiPhy::NotifyChannelSwitched, this);
     }
-
-    Simulator::ScheduleNow(&SpectrumWifiPhy::NotifyChannelSwitched, this);
 }
 
 void
@@ -364,9 +403,14 @@
 }
 
 void
-SpectrumWifiPhy::ConfigureInterface(uint16_t frequency, uint16_t width)
+SpectrumWifiPhy::ConfigureInterface(const std::vector<MHz_u>& frequencies, MHz_u width)
 {
-    NS_LOG_FUNCTION(this << frequency << width);
+    std::stringstream ss;
+    for (const auto& centerFrequency : frequencies)
+    {
+        ss << centerFrequency << " ";
+    }
+    NS_LOG_FUNCTION(this << ss.str() << width);
 
     if (!m_trackSignalsInactiveInterfaces)
     {
@@ -374,24 +418,39 @@
         return;
     }
 
-    auto spectrumPhyInterface = GetInterfaceCoveringChannelBand(frequency, width);
-
-    NS_ABORT_MSG_IF(!spectrumPhyInterface,
-                    "No spectrum channel covers frequency range ["
-                        << frequency - (width / 2) << " MHz - " << frequency + (width / 2)
-                        << " MHz]");
+    Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface;
+    const auto numSegments = frequencies.size();
+    const auto segmentWidth = width / numSegments;
+    for (std::size_t i = 0; i < numSegments; ++i)
+    {
+        auto interfaceCoveringBand =
+            GetInterfaceCoveringChannelBand(frequencies.at(i), segmentWidth);
+        NS_ABORT_MSG_IF(!interfaceCoveringBand,
+                        "No spectrum channel covers frequency range ["
+                            << frequencies.at(i) - (segmentWidth / 2) << " MHz - "
+                            << frequencies.at(i) + (segmentWidth / 2) << " MHz]");
+        if (!spectrumPhyInterface)
+        {
+            spectrumPhyInterface = interfaceCoveringBand;
+        }
+        else
+        {
+            NS_ABORT_MSG_IF(interfaceCoveringBand != spectrumPhyInterface,
+                            "All segments are not covered by the same spectrum channel");
+        }
+    }
 
     NS_ABORT_MSG_IF(spectrumPhyInterface == m_currentSpectrumPhyInterface,
                     "This method should not be called for the current interface");
 
-    if ((frequency == spectrumPhyInterface->GetCenterFrequency()) &&
+    if ((frequencies == spectrumPhyInterface->GetCenterFrequencies()) &&
         (width == spectrumPhyInterface->GetChannelWidth()))
     {
         NS_LOG_DEBUG("Same RF channel as before on that interface, do nothing");
         return;
     }
 
-    ResetSpectrumModel(spectrumPhyInterface, frequency, width);
+    ResetSpectrumModel(spectrumPhyInterface, frequencies, width);
 }
 
 bool
@@ -430,30 +489,38 @@
     const auto channelWidth = interface ? interface->GetChannelWidth() : GetChannelWidth();
     const auto& bands =
         interface ? interface->GetBands() : m_currentSpectrumPhyInterface->GetBands();
-    double totalRxPowerW = 0;
-    RxPowerWattPerChannelBand rxPowerW;
+    Watt_u totalRxPower = 0.0;
+    RxPowerWattPerChannelBand rxPowers;
 
     const auto rxGainRatio = DbToRatio(GetRxGain());
 
     std::size_t index = 0;
-    uint16_t prevBw = 0;
+    MHz_u prevBw = 0;
     for (const auto& band : bands)
     {
-        uint16_t bw = (band.frequencies.second - band.frequencies.first) / 1e6;
+        const auto bw =
+            std::accumulate(band.frequencies.cbegin(),
+                            band.frequencies.cend(),
+                            0,
+                            [](MHz_u sum, const auto& startStopFreqs) {
+                                return sum + ((startStopFreqs.second - startStopFreqs.first) / 1e6);
+                            });
         NS_ASSERT(bw <= channelWidth);
         index = ((bw != prevBw) ? 0 : (index + 1));
-        double rxPowerPerBandW =
+        auto rxPowerPerBand =
             WifiSpectrumValueHelper::GetBandPowerW(receivedSignalPsd, band.indices);
         NS_LOG_DEBUG("Signal power received (watts) before antenna gain for "
                      << bw << " MHz channel band " << index << ": " << band);
-        rxPowerPerBandW *= rxGainRatio;
-        rxPowerW.insert({band, rxPowerPerBandW});
+        rxPowerPerBand *= rxGainRatio;
+        rxPowers.insert({band, rxPowerPerBand});
         NS_LOG_DEBUG("Signal power received after antenna gain for "
-                     << bw << " MHz channel band " << index << ": " << rxPowerPerBandW << " W ("
-                     << WToDbm(rxPowerPerBandW) << " dBm)");
+                     << bw << " MHz channel band " << index << ": " << rxPowerPerBand << " W"
+                     << (rxPowerPerBand > 0.0
+                             ? " (" + std::to_string(WToDbm(rxPowerPerBand)) + " dBm)"
+                             : ""));
         if (bw <= 20)
         {
-            totalRxPowerW += rxPowerPerBandW;
+            totalRxPower += rxPowerPerBand;
         }
         prevBw = bw;
     }
@@ -465,27 +532,42 @@
         NS_ASSERT(!heRuBands.empty());
         for (const auto& [band, ru] : heRuBands)
         {
-            double rxPowerPerBandW =
+            auto rxPowerPerBand =
                 WifiSpectrumValueHelper::GetBandPowerW(receivedSignalPsd, band.indices);
-            rxPowerPerBandW *= rxGainRatio;
-            rxPowerW.insert({band, rxPowerPerBandW});
+            rxPowerPerBand *= rxGainRatio;
+            rxPowers.insert({band, rxPowerPerBand});
         }
     }
 
-    NS_LOG_DEBUG("Total signal power received after antenna gain: "
-                 << totalRxPowerW << " W (" << WToDbm(totalRxPowerW) << " dBm)");
+    NS_ASSERT_MSG(totalRxPower >= 0.0, "Negative RX power");
+    NS_LOG_DEBUG(
+        "Total signal power received after antenna gain: "
+        << totalRxPower << " W"
+        << (totalRxPower > 0.0 ? " (" + std::to_string(WToDbm(totalRxPower)) + " dBm)" : ""));
 
     Ptr<WifiSpectrumSignalParameters> wifiRxParams =
         DynamicCast<WifiSpectrumSignalParameters>(rxParams);
 
     // Log the signal arrival to the trace source
-    m_signalCb(rxParams, senderNodeId, WToDbm(totalRxPowerW), rxDuration);
+    if (totalRxPower > 0.0)
+    {
+        m_signalCb(rxParams, senderNodeId, WToDbm(totalRxPower), rxDuration);
+    }
+
+    if (m_trackSignalsInactiveInterfaces && interface &&
+        (interface != m_currentSpectrumPhyInterface))
+    {
+        NS_LOG_INFO("Received Wi-Fi signal from a non-active PHY interface "
+                    << interface->GetFrequencyRange());
+        m_interference->AddForeignSignal(rxDuration, rxPowers, interface->GetFrequencyRange());
+        return;
+    }
 
     if (!wifiRxParams)
     {
         NS_LOG_INFO("Received non Wi-Fi signal");
         m_interference->AddForeignSignal(rxDuration,
-                                         rxPowerW,
+                                         rxPowers,
                                          interface ? interface->GetFrequencyRange()
                                                    : GetCurrentFrequencyRange());
         SwitchMaybeToCcaBusy(nullptr);
@@ -496,17 +578,7 @@
     {
         NS_LOG_INFO("Received Wi-Fi signal but blocked from syncing");
         NS_ASSERT(interface);
-        m_interference->AddForeignSignal(rxDuration, rxPowerW, interface->GetFrequencyRange());
-        SwitchMaybeToCcaBusy(nullptr);
-        return;
-    }
-
-    if (m_trackSignalsInactiveInterfaces && interface &&
-        (interface != m_currentSpectrumPhyInterface))
-    {
-        NS_LOG_INFO("Received Wi-Fi signal from a non-active PHY interface "
-                    << interface->GetFrequencyRange());
-        m_interference->AddForeignSignal(rxDuration, rxPowerW, interface->GetFrequencyRange());
+        m_interference->AddForeignSignal(rxDuration, rxPowers, interface->GetFrequencyRange());
         SwitchMaybeToCcaBusy(nullptr);
         return;
     }
@@ -515,10 +587,13 @@
     // Current implementation assumes constant RX power over the PPDU duration
     // Compare received TX power per MHz to normalized RX sensitivity
     const auto ppdu = GetRxPpduFromTxPpdu(wifiRxParams->ppdu);
-    if (totalRxPowerW < DbmToW(GetRxSensitivity()) * (ppdu->GetTxChannelWidth() / 20.0))
+    if (totalRxPower < DbmToW(GetRxSensitivity()) * (ppdu->GetTxChannelWidth() / 20.0))
     {
-        NS_LOG_INFO("Received signal too weak to process: " << WToDbm(totalRxPowerW) << " dBm");
-        m_interference->Add(ppdu, rxDuration, rxPowerW, GetCurrentFrequencyRange());
+        NS_LOG_INFO(
+            "Received signal too weak to process: "
+            << totalRxPower << " W"
+            << (totalRxPower > 0.0 ? " (" + std::to_string(WToDbm(totalRxPower)) + " dBm)" : ""));
+        m_interference->Add(ppdu, rxDuration, rxPowers, GetCurrentFrequencyRange());
         SwitchMaybeToCcaBusy(nullptr);
         return;
     }
@@ -528,14 +603,14 @@
         if (!CanStartRx(ppdu))
         {
             NS_LOG_INFO("Cannot start reception of the PPDU, consider it as interference");
-            m_interference->Add(ppdu, rxDuration, rxPowerW, GetCurrentFrequencyRange());
+            m_interference->Add(ppdu, rxDuration, rxPowers, GetCurrentFrequencyRange());
             SwitchMaybeToCcaBusy(ppdu);
             return;
         }
     }
 
     NS_LOG_INFO("Received Wi-Fi signal");
-    StartReceivePreamble(ppdu, rxPowerW, rxDuration);
+    StartReceivePreamble(ppdu, rxPowers, rxDuration);
 }
 
 Ptr<const WifiPpdu>
@@ -584,10 +659,10 @@
     m_currentSpectrumPhyInterface->StartTx(txParams);
 }
 
-uint16_t
-SpectrumWifiPhy::GetGuardBandwidth(uint16_t currentChannelWidth) const
+MHz_u
+SpectrumWifiPhy::GetGuardBandwidth(MHz_u currentChannelWidth) const
 {
-    uint16_t guardBandwidth = 0;
+    MHz_u guardBandwidth = 0;
     if (currentChannelWidth == 22)
     {
         // handle case of DSSS transmission
@@ -606,15 +681,49 @@
     return guardBandwidth;
 }
 
+uint32_t
+SpectrumWifiPhy::GetNumBandsBetweenSegments(const std::vector<MHz_u>& centerFrequencies,
+                                            MHz_u totalWidth,
+                                            uint32_t subcarrierSpacing)
+{
+    const auto numSegments = centerFrequencies.size();
+    NS_ABORT_MSG_IF(numSegments > 2, "Only 2 non-contiguous frequency segments are supported");
+    if (numSegments < 2)
+    {
+        return 0;
+    }
+    const auto lowFrequency = *centerFrequencies.cbegin();
+    const auto highFrequency = *centerFrequencies.crbegin();
+    NS_ASSERT(lowFrequency != highFrequency);
+    // all segments have the same width
+    const auto segmentsWidth = totalWidth / numSegments;
+    const auto widthBetweenSegments = highFrequency - lowFrequency - segmentsWidth;
+    return (widthBetweenSegments * 1e6) / subcarrierSpacing;
+}
+
 WifiSpectrumBandInfo
 SpectrumWifiPhy::GetBandForInterface(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface,
-                                     uint16_t bandWidth,
+                                     MHz_u bandWidth,
                                      uint8_t bandIndex /* = 0 */)
 {
-    const auto subcarrierSpacing = GetSubcarrierSpacing();
     const auto channelWidth = spectrumPhyInterface->GetChannelWidth();
+    NS_ASSERT_MSG(bandWidth <= channelWidth,
+                  "Bandwidth (" << bandWidth << ") cannot exceed total operating channel width ("
+                                << channelWidth << ")");
+    const auto subcarrierSpacing = GetSubcarrierSpacing();
+    WifiSpectrumBandInfo bandInfo;
+    std::size_t numSegments = 1;
+    if (const auto segmentWidth =
+            (channelWidth / spectrumPhyInterface->GetCenterFrequencies().size());
+        bandWidth > segmentWidth)
+    {
+        NS_ASSERT(bandIndex == 0);
+        numSegments = spectrumPhyInterface->GetCenterFrequencies().size();
+        bandWidth /= spectrumPhyInterface->GetCenterFrequencies().size();
+    }
     const auto numBandsInBand = static_cast<size_t>(bandWidth * 1e6 / subcarrierSpacing);
     auto numBandsInChannel = static_cast<size_t>(channelWidth * 1e6 / subcarrierSpacing);
+    const auto numBands = channelWidth / bandWidth;
     if (numBandsInBand % 2 == 0)
     {
         numBandsInChannel += 1; // symmetry around center frequency
@@ -623,26 +732,41 @@
     size_t totalNumBands = rxSpectrumModel->GetNumBands();
     NS_ASSERT_MSG((numBandsInChannel % 2 == 1) && (totalNumBands % 2 == 1),
                   "Should have odd number of bands");
-    NS_ASSERT_MSG((bandIndex * bandWidth) < channelWidth, "Band index is out of bound");
-    NS_ASSERT(totalNumBands >= numBandsInChannel);
-    auto startIndex = ((totalNumBands - numBandsInChannel) / 2) + (bandIndex * numBandsInBand);
-    auto stopIndex = startIndex + numBandsInBand - 1;
-    auto frequencies =
-        ConvertIndicesToFrequenciesForInterface(spectrumPhyInterface, {startIndex, stopIndex});
-    auto freqRange = spectrumPhyInterface->GetFrequencyRange();
-    NS_ASSERT(frequencies.first >= (freqRange.minFrequency * 1e6));
-    NS_ASSERT(frequencies.second <= (freqRange.maxFrequency * 1e6));
-    NS_ASSERT((frequencies.second - frequencies.first) == (bandWidth * 1e6));
-    if (startIndex >= totalNumBands / 2)
+    for (std::size_t segmentIndex = 0; segmentIndex < numSegments; ++segmentIndex)
     {
-        // step past DC
-        startIndex += 1;
+        NS_ASSERT_MSG(bandIndex < numBands, "Band index is out of bound");
+        NS_ASSERT(totalNumBands >= numBandsInChannel);
+        const auto numBandsBetweenSegments =
+            GetNumBandsBetweenSegments(spectrumPhyInterface->GetCenterFrequencies(),
+                                       channelWidth,
+                                       GetSubcarrierSpacing());
+        auto startIndex = ((totalNumBands - numBandsInChannel - numBandsBetweenSegments) / 2) +
+                          (bandIndex * numBandsInBand);
+        if (bandIndex >= (numBands / 2))
+        {
+            startIndex += numBandsBetweenSegments;
+        }
+        auto stopIndex = startIndex + numBandsInBand - 1;
+        auto frequencies =
+            ConvertIndicesToFrequenciesForInterface(spectrumPhyInterface, {startIndex, stopIndex});
+        auto freqRange = spectrumPhyInterface->GetFrequencyRange();
+        NS_ASSERT(frequencies.first >= (freqRange.minFrequency * 1e6));
+        NS_ASSERT(frequencies.second <= (freqRange.maxFrequency * 1e6));
+        NS_ASSERT((frequencies.second - frequencies.first) == (bandWidth * 1e6));
+        if (startIndex >= totalNumBands / 2)
+        {
+            // step past DC
+            startIndex += 1;
+        }
+        bandInfo.indices.emplace_back(startIndex, stopIndex);
+        bandInfo.frequencies.emplace_back(frequencies);
+        ++bandIndex;
     }
-    return {{startIndex, stopIndex}, frequencies};
+    return bandInfo;
 }
 
 WifiSpectrumBandInfo
-SpectrumWifiPhy::GetBand(uint16_t bandWidth, uint8_t bandIndex /* = 0 */)
+SpectrumWifiPhy::GetBand(MHz_u bandWidth, uint8_t bandIndex /* = 0 */)
 {
     NS_ABORT_IF(!m_currentSpectrumPhyInterface);
     return GetBandForInterface(m_currentSpectrumPhyInterface, bandWidth, bandIndex);
@@ -665,12 +789,10 @@
     auto startGuardBand = rxSpectrumModel->Begin();
     auto startChannel = std::next(startGuardBand, indices.first);
     auto endChannel = std::next(startGuardBand, indices.second + 1);
-    auto lowFreq = static_cast<uint64_t>(startChannel->fc);
-    auto highFreq = static_cast<uint64_t>(endChannel->fc);
-    return {lowFreq, highFreq};
+    return {startChannel->fc, endChannel->fc};
 }
 
-std::tuple<double, double, double>
+std::tuple<dBr_u, dBr_u, dBr_u>
 SpectrumWifiPhy::GetTxMaskRejectionParams() const
 {
     return std::make_tuple(m_txMaskInnerBandMinimumRejection,
@@ -692,7 +814,7 @@
 }
 
 Ptr<WifiSpectrumPhyInterface>
-SpectrumWifiPhy::GetInterfaceCoveringChannelBand(uint16_t frequency, uint16_t width) const
+SpectrumWifiPhy::GetInterfaceCoveringChannelBand(MHz_u frequency, MHz_u width) const
 {
     const auto lowFreq = frequency - (width / 2);
     const auto highFreq = frequency + (width / 2);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/spectrum-wifi-phy.h ns-3.43/src/wifi/model/spectrum-wifi-phy.h
--- ns-3.42/src/wifi/model/spectrum-wifi-phy.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/spectrum-wifi-phy.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Ghada Badawy <gbadawy@gmail.com>
@@ -31,6 +20,7 @@
 
 #include <map>
 #include <optional>
+#include <vector>
 
 class SpectrumWifiPhyFilterTest;
 
@@ -76,9 +66,9 @@
     void SetDevice(const Ptr<WifiNetDevice> device) override;
     void StartTx(Ptr<const WifiPpdu> ppdu) override;
     Ptr<Channel> GetChannel() const override;
-    uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const override;
-    std::tuple<double, double, double> GetTxMaskRejectionParams() const override;
-    WifiSpectrumBandInfo GetBand(uint16_t bandWidth, uint8_t bandIndex = 0) override;
+    MHz_u GetGuardBandwidth(MHz_u currentChannelWidth) const override;
+    std::tuple<dBr_u, dBr_u, dBr_u> GetTxMaskRejectionParams() const override;
+    WifiSpectrumBandInfo GetBand(MHz_u bandWidth, uint8_t bandIndex = 0) override;
     FrequencyRange GetCurrentFrequencyRange() const override;
     WifiSpectrumBandFrequencies ConvertIndicesToFrequencies(
         const WifiSpectrumBandIndices& indices) const override;
@@ -134,16 +124,16 @@
                                           Time duration);
 
     /**
-     * Configure a non-active spectrum PHY interface to operate on a given frequency with a given
-     * width. The function searches for the non-active PHY interface that operates on the frequency
-     * range corresponding to the spectrum portion specified by the caller. It takes care to
-     * configure the RX spectrum model of the PHY interface and to update the bands tracked in
-     * interference helper.
+     * Configure a non-active spectrum PHY interface to operate on a given frequency (or several
+     * frequencies for non-contiguous) with a given total width. The function searches for the
+     * non-active PHY interface that operates on the frequency range corresponding to the spectrum
+     * portion specified by the caller. It takes care to configure the RX spectrum model of the PHY
+     * interface and to update the bands tracked in interference helper.
      *
-     * \param frequency the center frequency in MHz the PHY interface should use
-     * \param width the channel width in MHz the PHY interface should use
+     * \param frequencies the center frequency of each segment the PHY interface should use
+     * \param width the total channel width the PHY interface should use
      */
-    void ConfigureInterface(uint16_t frequency, uint16_t width);
+    void ConfigureInterface(const std::vector<MHz_u>& frequencies, MHz_u width);
 
     /**
      * This function is sending the signal to the Spectrum channel
@@ -176,6 +166,20 @@
     const std::map<FrequencyRange, Ptr<WifiSpectrumPhyInterface>>& GetSpectrumPhyInterfaces() const;
 
     /**
+     * Determine the number of bands between the two segments if the operating channel is made of
+     * non-contiguous segments, otherwise the function returns zero.
+     *
+     * \param centerFrequencies the center frequency of each segment
+     * \param totalWidth the width of the operating channel
+     * \param subcarrierSpacing the subcarrier spacing
+     * \return the number of bands between the two segments if the operating channel is made of
+     * non-contiguous segments, zero otherwise
+     */
+    static uint32_t GetNumBandsBetweenSegments(const std::vector<MHz_u>& centerFrequencies,
+                                               MHz_u totalWidth,
+                                               uint32_t subcarrierSpacing);
+
+    /**
      * \param callback the callback to invoke when operating channel has switched.
      */
     void SetChannelSwitchedCallback(Callback<void> callback);
@@ -196,15 +200,18 @@
                                        //!< reasons)
 
   private:
+    void FinalizeChannelSwitch() override;
+
     /**
      * Perform run-time spectrum model change
      * \param spectrumPhyInterface the spectrum PHY interface for which the spectrum model should be
-     * changed \param centerFrequency the center frequency in MHz the PHY interface should use
-     * \param channelWidth the channel width in MHz the PHY interface should use
+     * changed
+     * \param centerFrequencies the center frequency of each segment the PHY interface should use
+     * \param channelWidth the total channel width the PHY interface should use
      */
     void ResetSpectrumModel(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface,
-                            uint16_t centerFrequency,
-                            uint16_t channelWidth);
+                            const std::vector<MHz_u>& centerFrequencies,
+                            MHz_u channelWidth);
 
     /**
      * This function is called to update the bands handled by the InterferenceHelper.
@@ -216,11 +223,11 @@
      * This function computes the RU bands that belong to a given spectrum PHY interface.
      *
      * \param spectrumPhyInterface the spectrum PHY interface to consider to compute the RU bands
-     * \param guardBandwidth width of the guard band in MHz
+     * \param guardBandwidth width of the guard band
      * \returns the computed RU bands for the spectrum PHY interface
      */
     HeRuBands GetHeRuBands(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface,
-                           uint16_t guardBandwidth);
+                           MHz_u guardBandwidth);
 
     /**
      * This function computes the bands that belong to a given spectrum PHY interface.
@@ -234,13 +241,13 @@
      * Get the info of a given band that belongs to a given spectrum PHY interface
      *
      * \param spectrumPhyInterface the spectrum PHY interface
-     * \param bandWidth the width of the band to be returned (MHz)
+     * \param bandWidth the width of the band to be returned
      * \param bandIndex the index of the band to be returned
      *
      * \return the info that defines the band
      */
     WifiSpectrumBandInfo GetBandForInterface(Ptr<WifiSpectrumPhyInterface> spectrumPhyInterface,
-                                             uint16_t bandWidth,
+                                             MHz_u bandWidth,
                                              uint8_t bandIndex = 0);
 
     /**
@@ -267,12 +274,12 @@
     /**
      * Get the spectrum PHY interface that covers a band portion of the RF channel
      *
-     * \param frequency the center frequency in MHz of the RF channel band
-     * \param width the width in MHz of the RF channel band
+     * \param frequency the center frequency of the RF channel band
+     * \param width the width of the RF channel band
      * \return the spectrum PHY interface that covers the indicated band of the RF channel
      */
-    Ptr<WifiSpectrumPhyInterface> GetInterfaceCoveringChannelBand(uint16_t frequency,
-                                                                  uint16_t width) const;
+    Ptr<WifiSpectrumPhyInterface> GetInterfaceCoveringChannelBand(MHz_u frequency,
+                                                                  MHz_u width) const;
 
     /**
      * Notify the spectrum channel has switched
@@ -284,16 +291,18 @@
     bool m_disableWifiReception;           //!< forces this PHY to fail to sync on any signal
     bool m_trackSignalsInactiveInterfaces; //!< flag whether signals coming from inactive spectrum
                                            //!< PHY interfaces are tracked
+    std::vector<MHz_u> m_frequenciesBeforeSwitch; //!< center frequency before channel switch
+    std::vector<MHz_u> m_widthsBeforeSwitch;      //!< channel width before channel switch
 
     TracedCallback<Ptr<const SpectrumSignalParameters>, uint32_t, double, Time>
         m_signalCb; //!< Signal callback
 
-    double m_txMaskInnerBandMinimumRejection; //!< The minimum rejection (in dBr) for the inner band
-                                              //!< of the transmit spectrum mask
-    double m_txMaskOuterBandMinimumRejection; //!< The minimum rejection (in dBr) for the outer band
-                                              //!< of the transmit spectrum mask
-    double m_txMaskOuterBandMaximumRejection; //!< The maximum rejection (in dBr) for the outer band
-                                              //!< of the transmit spectrum mask
+    dBr_u m_txMaskInnerBandMinimumRejection; //!< The minimum rejection for the inner band of the
+                                             //!< transmit spectrum mask
+    dBr_u m_txMaskOuterBandMinimumRejection; //!< The minimum rejection for the outer band of the
+                                             //!< transmit spectrum mask
+    dBr_u m_txMaskOuterBandMaximumRejection; //!< The maximum rejection for the outer band of the
+                                             //!< transmit spectrum mask
 
     Callback<void> m_channelSwitchedCallback; //!< Callback when channel switched
 };
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ssid.cc ns-3.43/src/wifi/model/ssid.cc
--- ns-3.42/src/wifi/model/ssid.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/ssid.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/ssid.h ns-3.43/src/wifi/model/ssid.h
--- ns-3.42/src/wifi/model/ssid.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/ssid.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/status-code.cc ns-3.43/src/wifi/model/status-code.cc
--- ns-3.42/src/wifi/model/status-code.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/status-code.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/status-code.h ns-3.43/src/wifi/model/status-code.h
--- ns-3.42/src/wifi/model/status-code.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/status-code.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/sta-wifi-mac.cc ns-3.43/src/wifi/model/sta-wifi-mac.cc
--- ns-3.42/src/wifi/model/sta-wifi-mac.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/sta-wifi-mac.cc	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -201,6 +190,11 @@
         m_emlsrManager->Dispose();
     }
     m_emlsrManager = nullptr;
+    for (auto& [phyId, event] : m_emlsrLinkSwitch)
+    {
+        event.Cancel();
+    }
+    m_emlsrLinkSwitch.clear();
     WifiMac::DoDispose();
 }
 
@@ -311,8 +305,8 @@
 StaWifiMac::GetCurrentChannel(uint8_t linkId) const
 {
     auto phy = GetWifiPhy(linkId);
-    uint16_t width = phy->GetOperatingChannel().IsOfdm() ? 20 : phy->GetChannelWidth();
-    uint8_t ch = phy->GetOperatingChannel().GetPrimaryChannelNumber(width, phy->GetStandard());
+    const auto width = phy->GetOperatingChannel().IsOfdm() ? 20 : phy->GetChannelWidth();
+    uint8_t ch = phy->GetPrimaryChannelNumber(width);
     return {ch, phy->GetPhyBand()};
 }
 
@@ -396,7 +390,7 @@
 
     if (!GetQosSupported())
     {
-        GetTxop()->Queue(packet, hdr);
+        GetTxop()->Queue(Create<WifiMpdu>(packet, hdr));
     }
     // "A QoS STA that transmits a Management frame determines access category used
     // for medium access in transmission of the Management frame as follows
@@ -407,7 +401,7 @@
     //   shall be selected." (Sec. 10.2.3.2 of 802.11-2020)
     else
     {
-        GetVOQueue()->Queue(packet, hdr);
+        GetVOQueue()->Queue(Create<WifiMpdu>(packet, hdr));
     }
 }
 
@@ -684,7 +678,7 @@
 
     if (!GetQosSupported())
     {
-        GetTxop()->Queue(packet, hdr);
+        GetTxop()->Queue(Create<WifiMpdu>(packet, hdr));
     }
     // "A QoS STA that transmits a Management frame determines access category used
     // for medium access in transmission of the Management frame as follows
@@ -695,11 +689,11 @@
     //   shall be selected." (Sec. 10.2.3.2 of 802.11-2020)
     else if (!GetWifiRemoteStationManager(linkId)->GetQosSupported(*link.bssid))
     {
-        GetBEQueue()->Queue(packet, hdr);
+        GetBEQueue()->Queue(Create<WifiMpdu>(packet, hdr));
     }
     else
     {
-        GetVOQueue()->Queue(packet, hdr);
+        GetVOQueue()->Queue(Create<WifiMpdu>(packet, hdr));
     }
 
     if (m_assocRequestEvent.IsPending())
@@ -960,10 +954,17 @@
 Mac48Address
 StaWifiMac::DoGetLocalAddress(const Mac48Address& remoteAddr) const
 {
-    auto linkIds = GetSetupLinkIds();
-    NS_ASSERT_MSG(!linkIds.empty(), "Not associated");
-    uint8_t linkId = *linkIds.begin();
-    return GetFrameExchangeManager(linkId)->GetAddress();
+    for (const auto& [id, link] : GetLinks())
+    {
+        if (GetStaLink(link).bssid == remoteAddr)
+        {
+            // the remote address is the address of the (single link) AP we are associated with;
+            return link->feManager->GetAddress();
+        }
+    }
+
+    // the remote address is unknown
+    return GetAddress();
 }
 
 bool
@@ -973,88 +974,35 @@
 }
 
 void
-StaWifiMac::Enqueue(Ptr<Packet> packet, Mac48Address to)
+StaWifiMac::NotifyDropPacketToEnqueue(Ptr<Packet> packet, Mac48Address to)
 {
     NS_LOG_FUNCTION(this << packet << to);
-    if (!CanForwardPacketsTo(to))
-    {
-        NotifyTxDrop(packet);
-        TryToEnsureAssociated();
-        return;
-    }
-    WifiMacHeader hdr;
+    TryToEnsureAssociated();
+}
 
-    // If we are not a QoS AP then we definitely want to use AC_BE to
-    // transmit the packet. A TID of zero will map to AC_BE (through \c
-    // QosUtilsMapTidToAc()), so we use that as our default here.
-    uint8_t tid = 0;
-
-    // For now, an AP that supports QoS does not support non-QoS
-    // associations, and vice versa. In future the AP model should
-    // support simultaneously associated QoS and non-QoS STAs, at which
-    // point there will need to be per-association QoS state maintained
-    // by the association state machine, and consulted here.
-    if (GetQosSupported())
-    {
-        hdr.SetType(WIFI_MAC_QOSDATA);
-        hdr.SetQosAckPolicy(WifiMacHeader::NORMAL_ACK);
-        hdr.SetQosNoEosp();
-        hdr.SetQosNoAmsdu();
-        // Transmission of multiple frames in the same TXOP is not
-        // supported for now
-        hdr.SetQosTxopLimit(0);
-
-        // Fill in the QoS control field in the MAC header
-        tid = QosUtilsGetTidForPacket(packet);
-        // Any value greater than 7 is invalid and likely indicates that
-        // the packet had no QoS tag, so we revert to zero, which'll
-        // mean that AC_BE is used.
-        if (tid > 7)
-        {
-            tid = 0;
-        }
-        hdr.SetQosTid(tid);
-    }
-    else
-    {
-        hdr.SetType(WIFI_MAC_DATA);
-    }
-    if (GetQosSupported())
-    {
-        hdr.SetNoOrder(); // explicitly set to 0 for the time being since HT control field is not
-                          // yet implemented (set it to 1 when implemented)
-    }
+void
+StaWifiMac::Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from)
+{
+    NS_LOG_FUNCTION(this << *mpdu << to << from);
+
+    auto& hdr = mpdu->GetHeader();
 
     // the Receiver Address (RA) and the Transmitter Address (TA) are the MLD addresses only for
     // non-broadcast data frames exchanged between two MLDs
     auto linkIds = GetSetupLinkIds();
     NS_ASSERT(!linkIds.empty());
     uint8_t linkId = *linkIds.begin();
-    if (const auto apMldAddr = GetWifiRemoteStationManager(linkId)->GetMldAddress(GetBssid(linkId)))
-    {
-        hdr.SetAddr1(*apMldAddr);
-        hdr.SetAddr2(GetAddress());
-    }
-    else
-    {
-        hdr.SetAddr1(GetBssid(linkId));
-        hdr.SetAddr2(GetFrameExchangeManager(linkId)->GetAddress());
-    }
+    const auto apMldAddr = GetWifiRemoteStationManager(linkId)->GetMldAddress(GetBssid(linkId));
 
+    hdr.SetAddr1(apMldAddr.value_or(GetBssid(linkId)));
+    hdr.SetAddr2(apMldAddr ? GetAddress() : GetFrameExchangeManager(linkId)->GetAddress());
     hdr.SetAddr3(to);
     hdr.SetDsNotFrom();
     hdr.SetDsTo();
 
-    if (GetQosSupported())
-    {
-        // Sanity check that the TID is valid
-        NS_ASSERT(tid < 8);
-        GetQosTxop(tid)->Queue(packet, hdr);
-    }
-    else
-    {
-        GetTxop()->Queue(packet, hdr);
-    }
+    auto txop = hdr.IsQosData() ? StaticCast<Txop>(GetQosTxop(hdr.GetQosTid())) : GetTxop();
+    NS_ASSERT(txop);
+    txop->Queue(mpdu);
 }
 
 void
@@ -1210,9 +1158,7 @@
         }
 
     default:
-        // Invoke the receive handler of our parent class to deal with any
-        // other frames. Specifically, this will handle Block Ack-related
-        // Management Action frames.
+        // Invoke the receive handler of our parent class to deal with any other frames
         WifiMac::Receive(mpdu, linkId);
     }
 
@@ -1510,8 +1456,8 @@
     // STAs operating on setup links may need to transition to a new PM mode after the
     // acknowledgement of the Association Response. For this purpose, we connect a callback to
     // the PHY TX begin trace to catch the Ack transmitted after the Association Response.
-    CallbackBase cb = Callback<void, WifiConstPsduMap, WifiTxVector, double>(
-        [=, this](WifiConstPsduMap psduMap, WifiTxVector txVector, double /* txPowerW */) {
+    CallbackBase cb = Callback<void, WifiConstPsduMap, WifiTxVector, Watt_u>(
+        [=, this](WifiConstPsduMap psduMap, WifiTxVector txVector, Watt_u /* txPower */) {
             NS_ASSERT_MSG(psduMap.size() == 1 && psduMap.begin()->second->GetNMpdus() == 1 &&
                               psduMap.begin()->second->GetHeader(0).IsAck(),
                           "Expected a Normal Ack after Association Response frame");
@@ -2101,6 +2047,13 @@
         newLink.stationManager->SetupPhy(phy);
     };
 
+    // cancel any pending event for the given PHY to switch link
+    if (auto eventIt = m_emlsrLinkSwitch.find(phy->GetPhyId()); eventIt != m_emlsrLinkSwitch.end())
+    {
+        eventIt->second.Cancel();
+        m_emlsrLinkSwitch.erase(eventIt);
+    }
+
     // if there is no PHY operating on the new link, connect the PHY to the new link now.
     // Otherwise, wait until the channel switch is completed, so that the PHY operating on the new
     // link can possibly continue receiving frames in the meantime.
@@ -2110,7 +2063,7 @@
     }
     else
     {
-        Simulator::Schedule(delay, connectPhy);
+        m_emlsrLinkSwitch.emplace(phy->GetPhyId(), Simulator::Schedule(delay, connectPhy));
     }
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/sta-wifi-mac.h ns-3.43/src/wifi/model/sta-wifi-mac.h
--- ns-3.42/src/wifi/model/sta-wifi-mac.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/sta-wifi-mac.h	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -187,15 +176,6 @@
     StaWifiMac();
     ~StaWifiMac() override;
 
-    /**
-     * \param packet the packet to send.
-     * \param to the address to which the packet should be sent.
-     *
-     * The packet should be enqueued in a TX queue, and should be
-     * dequeued as soon as the channel access function determines that
-     * access is granted to this MAC.
-     */
-    void Enqueue(Ptr<Packet> packet, Mac48Address to) override;
     bool CanForwardPacketsTo(Mac48Address to) const override;
     int64_t AssignStreams(int64_t stream) override;
 
@@ -410,6 +390,8 @@
     void Receive(Ptr<const WifiMpdu> mpdu, uint8_t linkId) override;
     std::unique_ptr<LinkEntity> CreateLinkEntity() const override;
     Mac48Address DoGetLocalAddress(const Mac48Address& remoteAddr) const override;
+    void Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from) override;
+    void NotifyDropPacketToEnqueue(Ptr<Packet> packet, Mac48Address to) override;
 
     /**
      * Process the Beacon frame received on the given link.
@@ -603,21 +585,23 @@
     void DoInitialize() override;
     void DoDispose() override;
 
-    MacState m_state;                       ///< MAC state
-    uint16_t m_aid;                         ///< Association AID
-    Ptr<WifiAssocManager> m_assocManager;   ///< Association Manager
-    Ptr<EmlsrManager> m_emlsrManager;       ///< EMLSR Manager
-    Time m_waitBeaconTimeout;               ///< wait beacon timeout
-    Time m_probeRequestTimeout;             ///< probe request timeout
-    Time m_assocRequestTimeout;             ///< association request timeout
-    EventId m_assocRequestEvent;            ///< association request event
-    uint32_t m_maxMissedBeacons;            ///< maximum missed beacons
-    EventId m_beaconWatchdog;               //!< beacon watchdog
-    Time m_beaconWatchdogEnd{0};            //!< beacon watchdog end
-    bool m_activeProbing;                   ///< active probing
-    Ptr<RandomVariableStream> m_probeDelay; ///< RandomVariable used to randomize the time
-                                            ///< of the first Probe Response on each channel
-    Time m_pmModeSwitchTimeout;             ///< PM mode switch timeout
+    MacState m_state;                             ///< MAC state
+    uint16_t m_aid;                               ///< Association AID
+    Ptr<WifiAssocManager> m_assocManager;         ///< Association Manager
+    Ptr<EmlsrManager> m_emlsrManager;             ///< EMLSR Manager
+    Time m_waitBeaconTimeout;                     ///< wait beacon timeout
+    Time m_probeRequestTimeout;                   ///< probe request timeout
+    Time m_assocRequestTimeout;                   ///< association request timeout
+    EventId m_assocRequestEvent;                  ///< association request event
+    uint32_t m_maxMissedBeacons;                  ///< maximum missed beacons
+    EventId m_beaconWatchdog;                     //!< beacon watchdog
+    Time m_beaconWatchdogEnd{0};                  //!< beacon watchdog end
+    bool m_activeProbing;                         ///< active probing
+    Ptr<RandomVariableStream> m_probeDelay;       ///< RandomVariable used to randomize the time
+                                                  ///< of the first Probe Response on each channel
+    Time m_pmModeSwitchTimeout;                   ///< PM mode switch timeout
+    std::map<uint8_t, EventId> m_emlsrLinkSwitch; ///< maps PHY ID to the event scheduled to switch
+                                                  ///< the corresponding PHY to a new EMLSR link
 
     /// store the DL TID-to-Link Mapping included in the Association Request frame
     WifiTidLinkMapping m_dlTidLinkMappingInAssocReq;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/supported-rates.cc ns-3.43/src/wifi/model/supported-rates.cc
--- ns-3.42/src/wifi/model/supported-rates.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/supported-rates.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/supported-rates.h ns-3.43/src/wifi/model/supported-rates.h
--- ns-3.42/src/wifi/model/supported-rates.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/supported-rates.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/table-based-error-rate-model.cc ns-3.43/src/wifi/model/table-based-error-rate-model.cc
--- ns-3.42/src/wifi/model/table-based-error-rate-model.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/table-based-error-rate-model.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rohan Patidar <rpatidar@uw.edu>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -76,11 +65,11 @@
     m_fallbackErrorModel = nullptr;
 }
 
-double
-TableBasedErrorRateModel::RoundSnr(double snr, double precision) const
+dB_u
+TableBasedErrorRateModel::RoundSnr(dB_u snr, double precision) const
 {
     NS_LOG_FUNCTION(this << snr);
-    double multiplier = std::round(std::pow(10.0, precision));
+    const auto multiplier = std::round(std::pow(10.0, precision));
     return std::floor(snr * multiplier + 0.5) / multiplier;
 }
 
@@ -156,8 +145,8 @@
                                                 uint16_t staId) const
 {
     NS_LOG_FUNCTION(this << mode << txVector << snr << nbits << +numRxAntennas << field << staId);
-    uint64_t size = std::max<uint64_t>(1, (nbits / 8));
-    double roundedSnr = RoundSnr(RatioToDb(snr), SNR_PRECISION);
+    const auto size = std::max<uint64_t>(1, (nbits / 8)); // in bytes
+    const auto roundedSnr = RoundSnr(RatioToDb(snr), SNR_PRECISION);
     uint8_t mcs;
     if (auto ret = GetMcsForMode(mode); ret.has_value())
     {
@@ -189,13 +178,12 @@
     auto errorTable = (ldpc ? AwgnErrorTableLdpc1458
                             : (size < m_threshold ? AwgnErrorTableBcc32 : AwgnErrorTableBcc1458));
     const auto& itVector = errorTable[mcs];
-    auto itTable = std::find_if(itVector.cbegin(),
-                                itVector.cend(),
-                                [&roundedSnr](const std::pair<double, double>& element) {
-                                    return element.first == roundedSnr;
-                                });
-    double minSnr = itVector.cbegin()->first;
-    double maxSnr = (--itVector.cend())->first;
+    auto itTable =
+        std::find_if(itVector.cbegin(), itVector.cend(), [&roundedSnr](const auto& element) {
+            return element.first == roundedSnr;
+        });
+    const auto minSnr = itVector.cbegin()->first;
+    const auto maxSnr = (--itVector.cend())->first;
     double per;
     if (itTable == itVector.cend())
     {
@@ -211,8 +199,8 @@
         {
             double a = 0.0;
             double b = 0.0;
-            double previousSnr = 0.0;
-            double nextSnr = 0.0;
+            dB_u previousSnr{0.0};
+            dB_u nextSnr{0.0};
             for (auto i = itVector.cbegin(); i != itVector.cend(); ++i)
             {
                 if (i->first < roundedSnr)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/table-based-error-rate-model.h ns-3.43/src/wifi/model/table-based-error-rate-model.h
--- ns-3.42/src/wifi/model/table-based-error-rate-model.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/table-based-error-rate-model.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rohan Patidar <rpatidar@uw.edu>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -67,13 +56,13 @@
                                  uint16_t staId) const override;
 
     /**
-     * Round SNR (in dB) to the specified precision
+     * Round SNR to the specified precision
      *
-     * \param snr the SNR to round  (in dB)
+     * \param snr the SNR to round
      * \param precision the precision to use
-     * \return the rounded SNR (in dB) to the specified precision
+     * \return the rounded SNR to the specified precision
      */
-    double RoundSnr(double snr, double precision) const;
+    dB_u RoundSnr(dB_u snr, double precision) const;
 
     /**
      * Fetch the frame success rate for a given Wi-Fi mode, TXVECTOR, SNR and frame size.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/threshold-preamble-detection-model.cc ns-3.43/src/wifi/model/threshold-preamble-detection-model.cc
--- ns-3.42/src/wifi/model/threshold-preamble-detection-model.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/threshold-preamble-detection-model.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -44,12 +33,12 @@
                           "(expressed in dB).",
                           DoubleValue(4),
                           MakeDoubleAccessor(&ThresholdPreambleDetectionModel::m_threshold),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<dB_u>())
             .AddAttribute("MinimumRssi",
                           "Preamble is dropped if the RSSI is below this value (expressed in dBm).",
                           DoubleValue(-82),
                           MakeDoubleAccessor(&ThresholdPreambleDetectionModel::m_rssiMin),
-                          MakeDoubleChecker<double>());
+                          MakeDoubleChecker<dBm_u>());
     return tid;
 }
 
@@ -64,12 +53,12 @@
 }
 
 bool
-ThresholdPreambleDetectionModel::IsPreambleDetected(double rssi,
+ThresholdPreambleDetectionModel::IsPreambleDetected(dBm_u rssi,
                                                     double snr,
-                                                    double channelWidth) const
+                                                    MHz_u channelWidth) const
 {
-    NS_LOG_FUNCTION(this << WToDbm(rssi) << RatioToDb(snr) << channelWidth);
-    if (WToDbm(rssi) >= m_rssiMin)
+    NS_LOG_FUNCTION(this << rssi << RatioToDb(snr) << channelWidth);
+    if (rssi >= m_rssiMin)
     {
         if (RatioToDb(snr) >= m_threshold)
         {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/threshold-preamble-detection-model.h ns-3.43/src/wifi/model/threshold-preamble-detection-model.h
--- ns-3.42/src/wifi/model/threshold-preamble-detection-model.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/threshold-preamble-detection-model.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -21,6 +10,7 @@
 #define THRESHOLD_PREAMBLE_DETECTION_MODEL_H
 
 #include "preamble-detection-model.h"
+#include "wifi-units.h"
 
 namespace ns3
 {
@@ -43,23 +33,11 @@
 
     ThresholdPreambleDetectionModel();
     ~ThresholdPreambleDetectionModel() override;
-
-    /**
-     * This method returns whether the preamble detection was successful.
-     *
-     * \param rssi the RSSI of the received signal (in Watts).
-     * \param snr the SNR ratio (linear scale) of the received signal.
-     * \param channelWidth the channel width of the received signal in MHz.
-     *
-     * \return true if the preamble has been detected,
-     *         false otherwise
-     */
-    bool IsPreambleDetected(double rssi, double snr, double channelWidth) const override;
+    bool IsPreambleDetected(dBm_u rssi, double snr, MHz_u channelWidth) const override;
 
   private:
-    double m_threshold; ///< SNR threshold in dB used to decide whether a preamble is successfully
-                        ///< received
-    double m_rssiMin;   ///< Minimum RSSI in dBm that shall be received to start the decision
+    dB_u m_threshold; ///< SNR threshold used to decide whether a preamble is successfully received
+    dBm_u m_rssiMin;  ///< Minimum RSSI that shall be received to start the decision
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/tim.cc ns-3.43/src/wifi/model/tim.cc
--- ns-3.42/src/wifi/model/tim.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/tim.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Davide Magrin <davide@magr.in>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/tim.h ns-3.43/src/wifi/model/tim.h
--- ns-3.42/src/wifi/model/tim.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/tim.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Davide Magrin <davide@magr.in>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/txop.cc ns-3.43/src/wifi/model/txop.cc
--- ns-3.42/src/wifi/model/txop.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/txop.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -620,16 +609,6 @@
 }
 
 void
-Txop::Queue(Ptr<Packet> packet, const WifiMacHeader& hdr)
-{
-    NS_LOG_FUNCTION(this << packet << &hdr);
-    // remove the priority tag attached, if any
-    SocketPriorityTag priorityTag;
-    packet->RemovePacketTag(priorityTag);
-    Queue(Create<WifiMpdu>(packet, hdr));
-}
-
-void
 Txop::Queue(Ptr<WifiMpdu> mpdu)
 {
     NS_LOG_FUNCTION(this << *mpdu);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/txop.h ns-3.43/src/wifi/model/txop.h
--- ns-3.42/src/wifi/model/txop.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/txop.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -55,29 +44,14 @@
 enum WifiMacDropReason : uint8_t; // opaque enum declaration
 
 /**
- * \brief Handle packet fragmentation and retransmissions
- * for data and management frames.
+ * \brief Handles the packet queue and stores DCF/EDCA access parameters
+ * (one Txop per AC).
  * \ingroup wifi
  *
- * This class implements the packet fragmentation and
- * retransmission policy for data and management frames.
- * It uses the ns3::ChannelAccessManager helper
- * class to decide when to send a packet.
- * Packets are stored in a ns3::WifiMacQueue
- * until they can be sent.
- *
- * The policy currently implemented uses a simple fragmentation
- * threshold: any packet bigger than this threshold is fragmented
- * in fragments whose size is smaller than the threshold.
- *
- * The retransmission policy is also very simple: every packet is
- * retransmitted until it is either successfully transmitted or
- * it has been retransmitted up until the SSRC or SLRC thresholds.
- *
- * The RTS/CTS policy is similar to the fragmentation policy: when
- * a packet is bigger than a threshold, the RTS/CTS protocol is used.
+ * This class handles the packet queue and stores DCF/EDCA access
+ * parameters (one Txop per AC). It generates backoff values and stores the channel access status
+ * (not requested, requested, granted) for the corresponding DCF/EDCA and for each link.
  */
-
 class Txop : public Object
 {
   public:
@@ -354,14 +328,6 @@
 
     /* Event handlers */
     /**
-     * \param packet packet to send.
-     * \param hdr header of packet to send.
-     *
-     * Store the packet in the internal queue until it
-     * can be sent safely.
-     */
-    virtual void Queue(Ptr<Packet> packet, const WifiMacHeader& hdr);
-    /**
      * \param mpdu the given MPDU
      *
      * Store the given MPDU in the internal queue until it
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-capabilities.cc ns-3.43/src/wifi/model/vht/vht-capabilities.cc
--- ns-3.42/src/wifi/model/vht/vht-capabilities.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-capabilities.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Ghada Badawy <gbadawy@rim.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-capabilities.h ns-3.43/src/wifi/model/vht/vht-capabilities.h
--- ns-3.42/src/wifi/model/vht/vht-capabilities.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-capabilities.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Ghada Badawy <gbadawy@gmail.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-configuration.cc ns-3.43/src/wifi/model/vht/vht-configuration.cc
--- ns-3.42/src/wifi/model/vht/vht-configuration.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-configuration.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018  Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -70,9 +59,9 @@
                               &VhtConfiguration::SetSecondaryCcaSensitivityThresholds,
                               &VhtConfiguration::GetSecondaryCcaSensitivityThresholds),
                           MakeTupleChecker<DoubleValue, DoubleValue, DoubleValue>(
-                              MakeDoubleChecker<double>(),
-                              MakeDoubleChecker<double>(),
-                              MakeDoubleChecker<double>()));
+                              MakeDoubleChecker<dBm_u>(),
+                              MakeDoubleChecker<dBm_u>(),
+                              MakeDoubleChecker<dBm_u>()));
     return tid;
 }
 
@@ -107,7 +96,7 @@
             m_secondaryCcaSensitivityThresholds.at(80)};
 }
 
-const std::map<uint16_t, double>&
+const std::map<MHz_u, dBm_u>&
 VhtConfiguration::GetSecondaryCcaSensitivityThresholdsPerBw() const
 {
     return m_secondaryCcaSensitivityThresholds;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-configuration.h ns-3.43/src/wifi/model/vht/vht-configuration.h
--- ns-3.42/src/wifi/model/vht/vht-configuration.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-configuration.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018  Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -21,6 +10,7 @@
 #define VHT_CONFIGURATION_H
 
 #include "ns3/object.h"
+#include "ns3/wifi-units.h"
 
 #include <map>
 #include <tuple>
@@ -62,8 +52,8 @@
     bool Get160MHzOperationSupported() const;
 
     using SecondaryCcaSensitivityThresholds =
-        std::tuple<double, double, double>; //!< Tuple identifying CCA sensitivity thresholds for
-                                            //!< secondary channels
+        std::tuple<dBm_u, dBm_u, dBm_u>; //!< Tuple identifying CCA sensitivity thresholds for
+                                         //!< secondary channels
 
     /**
      * Sets the CCA sensitivity thresholds for PPDUs that do not occupy the primary channel.
@@ -80,16 +70,16 @@
 
     /**
      * \return the CCA sensitivity thresholds for PPDUs that do not occupy the primary channel,
-     * indexed by signal bandwidth (MHz)
+     * indexed by signal bandwidth
      */
-    const std::map<uint16_t, double>& GetSecondaryCcaSensitivityThresholdsPerBw() const;
+    const std::map<MHz_u, dBm_u>& GetSecondaryCcaSensitivityThresholdsPerBw() const;
 
   private:
     bool m_160MHzSupported; ///< whether 160 MHz operation is supported
-    std::map<uint16_t, double>
+    std::map<MHz_u, dBm_u>
         m_secondaryCcaSensitivityThresholds; ///< CCA sensitivity thresholds for signals that do not
                                              ///< occupy the primary channel, indexed by signal
-                                             ///< bandwidth (MHz)
+                                             ///< bandwidth
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-frame-exchange-manager.cc ns-3.43/src/wifi/model/vht/vht-frame-exchange-manager.cc
--- ns-3.42/src/wifi/model/vht/vht-frame-exchange-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-frame-exchange-manager.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-frame-exchange-manager.h ns-3.43/src/wifi/model/vht/vht-frame-exchange-manager.h
--- ns-3.42/src/wifi/model/vht/vht-frame-exchange-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-frame-exchange-manager.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-operation.cc ns-3.43/src/wifi/model/vht/vht-operation.cc
--- ns-3.42/src/wifi/model/vht/vht-operation.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-operation.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-operation.h ns-3.43/src/wifi/model/vht/vht-operation.h
--- ns-3.42/src/wifi/model/vht/vht-operation.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-operation.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 Sébastien Deronne
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-phy.cc ns-3.43/src/wifi/model/vht/vht-phy.cc
--- ns-3.42/src/wifi/model/vht/vht-phy.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-phy.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -76,10 +65,12 @@
     { std::make_tuple (160, 7, 9), 12 }, // instead of 10
 };
 
+// clang-format on
+
 /**
- * \brief map a given channel list type to the corresponding scaling factor in dBm
+ * \brief map a given channel list type to the corresponding scaling factor
  */
-const std::map<WifiChannelListType, double> channelTypeToScalingFactorDbm {
+const std::map<WifiChannelListType, dBm_u> channelTypeToScalingFactor{
     {WIFI_CHANLIST_PRIMARY, 0.0},
     {WIFI_CHANLIST_SECONDARY, 0.0},
     {WIFI_CHANLIST_SECONDARY40, 3.0},
@@ -89,14 +80,12 @@
 /**
  * \brief map a given secondary channel width to its channel list type
  */
-const std::map<uint16_t, WifiChannelListType> secondaryChannels {
+const std::map<MHz_u, WifiChannelListType> secondaryChannels{
     {20, WIFI_CHANLIST_SECONDARY},
     {40, WIFI_CHANLIST_SECONDARY40},
     {80, WIFI_CHANLIST_SECONDARY80},
 };
 
-// clang-format on
-
 VhtPhy::VhtPhy(bool buildModeList /* = true */)
     : HtPhy(1, false) // don't add HT modes to list
 {
@@ -234,7 +223,7 @@
      * 21-30 to 21-61 of IEEE 802.11-2016.
      * These values are the last values before changing encoders.
      */
-    double maxRatePerCoder = (txVector.GetGuardInterval() == 800) ? 540e6 : 600e6;
+    double maxRatePerCoder = (txVector.GetGuardInterval().GetNanoSeconds() == 800) ? 540e6 : 600e6;
     uint8_t nes = ceil(payloadMode.GetDataRate(txVector) / maxRatePerCoder);
 
     // Handle exceptions to the rule
@@ -430,7 +419,7 @@
 }
 
 uint64_t
-VhtPhy::GetPhyRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
+VhtPhy::GetPhyRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
 {
     WifiCodeRate codeRate = GetCodeRate(mcsValue);
     uint64_t dataRate = GetDataRate(mcsValue, channelWidth, guardInterval, nss);
@@ -456,14 +445,15 @@
 }
 
 uint64_t
-VhtPhy::GetDataRate(uint8_t mcsValue, uint16_t channelWidth, uint16_t guardInterval, uint8_t nss)
+VhtPhy::GetDataRate(uint8_t mcsValue, MHz_u channelWidth, Time guardInterval, uint8_t nss)
 {
-    NS_ASSERT(guardInterval == 800 || guardInterval == 400);
+    [[maybe_unused]] const auto gi = guardInterval.GetNanoSeconds();
+    NS_ASSERT((gi == 800) || (gi == 400));
     NS_ASSERT(nss <= 8);
     NS_ASSERT_MSG(IsCombinationAllowed(mcsValue, channelWidth, nss),
                   "VHT MCS " << +mcsValue << " forbidden at " << channelWidth << " MHz when NSS is "
                              << +nss);
-    return HtPhy::CalculateDataRate(GetSymbolDuration(NanoSeconds(guardInterval)),
+    return HtPhy::CalculateDataRate(GetSymbolDuration(guardInterval),
                                     GetUsableSubcarriers(channelWidth),
                                     static_cast<uint16_t>(log2(GetConstellationSize(mcsValue))),
                                     HtPhy::GetCodeRatio(GetCodeRate(mcsValue)),
@@ -471,9 +461,9 @@
 }
 
 uint16_t
-VhtPhy::GetUsableSubcarriers(uint16_t channelWidth)
+VhtPhy::GetUsableSubcarriers(MHz_u channelWidth)
 {
-    switch (channelWidth)
+    switch (static_cast<uint16_t>(channelWidth))
     {
     case 80:
         return 234;
@@ -487,8 +477,8 @@
 uint64_t
 VhtPhy::GetNonHtReferenceRate(uint8_t mcsValue)
 {
-    WifiCodeRate codeRate = GetCodeRate(mcsValue);
-    uint16_t constellationSize = GetConstellationSize(mcsValue);
+    const auto codeRate = GetCodeRate(mcsValue);
+    const auto constellationSize = GetConstellationSize(mcsValue);
     return CalculateNonHtReferenceRate(codeRate, constellationSize);
 }
 
@@ -524,7 +514,7 @@
 }
 
 bool
-VhtPhy::IsCombinationAllowed(uint8_t mcsValue, uint16_t channelWidth, uint8_t nss)
+VhtPhy::IsCombinationAllowed(uint8_t mcsValue, MHz_u channelWidth, uint8_t nss)
 {
     if (mcsValue == 9 && channelWidth == 20 && nss != 3)
     {
@@ -543,12 +533,12 @@
     return 4692480;
 }
 
-double
+dBm_u
 VhtPhy::GetCcaThreshold(const Ptr<const WifiPpdu> ppdu, WifiChannelListType channelType) const
 {
     if (ppdu)
     {
-        const uint16_t ppduBw = ppdu->GetTxVector().GetChannelWidth();
+        const auto ppduBw = ppdu->GetTxVector().GetChannelWidth();
         switch (channelType)
         {
         case WIFI_CHANLIST_PRIMARY: {
@@ -577,8 +567,8 @@
     }
     else
     {
-        const auto it = channelTypeToScalingFactorDbm.find(channelType);
-        NS_ASSERT_MSG(it != std::end(channelTypeToScalingFactorDbm), "Invalid channel list type");
+        const auto it = channelTypeToScalingFactor.find(channelType);
+        NS_ASSERT_MSG(it != std::end(channelTypeToScalingFactor), "Invalid channel list type");
         return m_wifiPhy->GetCcaEdThreshold() + it->second;
     }
 }
@@ -591,8 +581,8 @@
         return HtPhy::GetCcaIndication(ppdu);
     }
 
-    double ccaThresholdDbm = GetCcaThreshold(ppdu, WIFI_CHANLIST_PRIMARY);
-    Time delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThresholdDbm, GetPrimaryBand(20));
+    auto ccaThreshold = GetCcaThreshold(ppdu, WIFI_CHANLIST_PRIMARY);
+    auto delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, GetPrimaryBand(20));
     if (delayUntilCcaEnd.IsStrictlyPositive())
     {
         return std::make_pair(
@@ -602,11 +592,11 @@
 
     if (ppdu)
     {
-        const uint16_t primaryWidth = 20;
-        uint16_t p20MinFreq =
+        const MHz_u primaryWidth = 20;
+        const MHz_u p20MinFreq =
             m_wifiPhy->GetOperatingChannel().GetPrimaryChannelCenterFrequency(primaryWidth) -
             (primaryWidth / 2);
-        uint16_t p20MaxFreq =
+        const MHz_u p20MaxFreq =
             m_wifiPhy->GetOperatingChannel().GetPrimaryChannelCenterFrequency(primaryWidth) +
             (primaryWidth / 2);
         if (ppdu->DoesOverlapChannel(p20MinFreq, p20MaxFreq))
@@ -619,17 +609,17 @@
         }
     }
 
-    std::vector<uint16_t> secondaryWidthsToCheck;
+    std::vector<MHz_u> secondaryWidthsToCheck;
     if (ppdu)
     {
         for (const auto& secondaryChannel : secondaryChannels)
         {
-            uint16_t secondaryWidth = secondaryChannel.first;
-            uint16_t secondaryMinFreq =
+            const auto secondaryWidth = secondaryChannel.first;
+            const MHz_u secondaryMinFreq =
                 m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(
                     secondaryWidth) -
                 (secondaryWidth / 2);
-            uint16_t secondaryMaxFreq =
+            const MHz_u secondaryMaxFreq =
                 m_wifiPhy->GetOperatingChannel().GetSecondaryChannelCenterFrequency(
                     secondaryWidth) +
                 (secondaryWidth / 2);
@@ -653,8 +643,8 @@
     for (auto secondaryWidth : secondaryWidthsToCheck)
     {
         auto channelType = secondaryChannels.at(secondaryWidth);
-        ccaThresholdDbm = GetCcaThreshold(ppdu, channelType);
-        delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThresholdDbm, GetSecondaryBand(secondaryWidth));
+        ccaThreshold = GetCcaThreshold(ppdu, channelType);
+        delayUntilCcaEnd = GetDelayUntilCcaEnd(ccaThreshold, GetSecondaryBand(secondaryWidth));
         if (delayUntilCcaEnd.IsStrictlyPositive())
         {
             return std::make_pair(delayUntilCcaEnd, channelType);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-phy.h ns-3.43/src/wifi/model/vht/vht-phy.h
--- ns-3.42/src/wifi/model/vht/vht-phy.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-phy.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Rediet <getachew.redieteab@orange.com>
  *          Sébastien Deronne <sebastien.deronne@gmail.com> (for logic ported from wifi-phy)
@@ -70,8 +59,8 @@
     Ptr<WifiPpdu> BuildPpdu(const WifiConstPsduMap& psdus,
                             const WifiTxVector& txVector,
                             Time ppduDuration) override;
-    double GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
-                           WifiChannelListType channelType) const override;
+    dBm_u GetCcaThreshold(const Ptr<const WifiPpdu> ppdu,
+                          WifiChannelListType channelType) const override;
 
     /**
      * \return the WifiMode used for the SIG-A field
@@ -195,15 +184,15 @@
      * and is mainly used as a callback for WifiMode operation.
      *
      * \param mcsValue the VHT MCS index
-     * \param channelWidth the considered channel width in MHz
-     * \param guardInterval the considered guard interval duration in nanoseconds
+     * \param channelWidth the considered channel width
+     * \param guardInterval the considered guard interval duration
      * \param nss the considered number of stream
      *
      * \return the physical bit rate of this signal in bps.
      */
     static uint64_t GetPhyRate(uint8_t mcsValue,
-                               uint16_t channelWidth,
-                               uint16_t guardInterval,
+                               MHz_u channelWidth,
+                               Time guardInterval,
                                uint8_t nss);
     /**
      * Return the PHY rate corresponding to
@@ -234,14 +223,14 @@
      * streams.
      *
      * \param mcsValue the MCS index
-     * \param channelWidth the channel width in MHz
-     * \param guardInterval the guard interval duration in nanoseconds
+     * \param channelWidth the channel width
+     * \param guardInterval the guard interval duration
      * \param nss the number of spatial streams
      * \return the data bit rate in bps.
      */
     static uint64_t GetDataRate(uint8_t mcsValue,
-                                uint16_t channelWidth,
-                                uint16_t guardInterval,
+                                MHz_u channelWidth,
+                                Time guardInterval,
                                 uint8_t nss);
     /**
      * Calculate the rate in bps of the non-HT Reference Rate corresponding
@@ -257,11 +246,11 @@
      * This function is used as a callback for WifiMode operation.
      *
      * \param mcsValue the considered MCS index
-     * \param channelWidth the considered channel width in MHz
+     * \param channelWidth the considered channel width
      * \param nss the considered number of streams
      * \returns true if this <MCS, channel width, NSS> combination is allowed, false otherwise.
      */
-    static bool IsCombinationAllowed(uint8_t mcsValue, uint16_t channelWidth, uint8_t nss);
+    static bool IsCombinationAllowed(uint8_t mcsValue, MHz_u channelWidth, uint8_t nss);
     /**
      * Check whether the combination in TXVECTOR is allowed.
      * This function is used as a callback for WifiMode operation.
@@ -330,10 +319,10 @@
      */
     static uint64_t CalculateNonHtReferenceRate(WifiCodeRate codeRate, uint16_t constellationSize);
     /**
-     * \param channelWidth the channel width in MHz
+     * \param channelWidth the channel width
      * \return he number of usable subcarriers for data
      */
-    static uint16_t GetUsableSubcarriers(uint16_t channelWidth);
+    static uint16_t GetUsableSubcarriers(MHz_u channelWidth);
 
   private:
     void BuildModeList() override;
@@ -352,7 +341,7 @@
      * Typedef for storing exceptions in the number of BCC encoders for VHT MCSs
      */
     typedef std::map<
-        std::tuple<uint16_t /* channelWidth in MHz */, uint8_t /* Nss */, uint8_t /* MCS index */>,
+        std::tuple<MHz_u /* channelWidth */, uint8_t /* Nss */, uint8_t /* MCS index */>,
         uint8_t /* Nes */>
         NesExceptionMap;
     static const NesExceptionMap m_exceptionsMap; //!< exception map for number of BCC encoders
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-ppdu.cc ns-3.43/src/wifi/model/vht/vht-ppdu.cc
--- ns-3.42/src/wifi/model/vht/vht-ppdu.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-ppdu.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
@@ -73,13 +62,14 @@
 {
     vhtSig.SetMuFlag(m_preamble == WIFI_PREAMBLE_VHT_MU);
     vhtSig.SetChannelWidth(txVector.GetChannelWidth());
-    vhtSig.SetShortGuardInterval(txVector.GetGuardInterval() == 400);
+    const auto sgi = txVector.GetGuardInterval().GetNanoSeconds() == 400;
+    vhtSig.SetShortGuardInterval(sgi);
     uint32_t nSymbols =
         (static_cast<double>(
              (ppduDuration - WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector))
                  .GetNanoSeconds()) /
-         (3200 + txVector.GetGuardInterval()));
-    if (txVector.GetGuardInterval() == 400)
+         (3200 + txVector.GetGuardInterval().GetNanoSeconds()));
+    if (sgi)
     {
         vhtSig.SetShortGuardIntervalDisambiguation((nSymbols % 10) == 9);
     }
@@ -104,7 +94,7 @@
     txVector.SetMode(VhtPhy::GetVhtMcs(vhtSig.GetSuMcs()));
     txVector.SetChannelWidth(vhtSig.GetChannelWidth());
     txVector.SetNss(vhtSig.GetNStreams());
-    txVector.SetGuardInterval(vhtSig.GetShortGuardInterval() ? 400 : 800);
+    txVector.SetGuardInterval(NanoSeconds(vhtSig.GetShortGuardInterval() ? 400 : 800));
     txVector.SetAggregation(GetPsdu()->IsAggregate());
 }
 
@@ -115,7 +105,7 @@
     const auto length = m_lSig.GetLength();
     const auto sgi = m_vhtSig.GetShortGuardInterval();
     const auto sgiDisambiguation = m_vhtSig.GetShortGuardIntervalDisambiguation();
-    const auto tSymbol = NanoSeconds(3200 + txVector.GetGuardInterval());
+    const auto tSymbol = NanoSeconds(3200) + txVector.GetGuardInterval();
     const auto preambleDuration = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
     const auto calculatedDuration =
         MicroSeconds(((ceil(static_cast<double>(length + 3) / 3)) * 4) + 20);
@@ -158,7 +148,7 @@
 }
 
 void
-VhtPpdu::VhtSigHeader::SetChannelWidth(uint16_t channelWidth)
+VhtPpdu::VhtSigHeader::SetChannelWidth(MHz_u channelWidth)
 {
     if (channelWidth == 160)
     {
@@ -178,7 +168,7 @@
     }
 }
 
-uint16_t
+MHz_u
 VhtPpdu::VhtSigHeader::GetChannelWidth() const
 {
     if (m_bw == 3)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/vht/vht-ppdu.h ns-3.43/src/wifi/model/vht/vht-ppdu.h
--- ns-3.42/src/wifi/model/vht/vht-ppdu.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/vht/vht-ppdu.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  *         Muhammad Iqbal Rochman <muhiqbalcr@uchicago.edu>
@@ -62,17 +51,17 @@
         void SetMuFlag(bool mu);
 
         /**
-         * Fill the channel width field of VHT-SIG-A1 (in MHz).
+         * Fill the channel width field of VHT-SIG-A1.
          *
-         * \param channelWidth the channel width (in MHz)
+         * \param channelWidth the channel width
          */
-        void SetChannelWidth(uint16_t channelWidth);
+        void SetChannelWidth(MHz_u channelWidth);
         /**
-         * Return the channel width (in MHz).
+         * Return the channel width.
          *
-         * \return the channel width (in MHz)
+         * \return the channel width
          */
-        uint16_t GetChannelWidth() const;
+        MHz_u GetChannelWidth() const;
         /**
          * Fill the number of streams field of VHT-SIG-A1.
          *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-ack-manager.cc ns-3.43/src/wifi/model/wifi-ack-manager.cc
--- ns-3.42/src/wifi/model/wifi-ack-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-ack-manager.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-ack-manager.h ns-3.43/src/wifi/model/wifi-ack-manager.h
--- ns-3.42/src/wifi/model/wifi-ack-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-ack-manager.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-acknowledgment.cc ns-3.43/src/wifi/model/wifi-acknowledgment.cc
--- ns-3.42/src/wifi/model/wifi-acknowledgment.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-acknowledgment.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-acknowledgment.h ns-3.43/src/wifi/model/wifi-acknowledgment.h
--- ns-3.42/src/wifi/model/wifi-acknowledgment.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-acknowledgment.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-assoc-manager.cc ns-3.43/src/wifi/model/wifi-assoc-manager.cc
--- ns-3.42/src/wifi/model/wifi-assoc-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-assoc-manager.cc	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
 
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-assoc-manager.h ns-3.43/src/wifi/model/wifi-assoc-manager.h
--- ns-3.42/src/wifi/model/wifi-assoc-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-assoc-manager.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-bandwidth-filter.cc ns-3.43/src/wifi/model/wifi-bandwidth-filter.cc
--- ns-3.42/src/wifi/model/wifi-bandwidth-filter.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-bandwidth-filter.cc	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2022 Universita' degli Studi di Napoli "Federico II"
  * Copyright (c) 2022 University of Washington (port logic to WifiBandwidthFilter)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "wifi-bandwidth-filter.h"
@@ -82,57 +71,64 @@
                   "SpectrumWifiPhy::TrackSignalsFromInactiveInterfaces attribute is not enabled");
 
     NS_ASSERT((interface != wifiPhy->GetCurrentInterface()) ||
-              (wifiPhy->GetOperatingChannel().GetFrequency() == interface->GetCenterFrequency()));
-    NS_ASSERT((interface != wifiPhy->GetCurrentInterface()) ||
-              (wifiPhy->GetOperatingChannel().GetWidth() == interface->GetChannelWidth()));
+              (wifiPhy->GetOperatingChannel().GetTotalWidth() == interface->GetChannelWidth()));
+    NS_ASSERT(
+        (interface != wifiPhy->GetCurrentInterface()) ||
+        (wifiPhy->GetOperatingChannel().GetFrequencies() == interface->GetCenterFrequencies()));
 
     // The signal power is spread over a frequency interval that includes a guard
     // band on the left and a guard band on the right of the nominal TX band
-
-    const auto rxCenterFreq = wifiRxParams->ppdu->GetTxCenterFreq();
-    const auto rxWidth = wifiRxParams->ppdu->GetTxVector().GetChannelWidth();
+    const auto rxCenterFreqs = wifiRxParams->ppdu->GetTxCenterFreqs();
+    // all segments have the same width
+    const auto rxWidth =
+        (wifiRxParams->ppdu->GetTxVector().GetChannelWidth() / rxCenterFreqs.size());
     const auto guardBandwidth = wifiPhy->GetGuardBandwidth(rxWidth);
-    const auto operatingFrequency = interface->GetCenterFrequency();
-    const auto operatingChannelWidth = interface->GetChannelWidth();
-
-    const auto rxMinFreq = rxCenterFreq - rxWidth / 2 - guardBandwidth;
-    const auto rxMaxFreq = rxCenterFreq + rxWidth / 2 + guardBandwidth;
-
-    const auto channelMinFreq = operatingFrequency - operatingChannelWidth / 2;
-    const auto channelMaxFreq = operatingFrequency + operatingChannelWidth / 2;
-
-    /**
-     * The PPDU can be ignored if the two bands do not overlap.
-     *
-     * First non-overlapping case:
-     *
-     *                                        ┌─────────┬─────────┬─────────┐
-     *                                PPDU    │  Guard  │ Nominal │  Guard  │
-     *                                        │  Band   │   Band  │  Band   │
-     *                                        └─────────┴─────────┴─────────┘
-     *                                    rxMinFreq                     rxMaxFreq
-     *
-     * channelMinFreq                channelMaxFreq
-     *         ┌──────────────────────────────┐
-     *         │         Operating            │
-     *         │           Channel            │
-     *         └──────────────────────────────┘
-     *
-     * Second non-overlapping case:
-     *
-     *         ┌─────────┬─────────┬─────────┐
-     * PPDU    │  Guard  │ Nominal │  Guard  │
-     *         │  Band   │   Band  │  Band   │
-     *         └─────────┴─────────┴─────────┘
-     *     rxMinFreq                     rxMaxFreq
-     *
-     *                               channelMinFreq                channelMaxFreq
-     *                                       ┌──────────────────────────────┐
-     *                                       │         Operating            │
-     *                                       │           Channel            │
-     *                                       └──────────────────────────────┘
-     */
-    auto filter = (rxMinFreq >= channelMaxFreq || rxMaxFreq <= channelMinFreq);
+    bool filter = true;
+    for (auto rxCenterFreq : rxCenterFreqs)
+    {
+        const auto rxMinFreq = rxCenterFreq - rxWidth / 2 - guardBandwidth;
+        const auto rxMaxFreq = rxCenterFreq + rxWidth / 2 + guardBandwidth;
+        const auto operatingFrequencies = interface->GetCenterFrequencies();
+        const auto operatingChannelWidth =
+            interface->GetChannelWidth() / operatingFrequencies.size();
+        for (auto operatingFrequency : operatingFrequencies)
+        {
+            const auto channelMinFreq = operatingFrequency - operatingChannelWidth / 2;
+            const auto channelMaxFreq = operatingFrequency + operatingChannelWidth / 2;
+            /**
+             * The PPDU can be ignored if the two bands do not overlap.
+             *
+             * First non-overlapping case:
+             *
+             *                                        ┌─────────┬─────────┬─────────┐
+             *                                PPDU    │  Guard  │ Nominal │  Guard  │
+             *                                        │  Band   │   Band  │  Band   │
+             *                                        └─────────┴─────────┴─────────┘
+             *                                    rxMinFreq                     rxMaxFreq
+             *
+             * channelMinFreq                channelMaxFreq
+             *         ┌──────────────────────────────┐
+             *         │         Operating            │
+             *         │           Channel            │
+             *         └──────────────────────────────┘
+             *
+             * Second non-overlapping case:
+             *
+             *         ┌─────────┬─────────┬─────────┐
+             * PPDU    │  Guard  │ Nominal │  Guard  │
+             *         │  Band   │   Band  │  Band   │
+             *         └─────────┴─────────┴─────────┘
+             *     rxMinFreq                     rxMaxFreq
+             *
+             *                               channelMinFreq                channelMaxFreq
+             *                                       ┌──────────────────────────────┐
+             *                                       │         Operating            │
+             *                                       │           Channel            │
+             *                                       └──────────────────────────────┘
+             */
+            filter &= ((rxMinFreq >= channelMaxFreq) || (rxMaxFreq <= channelMinFreq));
+        }
+    }
     NS_LOG_DEBUG("Returning " << filter);
     return filter;
 }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-bandwidth-filter.h ns-3.43/src/wifi/model/wifi-bandwidth-filter.h
--- ns-3.42/src/wifi/model/wifi-bandwidth-filter.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-bandwidth-filter.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #ifndef WIFI_BANDWIDTH_FILTER_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-default-ack-manager.cc ns-3.43/src/wifi/model/wifi-default-ack-manager.cc
--- ns-3.42/src/wifi/model/wifi-default-ack-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-default-ack-manager.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -106,27 +95,27 @@
                     "An established Block Ack agreement is required");
 
     uint16_t startingSeq = edca->GetBaStartingSequence(origReceiver, tid);
-    uint16_t maxDistFromStartingSeq =
-        (mpdu->GetHeader().GetSequenceNumber() - startingSeq + SEQNO_SPACE_SIZE) % SEQNO_SPACE_SIZE;
-    NS_ABORT_MSG_IF(maxDistFromStartingSeq >= SEQNO_SPACE_HALF_SIZE,
-                    "The given QoS data frame is too old");
+    uint16_t maxDistFromStartingSeq = 0;
 
     const auto* psduInfo = txParams.GetPsduInfo(receiver);
-
     NS_ASSERT_MSG(psduInfo && psduInfo->seqNumbers.contains(tid),
                   "There must be at least an MPDU with tid " << +tid);
 
-    for (const auto& seqNumber : psduInfo->seqNumbers.at(tid))
+    const auto& seqNumbers = psduInfo->seqNumbers.at(tid);
+    NS_ASSERT_MSG(seqNumbers.contains(mpdu->GetHeader().GetSequenceNumber()),
+                  "The sequence number of the given MPDU is not included in the TX parameters");
+
+    for (const auto& seqNumber : seqNumbers)
     {
-        if (!QosUtilsIsOldPacket(startingSeq, seqNumber))
-        {
-            uint16_t currDistToStartingSeq =
-                (seqNumber - startingSeq + SEQNO_SPACE_SIZE) % SEQNO_SPACE_SIZE;
+        NS_ASSERT_MSG(!QosUtilsIsOldPacket(startingSeq, seqNumber),
+                      "QoS data frame SeqN=" << seqNumber << " is too old");
 
-            if (currDistToStartingSeq > maxDistFromStartingSeq)
-            {
-                maxDistFromStartingSeq = currDistToStartingSeq;
-            }
+        uint16_t currDistToStartingSeq =
+            (seqNumber - startingSeq + SEQNO_SPACE_SIZE) % SEQNO_SPACE_SIZE;
+
+        if (currDistToStartingSeq > maxDistFromStartingSeq)
+        {
+            maxDistFromStartingSeq = currDistToStartingSeq;
         }
     }
 
@@ -141,27 +130,53 @@
     NS_LOG_FUNCTION(this << *mpdu << &txParams);
 
     uint8_t tid = mpdu->GetHeader().GetQosTid();
-    Mac48Address receiver = mpdu->GetOriginal()->GetHeader().GetAddr1();
+    auto receiver = mpdu->GetHeader().GetAddr1();
+    auto origReceiver = mpdu->GetOriginal()->GetHeader().GetAddr1();
     Ptr<QosTxop> edca = m_mac->GetQosTxop(tid);
+    const auto& seqNumbers = txParams.GetPsduInfo(receiver)->seqNumbers.at(tid);
 
     // An immediate response (Ack or Block Ack) is needed if any of the following holds:
+    // * the BA threshold is set to zero
+    if (m_baThreshold == 0.0)
+    {
+        return true;
+    }
     // * the maximum distance between the sequence number of an MPDU to transmit
     //   and the starting sequence number of the transmit window is greater than
     //   or equal to the window size multiplied by the BaThreshold
+    if (GetMaxDistFromStartingSeq(mpdu, txParams) >=
+        m_baThreshold * edca->GetBaBufferSize(origReceiver, tid))
+    {
+        return true;
+    }
     // * no other frame belonging to this BA agreement is queued (because, in such
     //   a case, a Block Ack is not going to be requested anytime soon)
+    if (auto queueId = WifiContainerQueueId(WIFI_QOSDATA_QUEUE, WIFI_UNICAST, origReceiver, tid);
+        edca->GetWifiMacQueue()->GetNPackets(queueId) -
+            edca->GetBaManager()->GetNBufferedPackets(origReceiver, tid) - seqNumbers.size() <
+        1)
+    {
+        return true;
+    }
+    // * the block ack TX window cannot advance because all the MPDUs in the TX window other than
+    //   those being transmitted have been already acknowledged
+    if (m_mac->GetBaAgreementEstablishedAsOriginator(origReceiver, tid)
+            ->get()
+            .AllAckedMpdusInTxWindow(seqNumbers))
+    {
+        return true;
+    }
+
     // * this is the initial frame of a transmission opportunity and it is not
     //   protected by RTS/CTS (see Annex G.3 of IEEE 802.11-2016)
-    return !(
-        m_baThreshold > 0 &&
-        GetMaxDistFromStartingSeq(mpdu, txParams) <
-            m_baThreshold * edca->GetBaBufferSize(receiver, tid) &&
-        (edca->GetWifiMacQueue()->GetNPackets({WIFI_QOSDATA_QUEUE, WIFI_UNICAST, receiver, tid}) -
-             edca->GetBaManager()->GetNBufferedPackets(receiver, tid) >
-         1) &&
-        !(edca->GetTxopLimit(m_linkId).IsStrictlyPositive() &&
-          edca->GetRemainingTxop(m_linkId) == edca->GetTxopLimit(m_linkId) &&
-          !(txParams.m_protection && txParams.m_protection->method == WifiProtection::RTS_CTS)));
+    if (edca->GetTxopLimit(m_linkId).IsStrictlyPositive() &&
+        edca->GetRemainingTxop(m_linkId) == edca->GetTxopLimit(m_linkId) &&
+        !(txParams.m_protection && txParams.m_protection->method == WifiProtection::RTS_CTS))
+    {
+        return true;
+    }
+
+    return false;
 }
 
 bool
@@ -547,7 +562,7 @@
         blockAckTxVector.SetChannelWidth(txParams.m_txVector.GetChannelWidth());
         // 800ns GI is not allowed for HE TB
         blockAckTxVector.SetGuardInterval(
-            std::max<uint16_t>(txParams.m_txVector.GetGuardInterval(), 1600));
+            std::max(txParams.m_txVector.GetGuardInterval(), NanoSeconds(1600)));
         const auto& userInfo = txParams.m_txVector.GetHeMuUserInfo(staId);
         blockAckTxVector.SetHeMuUserInfo(
             staId,
@@ -635,7 +650,7 @@
         blockAckTxVector.SetChannelWidth(txParams.m_txVector.GetChannelWidth());
         // 800ns GI is not allowed for HE TB
         blockAckTxVector.SetGuardInterval(
-            std::max<uint16_t>(txParams.m_txVector.GetGuardInterval(), 1600));
+            std::max(txParams.m_txVector.GetGuardInterval(), NanoSeconds(1600)));
         const auto& userInfo = txParams.m_txVector.GetHeMuUserInfo(staId);
         blockAckTxVector.SetHeMuUserInfo(
             staId,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-default-ack-manager.h ns-3.43/src/wifi/model/wifi-default-ack-manager.h
--- ns-3.42/src/wifi/model/wifi-default-ack-manager.h	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-default-ack-manager.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-default-assoc-manager.cc ns-3.43/src/wifi/model/wifi-default-assoc-manager.cc
--- ns-3.42/src/wifi/model/wifi-default-assoc-manager.cc	2024-05-29 15:29:47.208073900 -0700
+++ ns-3.43/src/wifi/model/wifi-default-assoc-manager.cc	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
 
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -21,10 +10,12 @@
 #include "wifi-default-assoc-manager.h"
 
 #include "sta-wifi-mac.h"
+#include "wifi-net-device.h"
 #include "wifi-phy.h"
 
 #include "ns3/log.h"
 #include "ns3/simulator.h"
+#include "ns3/vht-configuration.h"
 
 #include <algorithm>
 
@@ -212,14 +203,17 @@
                     // switching channel while a PHY is in sleep state fails
                     phy->ResumeFromSleep();
                 }
-                // switch this link to using the channel used by a reported AP
-                // TODO check if the STA only supports a narrower channel width
+                // switch this link to using the channel used by a reported AP (or its primary80
+                // in case the reported AP is using a 160 MHz and the non-AP MLD does not support
+                // 160 MHz operations)
+                if (apChannel.GetTotalWidth() > 80 &&
+                    !phy->GetDevice()->GetVhtConfiguration()->Get160MHzOperationSupported())
+                {
+                    apChannel = apChannel.GetPrimaryChannel(80);
+                }
+
                 NS_LOG_DEBUG("Switch link " << +linkId << " to using " << apChannel);
-                WifiPhy::ChannelTuple chTuple{apChannel.GetNumber(),
-                                              apChannel.GetWidth(),
-                                              apChannel.GetPhyBand(),
-                                              apChannel.GetPrimaryChannelIndex(20)};
-                phy->SetOperatingChannel(chTuple);
+                phy->SetOperatingChannel(apChannel);
                 // actual channel switching may be delayed, thus setup a channel switch timer
                 m_channelSwitchInfo.resize(m_mac->GetNLinks());
                 m_channelSwitchInfo[linkId].timer.Cancel();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-default-assoc-manager.h ns-3.43/src/wifi/model/wifi-default-assoc-manager.h
--- ns-3.42/src/wifi/model/wifi-default-assoc-manager.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-default-assoc-manager.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-default-protection-manager.cc ns-3.43/src/wifi/model/wifi-default-protection-manager.cc
--- ns-3.42/src/wifi/model/wifi-default-protection-manager.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-default-protection-manager.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-default-protection-manager.h ns-3.43/src/wifi/model/wifi-default-protection-manager.h
--- ns-3.42/src/wifi/model/wifi-default-protection-manager.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-default-protection-manager.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-information-element.cc ns-3.43/src/wifi/model/wifi-information-element.cc
--- ns-3.42/src/wifi/model/wifi-information-element.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-information-element.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Dean Armstrong
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Dean Armstrong <deanarm@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-information-element.h ns-3.43/src/wifi/model/wifi-information-element.h
--- ns-3.42/src/wifi/model/wifi-information-element.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-information-element.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Dean Armstrong
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Dean Armstrong <deanarm@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac.cc ns-3.43/src/wifi/model/wifi-mac.cc
--- ns-3.42/src/wifi/model/wifi-mac.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -34,9 +23,11 @@
 #include "ns3/he-configuration.h"
 #include "ns3/ht-configuration.h"
 #include "ns3/log.h"
+#include "ns3/object-vector.h"
 #include "ns3/packet.h"
 #include "ns3/pointer.h"
 #include "ns3/shuffle.h"
+#include "ns3/socket.h"
 #include "ns3/string.h"
 #include "ns3/vht-configuration.h"
 
@@ -136,6 +127,18 @@
                           MakePointerAccessor(&WifiMac::GetBKQueue, &WifiMac::SetBkQueue),
                           MakePointerChecker<QosTxop>())
             .AddAttribute(
+                "ChannelAccessManagers",
+                "The Channel Access Manager(s) attached to this device.",
+                ObjectVectorValue(),
+                MakeObjectVectorAccessor(&WifiMac::GetChannelAccessManager, &WifiMac::GetNLinks),
+                MakeObjectVectorChecker<ChannelAccessManager>())
+            .AddAttribute(
+                "FrameExchangeManagers",
+                "The Frame Exchange Manager(s) attached to this device.",
+                ObjectVectorValue(),
+                MakeObjectVectorAccessor(&WifiMac::GetFrameExchangeManager, &WifiMac::GetNLinks),
+                MakeObjectVectorChecker<FrameExchangeManager>())
+            .AddAttribute(
                 "MpduBufferSize",
                 "The size (in number of MPDUs) of the buffer used for each BlockAck "
                 "agreement in which this node is a recipient. The provided value is "
@@ -356,7 +359,14 @@
                 "a SU frame or aggregated to PSDUs in the DL MU PPDU), a Basic Trigger Frame or "
                 "a BSRP Trigger Frame.",
                 MakeTraceSourceAccessor(&WifiMac::m_psduMapResponseTimeoutCallback),
-                "ns3::WifiMac::PsduMapResponseTimeoutCallback");
+                "ns3::WifiMac::PsduMapResponseTimeoutCallback")
+            .AddTraceSource("IcfDropReason",
+                            "An ICF is dropped by an EMLSR client for the given reason on the "
+                            "link with the given ID. This trace source is actually fed by the "
+                            "EHT Frame Exchange Manager through the m_icfDropCallback member "
+                            "variable.",
+                            MakeTraceSourceAccessor(&WifiMac::m_icfDropCallback),
+                            "ns3::WifiMac::IcfDropCallback");
     return tid;
 }
 
@@ -972,6 +982,11 @@
             MakeCallback(&DroppedMpduTracedCallback::operator(), &m_droppedMpduCallback));
         link->feManager->SetAckedMpduCallback(
             MakeCallback(&MpduTracedCallback::operator(), &m_ackedMpduCallback));
+        if (auto ehtFem = DynamicCast<EhtFrameExchangeManager>(link->feManager))
+        {
+            ehtFem->m_icfDropCallback.ConnectWithoutContext(
+                MakeCallback(&IcfDropTracedCallback::operator(), &m_icfDropCallback));
+        }
     }
 
     CompleteConfig();
@@ -1135,7 +1150,12 @@
 {
     NS_LOG_FUNCTION(this);
 
-    std::map<uint8_t, uint8_t> actualPairs;
+    // save the initial mapping between link IDs and link Entities
+    std::map<uint8_t, std::reference_wrapper<const LinkEntity>> origLinkRefMap;
+    for (const auto& [id, link] : m_links)
+    {
+        origLinkRefMap.insert_or_assign(id, *link.get());
+    }
 
     while (!links.empty())
     {
@@ -1159,8 +1179,6 @@
             auto [it, inserted] =
                 m_links.emplace(to, nullptr); // insert an element with key to if not present
             m_links[to].swap(linkToMove);     // to is the link to move now
-            actualPairs.emplace(from, to);
-            UpdateLinkId(to);
             links.erase(from);
             if (!linkToMove)
             {
@@ -1176,7 +1194,6 @@
             {
                 // no new position specified for 'to', use the current empty cell
                 m_links[empty].swap(linkToMove);
-                actualPairs.emplace(to, empty);
                 break;
             }
 
@@ -1191,6 +1208,22 @@
         m_linkIds.insert(id);
     }
 
+    std::map<uint8_t, uint8_t> actualPairs;
+    for (const auto& [from, ref] : origLinkRefMap)
+    {
+        // find the pointer in the current link map
+        for (const auto& [to, link] : m_links)
+        {
+            if (link.get() == &ref.get())
+            {
+                actualPairs[from] = to; // link 'from' became link 'to'
+                UpdateLinkId(to);
+                break;
+            }
+        }
+    }
+    NS_ASSERT_MSG(actualPairs.size() == m_links.size(), "Missing some link(s)");
+
     if (m_txop)
     {
         m_txop->SwapLinks(actualPairs);
@@ -1617,15 +1650,99 @@
     }
 }
 
+bool
+WifiMac::GetTxBlockedOnLink(AcIndex ac,
+                            const WifiContainerQueueId& queueId,
+                            uint8_t linkId,
+                            WifiQueueBlockedReason reason) const
+{
+    auto mask = m_scheduler->GetQueueLinkMask(ac, queueId, linkId);
+
+    if (!mask.has_value())
+    {
+        return true; // the link may have not been setup
+    }
+    if (reason == WifiQueueBlockedReason::REASONS_COUNT)
+    {
+        return mask->any();
+    }
+    return mask->test(static_cast<std::size_t>(reason));
+}
+
+void
+WifiMac::Enqueue(Ptr<Packet> packet, Mac48Address to)
+{
+    NS_LOG_FUNCTION(this << packet << to);
+    // We're sending this packet with a from address that is our own. We
+    // get that address from the lower MAC and make use of the
+    // from-spoofing Enqueue() method to avoid duplicated code.
+    Enqueue(packet, to, GetAddress());
+}
+
 void
 WifiMac::Enqueue(Ptr<Packet> packet, Mac48Address to, Mac48Address from)
 {
-    // We expect WifiMac subclasses which do support forwarding (e.g.,
-    // AP) to override this method. Therefore, we throw a fatal error if
-    // someone tries to invoke this method on a class which has not done
-    // this.
-    NS_FATAL_ERROR("This MAC entity (" << this << ", " << GetAddress()
-                                       << ") does not support Enqueue() with from address");
+    NS_LOG_FUNCTION(this << packet << to << from);
+
+    // If we are not a QoS AP then we definitely want to use AC_BE to
+    // transmit the packet. A TID of zero will map to AC_BE (through \c
+    // QosUtilsMapTidToAc()), so we use that as our default here.
+    uint8_t tid = 0;
+
+    SocketPriorityTag qos;
+    if (packet->RemovePacketTag(qos) && qos.GetPriority() < 8)
+    {
+        tid = qos.GetPriority();
+    }
+
+    Enqueue(packet, to, from, tid);
+}
+
+void
+WifiMac::Enqueue(Ptr<Packet> packet, Mac48Address to, Mac48Address from, uint8_t tid)
+{
+    NS_LOG_FUNCTION(this << packet << to << from << tid);
+
+    NS_ABORT_MSG_IF(!SupportsSendFrom() && from != GetAddress(),
+                    "This Mac does not support forwarding frames");
+
+    if (!CanForwardPacketsTo(to))
+    {
+        NotifyTxDrop(packet);
+        NotifyDropPacketToEnqueue(packet, to);
+        return;
+    }
+
+    WifiMacHeader hdr;
+
+    // For now, an AP that supports QoS does not support non-QoS
+    // associations, and vice versa. In future the AP model should
+    // support simultaneously associated QoS and non-QoS STAs, at which
+    // point there will need to be per-association QoS state maintained
+    // by the association state machine, and consulted here.
+    if (GetQosSupported())
+    {
+        hdr.SetType(WIFI_MAC_QOSDATA);
+        hdr.SetQosAckPolicy(WifiMacHeader::NORMAL_ACK);
+        hdr.SetQosNoEosp();
+        hdr.SetQosNoAmsdu();
+        hdr.SetQosTid(tid);
+        hdr.SetNoOrder(); // explicitly set to 0 for the time being since HT control field is not
+                          // yet implemented (set it to 1 when implemented)
+    }
+    else
+    {
+        hdr.SetType(WIFI_MAC_DATA);
+    }
+
+    // create an MPDU and pass it to subclasses to finalize MAC header
+    Enqueue(Create<WifiMpdu>(packet, hdr), to, from);
+}
+
+void
+WifiMac::NotifyDropPacketToEnqueue(Ptr<Packet> packet, Mac48Address to)
+{
+    NS_LOG_FUNCTION(this << packet << to);
 }
 
 void
@@ -1640,11 +1757,10 @@
 {
     NS_LOG_FUNCTION(this << *mpdu << linkId);
 
-    const WifiMacHeader* hdr = &mpdu->GetOriginal()->GetHeader();
-    Mac48Address to = hdr->GetAddr1();
-    Mac48Address from = hdr->GetAddr2();
-    auto myAddr = hdr->IsData() ? Mac48Address::ConvertFrom(GetDevice()->GetAddress())
-                                : GetFrameExchangeManager(linkId)->GetAddress();
+    const auto& hdr = mpdu->GetOriginal()->GetHeader();
+    const auto to = hdr.GetAddr1();
+    const auto myAddr = hdr.IsData() ? Mac48Address::ConvertFrom(GetDevice()->GetAddress())
+                                     : GetFrameExchangeManager(linkId)->GetAddress();
 
     // We don't know how to deal with any frame that is not addressed to
     // us (and odds are there is nothing sensible we could do anyway),
@@ -1657,105 +1773,13 @@
         return;
     }
 
-    // Nothing to do with (QoS) Null Data frames
-    if (hdr->IsData() && !hdr->HasData())
+    // Nothing to do with (QoS) Null Data frames or management frames
+    if ((hdr.IsData() && !hdr.HasData()) || hdr.IsMgt())
     {
         return;
     }
 
-    if (hdr->IsMgt() && hdr->IsAction())
-    {
-        // There is currently only any reason for Management Action
-        // frames to be flying about if we are a QoS STA.
-        NS_ASSERT(GetQosSupported());
-
-        auto& link = GetLink(linkId);
-        WifiActionHeader actionHdr;
-        Ptr<Packet> packet = mpdu->GetPacket()->Copy();
-        packet->RemoveHeader(actionHdr);
-
-        switch (actionHdr.GetCategory())
-        {
-        case WifiActionHeader::BLOCK_ACK:
-
-            switch (actionHdr.GetAction().blockAck)
-            {
-            case WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST: {
-                MgtAddBaRequestHeader reqHdr;
-                packet->RemoveHeader(reqHdr);
-
-                // We've received an ADDBA Request. Our policy here is
-                // to automatically accept it, so we get the ADDBA
-                // Response on it's way immediately.
-                NS_ASSERT(link.feManager);
-                auto htFem = DynamicCast<HtFrameExchangeManager>(link.feManager);
-                if (htFem)
-                {
-                    htFem->SendAddBaResponse(&reqHdr, from);
-                }
-                // This frame is now completely dealt with, so we're done.
-                return;
-            }
-            case WifiActionHeader::BLOCK_ACK_ADDBA_RESPONSE: {
-                MgtAddBaResponseHeader respHdr;
-                packet->RemoveHeader(respHdr);
-
-                // We've received an ADDBA Response. We assume that it
-                // indicates success after an ADDBA Request we have
-                // sent (we could, in principle, check this, but it
-                // seems a waste given the level of the current model)
-                // and act by locally establishing the agreement on
-                // the appropriate queue.
-                auto recipientMld = link.stationManager->GetMldAddress(from);
-                auto recipient = (recipientMld ? *recipientMld : from);
-                GetQosTxop(respHdr.GetTid())->GotAddBaResponse(respHdr, recipient);
-                auto htFem = DynamicCast<HtFrameExchangeManager>(link.feManager);
-                if (htFem)
-                {
-                    GetQosTxop(respHdr.GetTid())
-                        ->GetBaManager()
-                        ->SetBlockAckInactivityCallback(
-                            MakeCallback(&HtFrameExchangeManager::SendDelbaFrame, htFem));
-                }
-                // This frame is now completely dealt with, so we're done.
-                return;
-            }
-            case WifiActionHeader::BLOCK_ACK_DELBA: {
-                MgtDelBaHeader delBaHdr;
-                packet->RemoveHeader(delBaHdr);
-                auto recipientMld = link.stationManager->GetMldAddress(from);
-                auto recipient = (recipientMld ? *recipientMld : from);
-
-                if (delBaHdr.IsByOriginator())
-                {
-                    // This DELBA frame was sent by the originator, so
-                    // this means that an ingoing established
-                    // agreement exists in BlockAckManager and we need to
-                    // destroy it.
-                    GetQosTxop(delBaHdr.GetTid())
-                        ->GetBaManager()
-                        ->DestroyRecipientAgreement(recipient, delBaHdr.GetTid());
-                }
-                else
-                {
-                    // We must have been the originator. We need to
-                    // tell the correct queue that the agreement has
-                    // been torn down
-                    GetQosTxop(delBaHdr.GetTid())->GotDelBaFrame(&delBaHdr, recipient);
-                }
-                // This frame is now completely dealt with, so we're done.
-                return;
-            }
-            default:
-                NS_FATAL_ERROR("Unsupported Action field in Block Ack Action frame");
-                return;
-            }
-        default:
-            NS_FATAL_ERROR("Unsupported Action frame received");
-            return;
-        }
-    }
-    NS_FATAL_ERROR("Don't know how to handle frame (type=" << hdr->GetType());
+    NS_FATAL_ERROR("Don't know how to handle frame (type=" << hdr.GetType());
 }
 
 void
@@ -1807,7 +1831,7 @@
         // this is a single link device
         return m_address;
     }
-    // this is an MLD (hence the remote device is single link)
+    // this is an MLD (hence the remote device is single link or unknown)
     return DoGetLocalAddress(remoteAddr);
 }
 
@@ -2093,8 +2117,6 @@
 {
     NS_LOG_FUNCTION(this);
     ExtendedCapabilities capabilities;
-    capabilities.SetHtSupported(GetHtSupported(SINGLE_LINK_OP_ID));
-    capabilities.SetVhtSupported(GetVhtSupported(SINGLE_LINK_OP_ID));
     // TODO: to be completed
     return capabilities;
 }
@@ -2139,7 +2161,7 @@
         uint8_t nss = (mcs.GetMcsValue() / 8) + 1;
         NS_ASSERT(nss > 0 && nss < 5);
         uint64_t dataRate = mcs.GetDataRate(htConfiguration->Get40MHzOperationSupported() ? 40 : 20,
-                                            sgiSupported ? 400 : 800,
+                                            NanoSeconds(sgiSupported ? 400 : 800),
                                             nss);
         if (dataRate > maxSupportedRate)
         {
@@ -2216,7 +2238,7 @@
         capabilities.SetTxMcsMap(maxMcs, nss);
     }
     uint64_t maxSupportedRateLGI = 0; // in bit/s
-    uint16_t maxWidth = vhtConfiguration->Get160MHzOperationSupported() ? 160 : 80;
+    MHz_u maxWidth = vhtConfiguration->Get160MHzOperationSupported() ? 160 : 80;
     for (const auto& mcs : phy->GetMcsList(WIFI_MOD_CLASS_VHT))
     {
         if (!mcs.IsAllowed(maxWidth, 1))
@@ -2269,7 +2291,7 @@
     }
     capabilities.SetChannelWidthSet(channelWidthSet);
     capabilities.SetLdpcCodingInPayload(htConfiguration->GetLdpcSupported());
-    if (heConfiguration->GetGuardInterval() == NanoSeconds(800))
+    if (heConfiguration->GetGuardInterval().GetNanoSeconds() == 800)
     {
         // todo: We assume for now that if we support 800ns GI then 1600ns GI is supported as well
         // todo: Assuming reception support for both 1x HE LTF and 4x HE LTF 800 ns
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac.h ns-3.43/src/wifi/model/wifi-mac.h
--- ns-3.42/src/wifi/model/wifi-mac.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -58,6 +47,7 @@
 class OriginatorBlockAckAgreement;
 class RecipientBlockAckAgreement;
 class UniformRandomVariable;
+enum class WifiIcfDrop : uint8_t; // opaque enum declaration
 
 /**
  * \ingroup wifi
@@ -363,6 +353,22 @@
                                  const std::set<uint8_t>& linkIds);
 
     /**
+     * Check whether the transmission of the packets in the given container queue of the given
+     * Access Category are blocked on the given link for the given reason (if any).
+     *
+     * \param ac the given Access Category
+     * \param queueId the given container queue
+     * \param linkId the ID of the given link
+     * \param reason the reason to block transmissions (REASONS_COUNT indicate no reason)
+     * \return whether transmission is blocked
+     */
+    bool GetTxBlockedOnLink(
+        AcIndex ac,
+        const WifiContainerQueueId& queueId,
+        uint8_t linkId,
+        WifiQueueBlockedReason reason = WifiQueueBlockedReason::REASONS_COUNT) const;
+
+    /**
      * Return true if packets can be forwarded to the given destination,
      * false otherwise.
      *
@@ -370,27 +376,43 @@
      * \return whether packets can be forwarded to the given destination
      */
     virtual bool CanForwardPacketsTo(Mac48Address to) const = 0;
+
+    /**
+     * \param packet the packet to send.
+     * \param to the address to which the packet should be sent.
+     *
+     * The packet should be enqueued in a TX queue, and should be
+     * dequeued as soon as the DCF/EDCA function determines that
+     * access is granted to this MAC.
+     */
+    void Enqueue(Ptr<Packet> packet, Mac48Address to);
+
     /**
      * \param packet the packet to send.
      * \param to the address to which the packet should be sent.
      * \param from the address from which the packet should be sent.
      *
      * The packet should be enqueued in a TX queue, and should be
-     * dequeued as soon as the DCF function determines that
-     * access it granted to this MAC. The extra parameter "from" allows
+     * dequeued as soon as the DCF/EDCA function determines that
+     * access is granted to this MAC. The extra parameter "from" allows
      * this device to operate in a bridged mode, forwarding received
      * frames without altering the source address.
      */
-    virtual void Enqueue(Ptr<Packet> packet, Mac48Address to, Mac48Address from);
+    void Enqueue(Ptr<Packet> packet, Mac48Address to, Mac48Address from);
+
     /**
      * \param packet the packet to send.
      * \param to the address to which the packet should be sent.
+     * \param from the address from which the packet should be sent.
+     * \param tid the TID to use to send this packet
      *
      * The packet should be enqueued in a TX queue, and should be
-     * dequeued as soon as the DCF function determines that
-     * access it granted to this MAC.
+     * dequeued as soon as the DCF/EDCA function determines that
+     * access is granted to this MAC. The extra parameter "tid" allows
+     * to specify the TID to use in case QoS is supported.
      */
-    virtual void Enqueue(Ptr<Packet> packet, Mac48Address to) = 0;
+    void Enqueue(Ptr<Packet> packet, Mac48Address to, Mac48Address from, uint8_t tid);
+
     /**
      * \return if this MAC supports sending from arbitrary address.
      *
@@ -1115,6 +1137,24 @@
     void SetBkBlockAckInactivityTimeout(uint16_t timeout);
 
     /**
+     * \param mpdu the MPDU to send.
+     * \param to the address to which the packet should be sent.
+     * \param from the address from which the packet should be sent.
+     *
+     * Subclasses need to implement this method to finalize the MAC header of the MPDU
+     * (MAC addresses and ToDS/FromDS flags) and enqueue the MPDU in a TX queue.
+     */
+    virtual void Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from) = 0;
+
+    /**
+     * Allow subclasses to take actions when a packet to enqueue has been dropped.
+     *
+     * \param packet the dropped packet
+     * \param to the address to which the packet should have been sent
+     */
+    virtual void NotifyDropPacketToEnqueue(Ptr<Packet> packet, Mac48Address to);
+
+    /**
      * This Boolean is set \c true iff this WifiMac is to model
      * 802.11e/WMM style Quality of Service. It is exposed through the
      * attribute system.
@@ -1295,6 +1335,19 @@
      * This trace source is fed by a WifiTxTimer object.
      */
     PsduMapResponseTimeoutTracedCallback m_psduMapResponseTimeoutCallback;
+
+    /**
+     * TracedCallback signature for ICF drop events.
+     *
+     * \param reason the reason why the ICF was dropped by the EMLSR client
+     * \param linkId the ID of the link on which the ICF was dropped
+     */
+    typedef void (*IcfDropCallback)(WifiIcfDrop reason, uint8_t linkId);
+
+    /// TracedCallback for ICF drop events typedef
+    using IcfDropTracedCallback = TracedCallback<WifiIcfDrop, uint8_t>;
+
+    IcfDropTracedCallback m_icfDropCallback; //!< traced callback for ICF drop events
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-header.cc ns-3.43/src/wifi/model/wifi-mac-header.cc
--- ns-3.42/src/wifi/model/wifi-mac-header.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-header.cc	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -57,32 +46,12 @@
     SUBTYPE_CTL_END_ACK = 15
 };
 
-WifiMacHeader::WifiMacHeader()
-    : m_ctrlMoreFrag(0),
-      m_ctrlRetry(0),
-      m_ctrlPowerManagement(0),
-      m_ctrlMoreData(0),
-      m_ctrlWep(0),
-      m_ctrlOrder(0),
-      m_duration(0),
-      m_seqFrag(0),
-      m_seqSeq(0),
-      m_qosEosp(0),
-      m_qosAckPolicy(0), // Normal Ack
-      m_amsduPresent(0)
-{
-}
-
 WifiMacHeader::WifiMacHeader(WifiMacType type)
     : WifiMacHeader()
 {
     SetType(type);
 }
 
-WifiMacHeader::~WifiMacHeader()
-{
-}
-
 void
 WifiMacHeader::SetDsFrom()
 {
@@ -1175,15 +1144,15 @@
         os << " Duration/ID=" << m_duration << "us";
         if (!m_ctrlToDs && !m_ctrlFromDs)
         {
-            os << ", DA=" << m_addr1 << ", SA=" << m_addr2 << ", BSSID=" << m_addr3;
+            os << ", DA(RA)=" << m_addr1 << ", SA(TA)=" << m_addr2 << ", BSSID=" << m_addr3;
         }
         else if (!m_ctrlToDs && m_ctrlFromDs)
         {
-            os << ", DA=" << m_addr1 << ", SA=" << m_addr3 << ", BSSID=" << m_addr2;
+            os << ", DA(RA)=" << m_addr1 << ", SA=" << m_addr3 << ", BSSID(TA)=" << m_addr2;
         }
         else if (m_ctrlToDs && !m_ctrlFromDs)
         {
-            os << ", DA=" << m_addr3 << ", SA=" << m_addr2 << ", BSSID=" << m_addr1;
+            os << ", DA=" << m_addr3 << ", SA(TA)=" << m_addr2 << ", BSSID(RA)=" << m_addr1;
         }
         else if (m_ctrlToDs && m_ctrlFromDs)
         {
@@ -1196,6 +1165,26 @@
         }
         os << ", FragNumber=" << std::hex << (int)m_seqFrag << std::dec
            << ", SeqNumber=" << m_seqSeq;
+        if (IsQosData())
+        {
+            os << ", tid=" << +m_qosTid;
+            if (IsQosAmsdu())
+            {
+                os << ", A-MSDU";
+            }
+            if (IsQosNoAck())
+            {
+                os << ", ack=NoAck";
+            }
+            else if (IsQosAck())
+            {
+                os << ", ack=NormalAck";
+            }
+            else if (IsQosBlockAck())
+            {
+                os << ", ack=BlockAck";
+            }
+        }
         break;
     case WIFI_MAC_CTL_BACKREQ:
     case WIFI_MAC_CTL_BACKRESP:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-header.h ns-3.43/src/wifi/model/wifi-mac-header.h
--- ns-3.42/src/wifi/model/wifi-mac-header.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-header.h	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2006, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  * Author: Mirko Banchi <mk.banchi@gmail.com>
@@ -119,14 +108,13 @@
         ADDR4
     };
 
-    WifiMacHeader();
+    WifiMacHeader() = default;
     /**
      * Construct a MAC header of the given type
      *
      * \param type the MAC header type
      */
     WifiMacHeader(WifiMacType type);
-    ~WifiMacHeader() override;
 
     /**
      * \brief Get the type ID.
@@ -674,30 +662,30 @@
      */
     void PrintFrameControl(std::ostream& os) const;
 
-    uint8_t m_ctrlType;            ///< control type
-    uint8_t m_ctrlSubtype;         ///< control subtype
-    uint8_t m_ctrlToDs;            ///< control to DS
-    uint8_t m_ctrlFromDs;          ///< control from DS
-    uint8_t m_ctrlMoreFrag;        ///< control more fragments
-    uint8_t m_ctrlRetry;           ///< control retry
-    uint8_t m_ctrlPowerManagement; ///< control power management
-    uint8_t m_ctrlMoreData;        ///< control more data
-    uint8_t m_ctrlWep;             ///< control WEP
-    uint8_t m_ctrlOrder;  ///< control order (set to 1 for QoS Data and Management frames to signify
-                          ///< that HT/VHT/HE control field is present, knowing that the latter are
-                          ///< not implemented yet)
-    uint16_t m_duration;  ///< duration
-    Mac48Address m_addr1; ///< address 1
-    Mac48Address m_addr2; ///< address 2
-    Mac48Address m_addr3; ///< address 3
-    uint8_t m_seqFrag;    ///< sequence fragment
-    uint16_t m_seqSeq;    ///< sequence sequence
-    Mac48Address m_addr4; ///< address 4
-    uint8_t m_qosTid;     ///< QoS TID
-    uint8_t m_qosEosp;    ///< QoS EOSP
-    uint8_t m_qosAckPolicy; ///< QoS Ack policy
-    uint8_t m_amsduPresent; ///< A-MSDU present
-    uint8_t m_qosStuff;     ///< QoS stuff
+    uint8_t m_ctrlType{0};            ///< control type
+    uint8_t m_ctrlSubtype{0};         ///< control subtype
+    uint8_t m_ctrlToDs{0};            ///< control to DS
+    uint8_t m_ctrlFromDs{0};          ///< control from DS
+    uint8_t m_ctrlMoreFrag{0};        ///< control more fragments
+    uint8_t m_ctrlRetry{0};           ///< control retry
+    uint8_t m_ctrlPowerManagement{0}; ///< control power management
+    uint8_t m_ctrlMoreData{0};        ///< control more data
+    uint8_t m_ctrlWep{0};             ///< control WEP
+    uint8_t m_ctrlOrder{0}; ///< control order (set to 1 for QoS Data and Management frames to
+                            ///< signify that HT/VHT/HE control field is present, knowing that the
+                            ///< latter are not implemented yet)
+    uint16_t m_duration{0}; ///< duration
+    Mac48Address m_addr1{}; ///< address 1
+    Mac48Address m_addr2{}; ///< address 2
+    Mac48Address m_addr3{}; ///< address 3
+    uint8_t m_seqFrag{0};   ///< sequence fragment
+    uint16_t m_seqSeq{0};   ///< sequence sequence
+    Mac48Address m_addr4{}; ///< address 4
+    uint8_t m_qosTid{0};    ///< QoS TID
+    uint8_t m_qosEosp{0};   ///< QoS EOSP
+    uint8_t m_qosAckPolicy{0}; ///< QoS Ack policy
+    uint8_t m_amsduPresent{0}; ///< A-MSDU present
+    uint8_t m_qosStuff{0};     ///< QoS stuff
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-queue.cc ns-3.43/src/wifi/model/wifi-mac-queue.cc
--- ns-3.42/src/wifi/model/wifi-mac-queue.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-queue.cc	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-queue-container.cc ns-3.43/src/wifi/model/wifi-mac-queue-container.cc
--- ns-3.42/src/wifi/model/wifi-mac-queue-container.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-queue-container.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-queue-container.h ns-3.43/src/wifi/model/wifi-mac-queue-container.h
--- ns-3.42/src/wifi/model/wifi-mac-queue-container.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-queue-container.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-queue-elem.cc ns-3.43/src/wifi/model/wifi-mac-queue-elem.cc
--- ns-3.42/src/wifi/model/wifi-mac-queue-elem.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-queue-elem.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-queue-elem.h ns-3.43/src/wifi/model/wifi-mac-queue-elem.h
--- ns-3.42/src/wifi/model/wifi-mac-queue-elem.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-queue-elem.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-queue.h ns-3.43/src/wifi/model/wifi-mac-queue.h
--- ns-3.42/src/wifi/model/wifi-mac-queue.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-queue.h	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-queue-scheduler.cc ns-3.43/src/wifi/model/wifi-mac-queue-scheduler.cc
--- ns-3.42/src/wifi/model/wifi-mac-queue-scheduler.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-queue-scheduler.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-queue-scheduler.h ns-3.43/src/wifi/model/wifi-mac-queue-scheduler.h
--- ns-3.42/src/wifi/model/wifi-mac-queue-scheduler.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-queue-scheduler.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-queue-scheduler-impl.h ns-3.43/src/wifi/model/wifi-mac-queue-scheduler-impl.h
--- ns-3.42/src/wifi/model/wifi-mac-queue-scheduler-impl.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-queue-scheduler-impl.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -366,7 +355,9 @@
 
         // this assert checks that association (ML setup) has been established
         // between sender and receiver (unless the receiver is the broadcast address)
-        NS_ASSERT_MSG(GetMac()->CanForwardPacketsTo(rxAddr), "Cannot forward frame to " << rxAddr);
+        NS_ASSERT_MSG(GetMac()->CanForwardPacketsTo(rxAddr),
+                      "Cannot forward frame to " << rxAddr
+                                                 << "; check that the receiver is associated");
         // we have to include all the links in case of broadcast frame (we are an AP)
         // and the links that have been setup with the receiver in case of unicast frame
         for (const auto linkId : GetMac()->GetLinkIds())
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-trailer.cc ns-3.43/src/wifi/model/wifi-mac-trailer.cc
--- ns-3.42/src/wifi/model/wifi-mac-trailer.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-trailer.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mac-trailer.h ns-3.43/src/wifi/model/wifi-mac-trailer.h
--- ns-3.42/src/wifi/model/wifi-mac-trailer.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mac-trailer.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mgt-header.h ns-3.43/src/wifi/model/wifi-mgt-header.h
--- ns-3.42/src/wifi/model/wifi-mgt-header.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mgt-header.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mode.cc ns-3.43/src/wifi/model/wifi-mode.cc
--- ns-3.42/src/wifi/model/wifi-mode.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mode.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -65,7 +54,7 @@
 }
 
 bool
-WifiMode::IsAllowed(uint16_t channelWidth, uint8_t nss) const
+WifiMode::IsAllowed(MHz_u channelWidth, uint8_t nss) const
 {
     WifiTxVector txVector;
     txVector.SetMode(WifiMode(m_uid));
@@ -82,13 +71,13 @@
 }
 
 uint64_t
-WifiMode::GetPhyRate(uint16_t channelWidth) const
+WifiMode::GetPhyRate(MHz_u channelWidth) const
 {
-    return GetPhyRate(channelWidth, 800, 1);
+    return GetPhyRate(channelWidth, NanoSeconds(800), 1);
 }
 
 uint64_t
-WifiMode::GetPhyRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
+WifiMode::GetPhyRate(MHz_u channelWidth, Time guardInterval, uint8_t nss) const
 {
     WifiTxVector txVector;
     txVector.SetMode(WifiMode(m_uid));
@@ -106,9 +95,9 @@
 }
 
 uint64_t
-WifiMode::GetDataRate(uint16_t channelWidth) const
+WifiMode::GetDataRate(MHz_u channelWidth) const
 {
-    return GetDataRate(channelWidth, 800, 1);
+    return GetDataRate(channelWidth, NanoSeconds(800), 1);
 }
 
 uint64_t
@@ -119,7 +108,7 @@
 }
 
 uint64_t
-WifiMode::GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const
+WifiMode::GetDataRate(MHz_u channelWidth, Time guardInterval, uint8_t nss) const
 {
     NS_ASSERT(nss <= 8);
     WifiTxVector txVector;
@@ -144,7 +133,7 @@
     return item->GetConstellationSizeCallback();
 }
 
-std::string
+const std::string&
 WifiMode::GetUniqueName() const
 {
     // needed for ostream printing of the invalid mode
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mode.h ns-3.43/src/wifi/model/wifi-mode.h
--- ns-3.42/src/wifi/model/wifi-mode.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mode.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -53,10 +42,10 @@
     /**
      * \returns true if this <MCS, channel width, NSS> combination is allowed, false otherwise.
      *
-     * \param channelWidth the considered channel width in MHz
+     * \param channelWidth the considered channel width
      * \param nss the considered number of streams
      */
-    bool IsAllowed(uint16_t channelWidth, uint8_t nss) const;
+    bool IsAllowed(MHz_u channelWidth, uint8_t nss) const;
     /**
      * \returns true if this TXVECTOR combination is allowed, false otherwise.
      *
@@ -65,8 +54,8 @@
     bool IsAllowed(const WifiTxVector& txVector) const;
     /**
      *
-     * \param channelWidth the considered channel width in MHz
-     * \param guardInterval the considered guard interval duration in nanoseconds
+     * \param channelWidth the considered channel width
+     * \param guardInterval the considered guard interval duration
      * \param nss the considered number of streams
      *
      * \returns the physical bit rate of this signal in bps.
@@ -74,7 +63,7 @@
      * If a transmission mode uses 1/2 FEC, and if its
      * data rate is 3.25Mbps, the PHY rate is 6.5Mbps
      */
-    uint64_t GetPhyRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const;
+    uint64_t GetPhyRate(MHz_u channelWidth, Time guardInterval, uint8_t nss) const;
     /**
      * \param txVector the const WifiTxVector& of the signal
      * \param staId the station ID for MU (unused if SU)
@@ -86,20 +75,20 @@
      */
     uint64_t GetPhyRate(const WifiTxVector& txVector, uint16_t staId = SU_STA_ID) const;
     /**
-     * \param channelWidth the considered channel width in MHz
+     * \param channelWidth the considered channel width
      *
      * \returns the physical bit rate of this non-HT signal.
      */
-    uint64_t GetPhyRate(uint16_t channelWidth) const;
+    uint64_t GetPhyRate(MHz_u channelWidth) const;
     /**
      *
-     * \param channelWidth the considered channel width in MHz
-     * \param guardInterval the considered guard interval duration in nanoseconds
+     * \param channelWidth the considered channel width
+     * \param guardInterval the considered guard interval duration
      * \param nss the considered number of streams
      *
      * \returns the data bit rate of this signal in bps.
      */
-    uint64_t GetDataRate(uint16_t channelWidth, uint16_t guardInterval, uint8_t nss) const;
+    uint64_t GetDataRate(MHz_u channelWidth, Time guardInterval, uint8_t nss) const;
     /**
      * \param txVector the const WifiTxVector& of the signal
      * \param staId the station ID for MU (unused if SU)
@@ -108,11 +97,11 @@
      */
     uint64_t GetDataRate(const WifiTxVector& txVector, uint16_t staId = SU_STA_ID) const;
     /**
-     * \param channelWidth the considered channel width in MHz
+     * \param channelWidth the considered channel width
      *
      * \returns the data bit rate of this non-HT.
      */
-    uint64_t GetDataRate(uint16_t channelWidth) const;
+    uint64_t GetDataRate(MHz_u channelWidth) const;
 
     /**
      * \returns the coding rate of this transmission mode
@@ -130,7 +119,7 @@
      * \returns a human-readable representation of this WifiMode
      * instance.
      */
-    std::string GetUniqueName() const;
+    const std::string& GetUniqueName() const;
     /**
      * \returns true if this mode is a mandatory mode, false
      *          otherwise.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mpdu.cc ns-3.43/src/wifi/model/wifi-mpdu.cc
--- ns-3.42/src/wifi/model/wifi-mpdu.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mpdu.cc	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
@@ -75,8 +64,6 @@
     NS_LOG_FUNCTION(this << +linkId);
     NS_ABORT_MSG_IF(!std::holds_alternative<OriginalInfo>(m_instanceInfo),
                     "This method can only be called on the original version of the MPDU");
-    NS_ABORT_MSG_IF(!IsQueued(),
-                    "This method can only be called if the MPDU is stored in a MAC queue");
 
     auto alias = Ptr<WifiMpdu>(new WifiMpdu, false);
 
@@ -383,26 +370,7 @@
 void
 WifiMpdu::Print(std::ostream& os) const
 {
-    os << m_header.GetTypeString() << ", payloadSize=" << GetPacketSize()
-       << ", to=" << m_header.GetAddr1() << ", seqN=" << m_header.GetSequenceNumber()
-       << ", duration/ID=" << m_header.GetDuration();
-    if (m_header.IsQosData())
-    {
-        os << ", tid=" << +m_header.GetQosTid();
-        if (m_header.IsQosNoAck())
-        {
-            os << ", ack=NoAck";
-        }
-        else if (m_header.IsQosAck())
-        {
-            os << ", ack=NormalAck";
-        }
-        else if (m_header.IsQosBlockAck())
-        {
-            os << ", ack=BlockAck";
-        }
-    }
-    os << ", queued=" << IsQueued();
+    os << m_header << ", payloadSize=" << GetPacketSize() << ", queued=" << IsQueued();
     if (IsQueued())
     {
         os << ", residualLifetime=" << (GetExpiryTime() - Simulator::Now()).As(Time::US)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mpdu.h ns-3.43/src/wifi/model/wifi-mpdu.h
--- ns-3.42/src/wifi/model/wifi-mpdu.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mpdu.h	2024-10-09 16:41:10.128656900 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005, 2009 INRIA
  * Copyright (c) 2009 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Mirko Banchi <mk.banchi@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-mpdu-type.h ns-3.43/src/wifi/model/wifi-mpdu-type.h
--- ns-3.42/src/wifi/model/wifi-mpdu-type.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-mpdu-type.h	1969-12-31 16:00:00.000000000 -0800
@@ -1,48 +0,0 @@
-/*
- * Copyright (c) 2018
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
- * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
- */
-
-#ifndef WIFI_MPDU_TYPE_H
-#define WIFI_MPDU_TYPE_H
-
-namespace ns3
-{
-
-/**
- * \ingroup wifi
- * The type of an MPDU.
- */
-enum MpduType
-{
-    /** The MPDU is not part of an A-MPDU */
-    NORMAL_MPDU,
-    /** The MPDU is a single MPDU */
-    SINGLE_MPDU,
-    /** The MPDU is the first aggregate in an A-MPDU with multiple MPDUs, but is not the last
-     * aggregate */
-    FIRST_MPDU_IN_AGGREGATE,
-    /** The MPDU is part of an A-MPDU with multiple MPDUs, but is neither the first nor the last
-     * aggregate */
-    MIDDLE_MPDU_IN_AGGREGATE,
-    /** The MPDU is the last aggregate in an A-MPDU with multiple MPDUs */
-    LAST_MPDU_IN_AGGREGATE
-};
-
-} // namespace ns3
-
-#endif /* WIFI_MPDU_TYPE_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-net-device.cc ns-3.43/src/wifi/model/wifi-net-device.cc
--- ns-3.42/src/wifi/model/wifi-net-device.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-net-device.cc	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-net-device.h ns-3.43/src/wifi/model/wifi-net-device.h
--- ns-3.42/src/wifi/model/wifi-net-device.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-net-device.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-opt-field.h ns-3.43/src/wifi/model/wifi-opt-field.h
--- ns-3.42/src/wifi/model/wifi-opt-field.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-opt-field.h	2024-10-09 16:41:10.128656900 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy-band.h ns-3.43/src/wifi/model/wifi-phy-band.h
--- ns-3.42/src/wifi/model/wifi-phy-band.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy-band.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy.cc ns-3.43/src/wifi/model/wifi-phy.cc
--- ns-3.42/src/wifi/model/wifi-phy.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -30,6 +19,7 @@
 #include "wifi-radio-energy-model.h"
 #include "wifi-utils.h"
 
+#include "ns3/attribute-container.h"
 #include "ns3/channel.h"
 #include "ns3/dsss-phy.h"
 #include "ns3/eht-phy.h" //also includes OFDM, HT, VHT and HE
@@ -46,6 +36,7 @@
 #include "ns3/vht-configuration.h"
 
 #include <algorithm>
+#include <numeric>
 
 #undef NS_LOG_APPEND_CONTEXT
 #define NS_LOG_APPEND_CONTEXT                                                                      \
@@ -80,9 +71,11 @@
                           MakePointerChecker<Channel>())
             .AddAttribute(
                 "ChannelSettings",
-                "Tuple {channel number, channel width (MHz), PHY band, primary20 index} "
-                "describing the settings of the operating channel. The primary20 index is "
-                "the index of the primary 20 MHz channel within the operating channel "
+                "A vector of tuple {channel number, channel width (MHz), PHY band, primary20 "
+                "index} "
+                "describing the settings of the operating channel for each segment. "
+                "The primary20 index (only the value set for the first segment is used) "
+                "is the index of the primary 20 MHz channel within the operating channel "
                 "(0 indicates the 20 MHz subchannel with the lowest center frequency) and "
                 "is only valid if the width of the operating channel is a multiple of 20 MHz. "
                 "If the standard for this object has not been set yet, the value of this "
@@ -91,21 +84,21 @@
                 "band for the configured standard is used. If the channel width and the "
                 "channel number are both 0, the default channel width for the configured "
                 "standard and band are used. If the channel number is 0, the default "
-                "channel number for the configured standard, band and channel width is used."
+                "channel number for the configured standard, band and channel width is used. "
                 "Note that the channel width can be left unspecified (0) if the channel "
                 "number uniquely identify a frequency channel for the given standard and band.",
                 StringValue("{0, 0, BAND_UNSPECIFIED, 0}"),
-                MakeTupleAccessor<UintegerValue,
-                                  UintegerValue,
-                                  EnumValue<WifiPhyBand>,
-                                  UintegerValue>((void(WifiPhy::*)(const ChannelTuple&)) &
-                                                 WifiPhy::SetOperatingChannel),
-                MakeTupleChecker<UintegerValue,
-                                 UintegerValue,
-                                 EnumValue<WifiPhyBand>,
-                                 UintegerValue>(
+                MakeAttributeContainerAccessor<
+                    TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>,
+                    ';'>((void(WifiPhy::*)(const ChannelSegments&)) & WifiPhy::SetOperatingChannel),
+                MakeAttributeContainerChecker<
+                    TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>,
+                    ';'>(MakeTupleChecker<UintegerValue,
+                                          UintegerValue,
+                                          EnumValue<WifiPhyBand>,
+                                          UintegerValue>(
                     MakeUintegerChecker<uint8_t>(0, 233),
-                    MakeUintegerChecker<uint16_t>(0, 160),
+                    MakeUintegerChecker<MHz_u>(0, 160),
                     MakeEnumChecker(WifiPhyBand::WIFI_PHY_BAND_2_4GHZ,
                                     "BAND_2_4GHZ",
                                     WifiPhyBand::WIFI_PHY_BAND_5GHZ,
@@ -114,13 +107,13 @@
                                     "BAND_6GHZ",
                                     WifiPhyBand::WIFI_PHY_BAND_UNSPECIFIED,
                                     "BAND_UNSPECIFIED"),
-                    MakeUintegerChecker<uint8_t>(0, 7)))
+                    MakeUintegerChecker<uint8_t>(0, 7))))
             .AddAttribute("Frequency",
                           "The center frequency (MHz) of the current operating channel.",
                           TypeId::ATTR_GET,
                           UintegerValue(0),
                           MakeUintegerAccessor(&WifiPhy::GetFrequency),
-                          MakeUintegerChecker<uint16_t>())
+                          MakeUintegerChecker<int64_t>())
             .AddAttribute("ChannelNumber",
                           "The channel number of the current operating channel.",
                           TypeId::ATTR_GET,
@@ -129,11 +122,12 @@
                           MakeUintegerChecker<uint8_t>(0, 233))
             .AddAttribute(
                 "ChannelWidth",
-                "The width in MHz of the current operating channel (5, 10, 20, 22, 40, 80 or 160).",
+                "The width in MHz of the current operating channel (5, 10, 20, 22, 40, 80 or 160). "
+                "If 80+80MHz is used, this corresponds to the total channel width, hence 160 MHz.",
                 TypeId::ATTR_GET,
                 UintegerValue(0),
                 MakeUintegerAccessor(&WifiPhy::GetChannelWidth),
-                MakeUintegerChecker<uint16_t>(5, 160))
+                MakeUintegerChecker<MHz_u>(5, 160))
             .AddAttribute(
                 "Primary20MHzIndex",
                 "The index of the primary 20 MHz channel within the current operating channel "
@@ -154,7 +148,7 @@
                 "scaled to match the width of the received signal.",
                 DoubleValue(-101.0),
                 MakeDoubleAccessor(&WifiPhy::SetRxSensitivity, &WifiPhy::GetRxSensitivity),
-                MakeDoubleChecker<double>())
+                MakeDoubleChecker<dBm_u>())
             .AddAttribute(
                 "CcaEdThreshold",
                 "The energy of all received signals should be higher than "
@@ -162,7 +156,7 @@
                 "to declare CCA BUSY state.",
                 DoubleValue(-62.0),
                 MakeDoubleAccessor(&WifiPhy::SetCcaEdThreshold, &WifiPhy::GetCcaEdThreshold),
-                MakeDoubleChecker<double>())
+                MakeDoubleChecker<dBm_u>())
             .AddAttribute("CcaSensitivity",
                           "The energy of a received wifi signal should be higher than "
                           "this threshold (dBm) in the primary channel to allow the PHY layer "
@@ -170,17 +164,17 @@
                           DoubleValue(-82.0),
                           MakeDoubleAccessor(&WifiPhy::SetCcaSensitivityThreshold,
                                              &WifiPhy::GetCcaSensitivityThreshold),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<dBm_u>())
             .AddAttribute("TxGain",
                           "Transmission gain (dB).",
                           DoubleValue(0.0),
                           MakeDoubleAccessor(&WifiPhy::SetTxGain, &WifiPhy::GetTxGain),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<dB_u>())
             .AddAttribute("RxGain",
                           "Reception gain (dB).",
                           DoubleValue(0.0),
                           MakeDoubleAccessor(&WifiPhy::SetRxGain, &WifiPhy::GetRxGain),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<dB_u>())
             .AddAttribute("TxPowerLevels",
                           "Number of transmission power levels available between "
                           "TxPowerStart and TxPowerEnd included.",
@@ -191,12 +185,12 @@
                           "Maximum available transmission level (dBm).",
                           DoubleValue(16.0206),
                           MakeDoubleAccessor(&WifiPhy::SetTxPowerEnd, &WifiPhy::GetTxPowerEnd),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<dBm_u>())
             .AddAttribute("TxPowerStart",
                           "Minimum available transmission level (dBm).",
                           DoubleValue(16.0206),
                           MakeDoubleAccessor(&WifiPhy::SetTxPowerStart, &WifiPhy::GetTxPowerStart),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<dBm_u>())
             .AddAttribute(
                 "RxNoiseFigure",
                 "Loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver."
@@ -207,7 +201,7 @@
                 " are connected to sources at the standard noise temperature T0 (usually 290 K)\".",
                 DoubleValue(7),
                 MakeDoubleAccessor(&WifiPhy::SetRxNoiseFigure),
-                MakeDoubleChecker<double>())
+                MakeDoubleChecker<dB_u>())
             .AddAttribute("State",
                           "The state of the PHY layer.",
                           PointerValue(),
@@ -298,7 +292,13 @@
                           "limit (in dBm/MHz) set by regulators.",
                           DoubleValue(100.0), // set to a high value so as to have no effect
                           MakeDoubleAccessor(&WifiPhy::m_powerDensityLimit),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<dBm_per_MHz_u>())
+            .AddAttribute("NotifyMacHdrRxEnd",
+                          "Whether the PHY is capable of notifying the MAC about the end of "
+                          "the reception of the MAC header of every MPDU.",
+                          BooleanValue(false),
+                          MakeBooleanAccessor(&WifiPhy::m_notifyRxMacHeaderEnd),
+                          MakeBooleanChecker())
             .AddTraceSource("PhyTxBegin",
                             "Trace source indicating a packet "
                             "has begun transmitting over the channel medium",
@@ -330,6 +330,11 @@
                             "payload of a PPDU has begun",
                             MakeTraceSourceAccessor(&WifiPhy::m_phyRxPayloadBeginTrace),
                             "ns3::WifiPhy::PhyRxPayloadBeginTracedCallback")
+            .AddTraceSource("PhyRxMacHeaderEnd",
+                            "Trace source indicating the MAC header of an MPDU has been "
+                            "completely received.",
+                            MakeTraceSourceAccessor(&WifiPhy::m_phyRxMacHeaderEndTrace),
+                            "ns3::WifiPhy::PhyRxMacHeaderEndTracedCallback")
             .AddTraceSource("PhyRxEnd",
                             "Trace source indicating a packet "
                             "has been completely received from the channel medium "
@@ -479,6 +484,11 @@
 WifiPhy::RegisterListener(const std::shared_ptr<WifiPhyListener>& listener)
 {
     m_state->RegisterListener(listener);
+    if (IsInitialized())
+    {
+        // provide CCA busy information upon registering a PHY listener
+        SwitchMaybeToCcaBusy(nullptr);
+    }
 }
 
 void
@@ -494,79 +504,79 @@
 }
 
 void
-WifiPhy::SetRxSensitivity(double threshold)
+WifiPhy::SetRxSensitivity(dBm_u threshold)
 {
     NS_LOG_FUNCTION(this << threshold);
-    m_rxSensitivityDbm = threshold;
+    m_rxSensitivity = threshold;
 }
 
-double
+dBm_u
 WifiPhy::GetRxSensitivity() const
 {
-    return m_rxSensitivityDbm;
+    return m_rxSensitivity;
 }
 
 void
-WifiPhy::SetCcaEdThreshold(double threshold)
+WifiPhy::SetCcaEdThreshold(dBm_u threshold)
 {
     NS_LOG_FUNCTION(this << threshold);
-    m_ccaEdThresholdW = DbmToW(threshold);
+    m_ccaEdThreshold = threshold;
 }
 
-double
+dBm_u
 WifiPhy::GetCcaEdThreshold() const
 {
-    return WToDbm(m_ccaEdThresholdW);
+    return m_ccaEdThreshold;
 }
 
 void
-WifiPhy::SetCcaSensitivityThreshold(double threshold)
+WifiPhy::SetCcaSensitivityThreshold(dBm_u threshold)
 {
     NS_LOG_FUNCTION(this << threshold);
-    m_ccaSensitivityThresholdW = DbmToW(threshold);
+    m_ccaSensitivityThreshold = threshold;
 }
 
-double
+dBm_u
 WifiPhy::GetCcaSensitivityThreshold() const
 {
-    return WToDbm(m_ccaSensitivityThresholdW);
+    return m_ccaSensitivityThreshold;
 }
 
 void
-WifiPhy::SetRxNoiseFigure(double noiseFigureDb)
+WifiPhy::SetRxNoiseFigure(dB_u noiseFigure)
 {
-    NS_LOG_FUNCTION(this << noiseFigureDb);
+    NS_LOG_FUNCTION(this << noiseFigure);
     if (m_interference)
     {
-        m_interference->SetNoiseFigure(DbToRatio(noiseFigureDb));
+        m_interference->SetNoiseFigure(DbToRatio(noiseFigure));
     }
-    m_noiseFigureDb = noiseFigureDb;
+    m_noiseFigure = noiseFigure;
 }
 
 void
-WifiPhy::SetTxPowerStart(double start)
+WifiPhy::SetTxPowerStart(dBm_u start)
 {
     NS_LOG_FUNCTION(this << start);
-    m_txPowerBaseDbm = start;
+    m_txPowerBase = start;
 }
 
-double
+dBm_u
 WifiPhy::GetTxPowerStart() const
 {
-    return m_txPowerBaseDbm;
+    return m_txPowerBase;
 }
 
 void
-WifiPhy::SetTxPowerEnd(double end)
+WifiPhy::SetTxPowerEnd(dBm_u end)
 {
     NS_LOG_FUNCTION(this << end);
-    m_txPowerEndDbm = end;
+    m_txPowerEnd = end;
 }
 
-double
+dBm_u
 WifiPhy::GetTxPowerEnd() const
 {
-    return m_txPowerEndDbm;
+    return m_txPowerEnd;
 }
 
 void
@@ -583,29 +593,29 @@
 }
 
 void
-WifiPhy::SetTxGain(double gain)
+WifiPhy::SetTxGain(dB_u gain)
 {
     NS_LOG_FUNCTION(this << gain);
-    m_txGainDb = gain;
+    m_txGain = gain;
 }
 
-double
+dB_u
 WifiPhy::GetTxGain() const
 {
-    return m_txGainDb;
+    return m_txGain;
 }
 
 void
-WifiPhy::SetRxGain(double gain)
+WifiPhy::SetRxGain(dB_u gain)
 {
     NS_LOG_FUNCTION(this << gain);
-    m_rxGainDb = gain;
+    m_rxGain = gain;
 }
 
-double
+dB_u
 WifiPhy::GetRxGain() const
 {
-    return m_rxGainDb;
+    return m_rxGain;
 }
 
 void
@@ -663,7 +673,7 @@
 {
     NS_LOG_FUNCTION(this << helper);
     m_interference = helper;
-    m_interference->SetNoiseFigure(DbToRatio(m_noiseFigureDb));
+    m_interference->SetNoiseFigure(DbToRatio(m_noiseFigure));
     m_interference->SetNumberOfReceiveAntennas(m_numberOfAntennas);
 }
 
@@ -700,21 +710,21 @@
     m_wifiRadioEnergyModel = wifiRadioEnergyModel;
 }
 
-double
-WifiPhy::GetPowerDbm(uint8_t power) const
+dBm_u
+WifiPhy::GetPower(uint8_t powerLevel) const
 {
-    NS_ASSERT(m_txPowerBaseDbm <= m_txPowerEndDbm);
+    NS_ASSERT(m_txPowerBase <= m_txPowerEnd);
     NS_ASSERT(m_nTxPower > 0);
-    double dbm;
+    dBm_u dbm;
     if (m_nTxPower > 1)
     {
-        dbm = m_txPowerBaseDbm + power * (m_txPowerEndDbm - m_txPowerBaseDbm) / (m_nTxPower - 1);
+        dbm = m_txPowerBase + powerLevel * (m_txPowerEnd - m_txPowerBase) / (m_nTxPower - 1);
     }
     else
     {
-        NS_ASSERT_MSG(m_txPowerBaseDbm == m_txPowerEndDbm,
+        NS_ASSERT_MSG(m_txPowerBase == m_txPowerEnd,
                       "cannot have TxPowerEnd != TxPowerStart with TxPowerLevels == 1");
-        dbm = m_txPowerBaseDbm;
+        dbm = m_txPowerBase;
     }
     return dbm;
 }
@@ -1067,7 +1077,7 @@
     return m_operatingChannel;
 }
 
-uint16_t
+MHz_u
 WifiPhy::GetFrequency() const
 {
     return m_operatingChannel.GetFrequency();
@@ -1079,10 +1089,10 @@
     return m_operatingChannel.GetNumber();
 }
 
-uint16_t
+MHz_u
 WifiPhy::GetChannelWidth() const
 {
-    return m_operatingChannel.GetWidth();
+    return m_operatingChannel.GetTotalWidth();
 }
 
 uint8_t
@@ -1103,8 +1113,8 @@
     return m_fixedPhyBand;
 }
 
-uint16_t
-WifiPhy::GetTxBandwidth(WifiMode mode, uint16_t maxAllowedWidth) const
+MHz_u
+WifiPhy::GetTxBandwidth(WifiMode mode, MHz_u maxAllowedWidth) const
 {
     auto modulation = mode.GetModulationClass();
     if (modulation == WIFI_MOD_CLASS_DSSS || modulation == WIFI_MOD_CLASS_HR_DSSS)
@@ -1119,22 +1129,32 @@
 WifiPhy::SetOperatingChannel(const WifiPhyOperatingChannel& channel)
 {
     NS_LOG_FUNCTION(this << channel);
-    WifiPhy::ChannelTuple tuple(channel.GetNumber(),
-                                channel.GetWidth(),
-                                channel.GetPhyBand(),
-                                channel.GetPrimaryChannelIndex(20));
-    SetOperatingChannel(tuple);
+    ChannelSegments segments{};
+    for (std::size_t segmentId = 0; segmentId < channel.GetNSegments(); ++segmentId)
+    {
+        segments.emplace_back(channel.GetNumber(segmentId),
+                              channel.GetWidth(segmentId),
+                              channel.GetPhyBand(),
+                              channel.GetPrimaryChannelIndex(20));
+    }
+    SetOperatingChannel(segments);
 }
 
 void
-WifiPhy::SetOperatingChannel(const ChannelTuple& channelTuple)
+WifiPhy::SetOperatingChannel(const ChannelTuple& tuple)
 {
-    // the generic operator<< for tuples does not give a pretty result
-    NS_LOG_FUNCTION(this << +std::get<0>(channelTuple) << std::get<1>(channelTuple)
-                         << static_cast<WifiPhyBand>(std::get<2>(channelTuple))
-                         << +std::get<3>(channelTuple));
+    SetOperatingChannel(ChannelSegments{tuple});
+}
 
-    m_channelSettings = channelTuple;
+void
+WifiPhy::SetOperatingChannel(const ChannelSegments& channelSegments)
+{
+    NS_LOG_FUNCTION(this << +std::get<0>(channelSegments.front())
+                         << std::get<1>(channelSegments.front())
+                         << static_cast<WifiPhyBand>(std::get<2>(channelSegments.front()))
+                         << +std::get<3>(channelSegments.front()));
+
+    m_channelSettings = channelSegments;
 
     if (m_standard == WIFI_STANDARD_UNSPECIFIED)
     {
@@ -1153,8 +1173,8 @@
         if (delay.value().IsStrictlyPositive())
         {
             // switching channel has been postponed
-            void (WifiPhy::*fp)(const ChannelTuple&) = &WifiPhy::SetOperatingChannel;
-            Simulator::Schedule(delay.value(), fp, this, channelTuple);
+            void (WifiPhy::*fp)(const ChannelSegments&) = &WifiPhy::SetOperatingChannel;
+            Simulator::Schedule(delay.value(), fp, this, channelSegments);
             return;
         }
     }
@@ -1173,7 +1193,6 @@
         return Seconds(0);
     }
 
-    NS_ASSERT(!IsStateSwitching());
     std::optional<Time> delay;
     switch (m_state->GetState())
     {
@@ -1191,6 +1210,9 @@
         Reset();
         delay = Seconds(0);
         break;
+    case WifiPhyState::SWITCHING:
+        delay = Seconds(0);
+        break;
     case WifiPhyState::SLEEP:
         NS_LOG_DEBUG("channel switching ignored in sleep mode");
         break;
@@ -1211,8 +1233,9 @@
     m_channelAccessRequested = false;
 
     // Update unspecified parameters with default values
+    std::optional<uint8_t> prevChannelNumber{};
+    for (auto& [number, width, band, primary20] : m_channelSettings)
     {
-        auto& [number, width, band, primary20] = m_channelSettings;
         if (band == WIFI_PHY_BAND_UNSPECIFIED)
         {
             band = GetDefaultPhyBand(m_standard);
@@ -1226,22 +1249,39 @@
             number =
                 WifiPhyOperatingChannel::GetDefaultChannelNumber(width,
                                                                  m_standard,
-                                                                 static_cast<WifiPhyBand>(band));
+                                                                 static_cast<WifiPhyBand>(band),
+                                                                 prevChannelNumber);
         }
+        prevChannelNumber = number;
     }
 
     // We need to call SetStandard if this is the first time we set a channel or we
     // are changing PHY band. Checking if the new PHY band is different than the
     // previous one covers both cases because initially the PHY band is unspecified
-    bool changingPhyBand = (static_cast<WifiPhyBand>(std::get<2>(m_channelSettings)) != m_band);
+    bool changingPhyBand =
+        (static_cast<WifiPhyBand>(std::get<2>(m_channelSettings.front())) != m_band);
 
     NS_ABORT_MSG_IF(IsInitialized() && m_fixedPhyBand && changingPhyBand,
                     "Trying to change PHY band while prohibited.");
 
-    m_band = static_cast<WifiPhyBand>(std::get<2>(m_channelSettings));
+    m_band = static_cast<WifiPhyBand>(std::get<2>(m_channelSettings.front()));
+
+    NS_LOG_DEBUG("switching channel");
+    std::vector<FrequencyChannelInfo> segments{};
+    std::transform(m_channelSettings.cbegin(),
+                   m_channelSettings.cend(),
+                   std::back_inserter(segments),
+                   [this](const auto& channelTuple) {
+                       return FrequencyChannelInfo{std::get<0>(channelTuple),
+                                                   0,
+                                                   std::get<1>(channelTuple),
+                                                   m_band};
+                   });
+    m_operatingChannel.Set(segments, m_standard);
+    m_operatingChannel.SetPrimary20Index(std::get<3>(m_channelSettings.front()));
 
     // check that the channel width is supported
-    uint16_t chWidth = std::get<1>(m_channelSettings);
+    const auto chWidth = GetChannelWidth();
 
     if (m_device)
     {
@@ -1262,15 +1302,13 @@
         }
     }
 
-    NS_LOG_DEBUG("switching channel");
-    m_operatingChannel.Set(std::get<0>(m_channelSettings), 0, chWidth, m_standard, m_band);
-    m_operatingChannel.SetPrimary20Index(std::get<3>(m_channelSettings));
-
     if (changingPhyBand)
     {
         ConfigureStandard(m_standard);
     }
 
+    FinalizeChannelSwitch();
+
     if (IsInitialized())
     {
         // notify channel switching
@@ -1282,6 +1320,7 @@
          * state are added to the event list and are employed later to figure
          * out the state of the medium after the switching.
          */
+        SwitchMaybeToCcaBusy(nullptr);
     }
 }
 
@@ -1394,13 +1433,7 @@
         // The PHY object may be in CCA_BUSY state because it is receiving a preamble. Cancel
         // preamble events before switching to sleep state
         Reset();
-        // It may happen that we request to switch to sleep at the same time the reception of
-        // a PPDU ends. In such a case, WifiPhyStateHelper::GetState() does not return RX
-        // (m_endRx equals now), we get here and set the state to SLEEP. However,
-        // WifiPhyStateHelper::DoSwitchFromRx() may be called after this function (at the same
-        // simulation time), thus hitting the assert that checks that the state is IDLE or
-        // CCA_BUSY.
-        Simulator::ScheduleNow(&WifiPhyStateHelper::SwitchToSleep, m_state);
+        m_state->SwitchToSleep();
         break;
     case WifiPhyState::SLEEP:
         NS_LOG_DEBUG("already in sleep mode");
@@ -1556,7 +1589,7 @@
 }
 
 Time
-WifiPhy::CalculateTxDuration(WifiConstPsduMap psduMap,
+WifiPhy::CalculateTxDuration(const WifiConstPsduMap& psduMap,
                              const WifiTxVector& txVector,
                              WifiPhyBand band)
 {
@@ -1571,7 +1604,7 @@
 }
 
 void
-WifiPhy::NotifyTxBegin(WifiConstPsduMap psdus, double txPowerW)
+WifiPhy::NotifyTxBegin(const WifiConstPsduMap& psdus, Watt_u txPower)
 {
     if (!m_phyTxBeginTrace.IsEmpty())
     {
@@ -1579,14 +1612,14 @@
         {
             for (auto& mpdu : *PeekPointer(psdu.second))
             {
-                m_phyTxBeginTrace(mpdu->GetProtocolDataUnit(), txPowerW);
+                m_phyTxBeginTrace(mpdu->GetProtocolDataUnit(), txPower);
             }
         }
     }
 }
 
 void
-WifiPhy::NotifyTxEnd(WifiConstPsduMap psdus)
+WifiPhy::NotifyTxEnd(const WifiConstPsduMap& psdus)
 {
     if (!m_phyTxEndTrace.IsEmpty())
     {
@@ -1657,7 +1690,7 @@
 
 void
 WifiPhy::NotifyMonitorSniffRx(Ptr<const WifiPsdu> psdu,
-                              uint16_t channelFreqMhz,
+                              MHz_u channelFreq,
                               WifiTxVector txVector,
                               SignalNoiseDbm signalNoise,
                               std::vector<bool> statusPerMpdu,
@@ -1680,7 +1713,7 @@
                 if (statusPerMpdu.at(i)) // packet received without error, hand over to sniffer
                 {
                     m_phyMonitorSniffRxTrace(psdu->GetAmpduSubframe(i),
-                                             channelFreqMhz,
+                                             static_cast<uint16_t>(channelFreq),
                                              txVector,
                                              aMpdu,
                                              signalNoise,
@@ -1700,7 +1733,7 @@
         {
             aMpdu.type = NORMAL_MPDU;
             m_phyMonitorSniffRxTrace(psdu->GetPacket(),
-                                     channelFreqMhz,
+                                     static_cast<uint16_t>(channelFreq),
                                      txVector,
                                      aMpdu,
                                      signalNoise,
@@ -1711,7 +1744,7 @@
 
 void
 WifiPhy::NotifyMonitorSniffTx(Ptr<const WifiPsdu> psdu,
-                              uint16_t channelFreqMhz,
+                              MHz_u channelFreq,
                               WifiTxVector txVector,
                               uint16_t staId)
 {
@@ -1729,7 +1762,7 @@
             for (size_t i = 0; i < nMpdus;)
             {
                 m_phyMonitorSniffTxTrace(psdu->GetAmpduSubframe(i),
-                                         channelFreqMhz,
+                                         channelFreq,
                                          txVector,
                                          aMpdu,
                                          staId);
@@ -1744,7 +1777,7 @@
         if (!m_phyMonitorSniffTxTrace.IsEmpty())
         {
             aMpdu.type = NORMAL_MPDU;
-            m_phyMonitorSniffTxTrace(psdu->GetPacket(), channelFreqMhz, txVector, aMpdu, staId);
+            m_phyMonitorSniffTxTrace(psdu->GetPacket(), channelFreq, txVector, aMpdu, staId);
         }
     }
 }
@@ -1763,7 +1796,7 @@
 }
 
 void
-WifiPhy::Send(WifiConstPsduMap psdus, const WifiTxVector& txVector)
+WifiPhy::Send(const WifiConstPsduMap& psdus, const WifiTxVector& txVector)
 {
     NS_LOG_FUNCTION(this << psdus << txVector);
     /* Transmission can happen if:
@@ -1813,9 +1846,9 @@
         return;
     }
 
-    Time txDuration = CalculateTxDuration(psdus, txVector, GetPhyBand());
+    const auto txDuration = CalculateTxDuration(psdus, txVector, GetPhyBand());
 
-    bool noEndPreambleDetectionEvent = true;
+    auto noEndPreambleDetectionEvent = true;
     for (const auto& [mc, entity] : m_phyEntities)
     {
         noEndPreambleDetectionEvent =
@@ -1848,21 +1881,20 @@
         return;
     }
 
-    Ptr<WifiPpdu> ppdu =
-        GetPhyEntity(txVector.GetModulationClass())->BuildPpdu(psdus, txVector, txDuration);
+    auto ppdu = GetPhyEntity(txVector.GetModulationClass())->BuildPpdu(psdus, txVector, txDuration);
     m_previouslyRxPpduUid = UINT64_MAX; // reset (after creation of PPDU) to use it only once
 
-    double txPowerW = DbmToW(GetTxPowerForTransmission(ppdu) + GetTxGain());
-    NotifyTxBegin(psdus, txPowerW);
+    const auto txPower = DbmToW(GetTxPowerForTransmission(ppdu) + GetTxGain());
+    NotifyTxBegin(psdus, txPower);
     if (!m_phyTxPsduBeginTrace.IsEmpty())
     {
-        m_phyTxPsduBeginTrace(psdus, txVector, txPowerW);
+        m_phyTxPsduBeginTrace(psdus, txVector, txPower);
     }
     for (const auto& psdu : psdus)
     {
         NotifyMonitorSniffTx(psdu.second, GetFrequency(), txVector, psdu.first);
     }
-    m_state->SwitchToTx(txDuration, psdus, GetPowerDbm(txVector.GetTxPowerLevel()), txVector);
+    m_state->SwitchToTx(txDuration, psdus, GetPower(txVector.GetTxPowerLevel()), txVector);
 
     if (m_wifiRadioEnergyModel &&
         m_wifiRadioEnergyModel->GetMaximumTimeInState(WifiPhyState::TX) < txDuration)
@@ -2229,7 +2261,7 @@
 }
 
 void
-WifiPhy::ResetCca(bool powerRestricted, double txPowerMaxSiso, double txPowerMaxMimo)
+WifiPhy::ResetCca(bool powerRestricted, dBm_u txPowerMaxSiso, dBm_u txPowerMaxMimo)
 {
     NS_LOG_FUNCTION(this << powerRestricted << txPowerMaxSiso << txPowerMaxMimo);
     // This method might be called multiple times when receiving TB PPDUs with a BSS color
@@ -2251,40 +2283,40 @@
     }
 }
 
-double
+dBm_u
 WifiPhy::GetTxPowerForTransmission(Ptr<const WifiPpdu> ppdu) const
 {
     NS_LOG_FUNCTION(this << m_powerRestricted << ppdu);
     const auto& txVector = ppdu->GetTxVector();
     // Get transmit power before antenna gain
-    double txPowerDbm;
+    dBm_u txPower;
     if (!m_powerRestricted)
     {
-        txPowerDbm = GetPowerDbm(txVector.GetTxPowerLevel());
+        txPower = GetPower(txVector.GetTxPowerLevel());
     }
     else
     {
         if (txVector.GetNssMax() > 1 || txVector.GetNssTotal() > 1)
         {
-            txPowerDbm = std::min(m_txPowerMaxMimo, GetPowerDbm(txVector.GetTxPowerLevel()));
+            txPower = std::min(m_txPowerMaxMimo, GetPower(txVector.GetTxPowerLevel()));
         }
         else
         {
-            txPowerDbm = std::min(m_txPowerMaxSiso, GetPowerDbm(txVector.GetTxPowerLevel()));
+            txPower = std::min(m_txPowerMaxSiso, GetPower(txVector.GetTxPowerLevel()));
         }
     }
 
     // Apply power density constraint on EIRP
-    uint16_t channelWidth = ppdu->GetTxChannelWidth();
-    double txPowerDbmPerMhz =
-        (txPowerDbm + GetTxGain()) - RatioToDb(channelWidth); // account for antenna gain since EIRP
-    NS_LOG_INFO("txPowerDbm=" << txPowerDbm << " with txPowerDbmPerMhz=" << txPowerDbmPerMhz
-                              << " over " << channelWidth << " MHz");
-    txPowerDbm = std::min(txPowerDbmPerMhz, m_powerDensityLimit) + RatioToDb(channelWidth);
-    txPowerDbm -= GetTxGain(); // remove antenna gain since will be added right afterwards
-    NS_LOG_INFO("txPowerDbm=" << txPowerDbm
-                              << " after applying m_powerDensityLimit=" << m_powerDensityLimit);
-    return txPowerDbm;
+    const auto channelWidth = ppdu->GetTxChannelWidth();
+    dBm_per_MHz_u txPowerDbmPerMhz =
+        (txPower + GetTxGain()) - RatioToDb(channelWidth); // account for antenna gain since EIRP
+    NS_LOG_INFO("txPower=" << txPower << "dBm with txPowerDbmPerMhz=" << txPowerDbmPerMhz
+                           << " over " << channelWidth << " MHz");
+    txPower = std::min(txPowerDbmPerMhz, m_powerDensityLimit) + RatioToDb(channelWidth);
+    txPower -= GetTxGain(); // remove antenna gain since will be added right afterwards
+    NS_LOG_INFO("txPower=" << txPower
+                           << "dBm after applying m_powerDensityLimit=" << m_powerDensityLimit);
+    return txPower;
 }
 
 Ptr<const WifiPsdu>
@@ -2313,15 +2345,15 @@
 }
 
 uint8_t
-WifiPhy::GetPrimaryChannelNumber(uint16_t primaryChannelWidth) const
+WifiPhy::GetPrimaryChannelNumber(MHz_u primaryChannelWidth) const
 {
     return m_operatingChannel.GetPrimaryChannelNumber(primaryChannelWidth, m_standard);
 }
 
-uint32_t
+Hz_u
 WifiPhy::GetSubcarrierSpacing() const
 {
-    uint32_t subcarrierSpacing = 0;
+    Hz_u subcarrierSpacing = 0;
     switch (GetStandard())
     {
     case WIFI_STANDARD_80211a:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy-common.cc ns-3.43/src/wifi/model/wifi-phy-common.cc
--- ns-3.42/src/wifi/model/wifi-phy-common.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy-common.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -28,16 +17,16 @@
 namespace ns3
 {
 
-uint16_t
-ConvertGuardIntervalToNanoSeconds(WifiMode mode, const Ptr<WifiNetDevice> device)
+Time
+GetGuardIntervalForMode(WifiMode mode, const Ptr<WifiNetDevice> device)
 {
-    uint16_t gi = 800;
+    auto gi = NanoSeconds(800);
     if (mode.GetModulationClass() >= WIFI_MOD_CLASS_HE)
     {
         Ptr<HeConfiguration> heConfiguration = device->GetHeConfiguration();
         NS_ASSERT(heConfiguration); // If HE/EHT modulation is used, we should have a HE
                                     // configuration attached
-        gi = static_cast<uint16_t>(heConfiguration->GetGuardInterval().GetNanoSeconds());
+        gi = heConfiguration->GetGuardInterval();
     }
     else if (mode.GetModulationClass() == WIFI_MOD_CLASS_HT ||
              mode.GetModulationClass() == WIFI_MOD_CLASS_VHT)
@@ -45,27 +34,23 @@
         Ptr<HtConfiguration> htConfiguration = device->GetHtConfiguration();
         NS_ASSERT(htConfiguration); // If HT/VHT modulation is used, we should have a HT
                                     // configuration attached
-        gi = htConfiguration->GetShortGuardIntervalSupported() ? 400 : 800;
+        gi = NanoSeconds(htConfiguration->GetShortGuardIntervalSupported() ? 400 : 800);
     }
     return gi;
 }
 
-uint16_t
-ConvertGuardIntervalToNanoSeconds(WifiMode mode, bool htShortGuardInterval, Time heGuardInterval)
+Time
+GetGuardIntervalForMode(WifiMode mode, bool htShortGuardInterval, Time heGuardInterval)
 {
-    uint16_t gi;
+    auto gi = NanoSeconds(800);
     if (mode.GetModulationClass() >= WIFI_MOD_CLASS_HE)
     {
-        gi = static_cast<uint16_t>(heGuardInterval.GetNanoSeconds());
+        gi = heGuardInterval;
     }
     else if (mode.GetModulationClass() == WIFI_MOD_CLASS_HT ||
              mode.GetModulationClass() == WIFI_MOD_CLASS_VHT)
     {
-        gi = htShortGuardInterval ? 400 : 800;
-    }
-    else
-    {
-        gi = 800;
+        gi = NanoSeconds(htShortGuardInterval ? 400 : 800);
     }
     return gi;
 }
@@ -218,7 +203,10 @@
         modulationClass = WIFI_MOD_CLASS_OFDM;
         break;
     case WIFI_STANDARD_80211b:
-        modulationClass = WIFI_MOD_CLASS_DSSS;
+        // Although two modulation classes are supported in 802.11b, return the
+        // numerically greater one defined in the WifiModulationClass enum.
+        // See issue #1095 for more explanation.
+        modulationClass = WIFI_MOD_CLASS_HR_DSSS;
         break;
     case WIFI_STANDARD_80211g:
         modulationClass = WIFI_MOD_CLASS_ERP_OFDM;
@@ -244,7 +232,7 @@
     return modulationClass;
 }
 
-uint16_t
+MHz_u
 GetMaximumChannelWidth(WifiModulationClass modulation)
 {
     switch (modulation)
@@ -269,6 +257,36 @@
         return 0;
     }
 }
+
+MHz_u
+GetChannelWidthInMhz(WifiChannelWidthType width)
+{
+    switch (width)
+    {
+    case WifiChannelWidthType::UNKNOWN:
+        return 0;
+    case WifiChannelWidthType::CW_20MHZ:
+        return 20;
+    case WifiChannelWidthType::CW_22MHZ:
+        return 22;
+    case WifiChannelWidthType::CW_5MHZ:
+        return 5;
+    case WifiChannelWidthType::CW_10MHZ:
+        return 10;
+    case WifiChannelWidthType::CW_40MHZ:
+        return 40;
+    case WifiChannelWidthType::CW_80MHZ:
+        return 80;
+    case WifiChannelWidthType::CW_160MHZ:
+    case WifiChannelWidthType::CW_80_PLUS_80MHZ:
+        return 160;
+    case WifiChannelWidthType::CW_2160MHZ:
+        return 2160;
+    default:
+        NS_FATAL_ERROR("Unknown wifi channel width type " << width);
+        return 0;
+    }
+}
 
 bool
 IsEht(WifiPreamble preamble)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy-common.h ns-3.43/src/wifi/model/wifi-phy-common.h
--- ns-3.42/src/wifi/model/wifi-phy-common.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy-common.h	2024-10-09 16:41:10.132656800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005,2006,2007 INRIA
  * Copyright (c) 2020 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Rediet <getachew.redieteab@orange.com>
@@ -24,11 +13,13 @@
 
 #include "wifi-spectrum-value-helper.h"
 #include "wifi-standards.h"
+#include "wifi-types.h"
 
 #include "ns3/fatal-error.h"
 #include "ns3/ptr.h"
 
 #include <ostream>
+#include <vector>
 
 /**
  * \file
@@ -52,15 +43,17 @@
 static constexpr uint8_t MAX_PROPAGATION_DELAY_USEC = 1;
 
 /**
- * typedef for a pair of start and stop frequencies in Hz to represent a band
+ * typedef for a pair of start and stop frequencies to represent a band
  */
-using WifiSpectrumBandFrequencies = std::pair<uint64_t, uint64_t>;
+using WifiSpectrumBandFrequencies = std::pair<Hz_u, Hz_u>;
 
 /// WifiSpectrumBandInfo structure containing info about a spectrum band
 struct WifiSpectrumBandInfo
 {
-    WifiSpectrumBandIndices indices;         //!< the start and stop indices of the band
-    WifiSpectrumBandFrequencies frequencies; //!< the start and stop frequencies of the band
+    std::vector<WifiSpectrumBandIndices>
+        indices; //!< the start and stop indices for each segment of the band
+    std::vector<WifiSpectrumBandFrequencies>
+        frequencies; //!< the start and stop frequencies for each segment of the band
 };
 
 /// vector of spectrum bands
@@ -72,13 +65,20 @@
  *
  * \param lhs the band on the left of operator<
  * \param rhs the band on the right of operator<
- * \return true if the start/stop frequencies of left are lower than the start/stop frequencies of
- * right, false otherwise
+ * \return true if the start/stop frequencies of the first segment of left are lower than the
+ * start/stop frequencies of the first segment of right. If the first segment is the same for left
+ * and right, it return true if the start/stop frequencies of the second segment of left are lower
+ * than the start/stop frequencies of the second segment of right. Otherwise, the function return
+ * false.
  */
 inline bool
 operator<(const WifiSpectrumBandInfo& lhs, const WifiSpectrumBandInfo& rhs)
 {
-    return lhs.frequencies < rhs.frequencies;
+    if (lhs.frequencies.front() == rhs.frequencies.front())
+    {
+        return lhs.frequencies.back() < rhs.frequencies.back();
+    }
+    return lhs.frequencies.front() < rhs.frequencies.front();
 }
 
 /**
@@ -91,8 +91,14 @@
 inline std::ostream&
 operator<<(std::ostream& os, const WifiSpectrumBandInfo& band)
 {
-    os << "indices: [" << band.indices.first << "-" << band.indices.second << "], frequencies: ["
-       << band.frequencies.first << "Hz-" << band.frequencies.second << "Hz]";
+    NS_ASSERT(band.indices.size() == band.frequencies.size());
+    for (std::size_t segmentIndex = 0; segmentIndex < band.indices.size(); ++segmentIndex)
+    {
+        os << "indices segment" << segmentIndex << ": [" << band.indices.at(segmentIndex).first
+           << "-" << band.indices.at(segmentIndex).second << "], frequencies segment"
+           << segmentIndex << ": [" << band.frequencies.at(segmentIndex).first << "Hz-"
+           << band.frequencies.at(segmentIndex).second << "Hz] ";
+    }
     return os;
 }
 
@@ -539,27 +545,61 @@
 }
 
 /**
- * Convert the guard interval to nanoseconds based on the WifiMode.
+ * \brief Stream insertion operator.
+ *
+ * \param os the stream
+ * \param width the wifi channel width type
+ * \returns a reference to the stream
+ */
+inline std::ostream&
+operator<<(std::ostream& os, WifiChannelWidthType width)
+{
+    switch (width)
+    {
+    case WifiChannelWidthType::CW_20MHZ:
+        return (os << "20MHz");
+    case WifiChannelWidthType::CW_22MHZ:
+        return (os << "22MHz");
+    case WifiChannelWidthType::CW_5MHZ:
+        return (os << "5MHz");
+    case WifiChannelWidthType::CW_10MHZ:
+        return (os << "10MHz");
+    case WifiChannelWidthType::CW_40MHZ:
+        return (os << "40MHz");
+    case WifiChannelWidthType::CW_80MHZ:
+        return (os << "80MHz");
+    case WifiChannelWidthType::CW_160MHZ:
+        return (os << "160MHz");
+    case WifiChannelWidthType::CW_80_PLUS_80MHZ:
+        return (os << "80+80MHz");
+    case WifiChannelWidthType::CW_2160MHZ:
+        return (os << "2160MHz");
+    default:
+    case WifiChannelWidthType::MAX:
+        return (os << "UNKNOWN");
+    }
+}
+
+/**
+ * Get the guard interval for a given WifiMode.
  *
  * \param mode the WifiMode
  * \param device pointer to the WifiNetDevice object
  *
- * \return the guard interval duration in nanoseconds
+ * \return the guard interval duration to use for the mode
  */
-uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode, const Ptr<WifiNetDevice> device);
+Time GetGuardIntervalForMode(WifiMode mode, const Ptr<WifiNetDevice> device);
 
 /**
- * Convert the guard interval to nanoseconds based on the WifiMode.
+ * Get the guard interval for a given WifiMode.
  *
  * \param mode the WifiMode
  * \param htShortGuardInterval whether HT/VHT short guard interval is enabled
  * \param heGuardInterval the HE guard interval duration
  *
- * \return the guard interval duration in nanoseconds
+ * \return the guard interval duration to use for the mode
  */
-uint16_t ConvertGuardIntervalToNanoSeconds(WifiMode mode,
-                                           bool htShortGuardInterval,
-                                           Time heGuardInterval);
+Time GetGuardIntervalForMode(WifiMode mode, bool htShortGuardInterval, Time heGuardInterval);
 
 /**
  * Return the preamble to be used for the transmission.
@@ -631,18 +671,30 @@
 /**
  * Return the modulation class corresponding to a given standard.
  *
+ * In the case of WIFI_STANDARD_80211b, two modulation classes are supported
+ * (WIFI_MOD_CLASS_DSSS and WIFI_MOD_CLASS_HR_DSSS); this method will return
+ * the latter.
+ *
  * \param standard the standard
  * \return the modulation class corresponding to the standard
  */
 WifiModulationClass GetModulationClassForStandard(WifiStandard standard);
 
 /**
- * Get the maximum channel width in MHz allowed for the given modulation class.
+ * Get the maximum channel width allowed for the given modulation class.
  *
  * \param modulation the modulation class
- * \return the maximum channel width in MHz allowed for the given modulation class
+ * \return the maximum channel width allowed for the given modulation class
+ */
+MHz_u GetMaximumChannelWidth(WifiModulationClass modulation);
+
+/**
+ * Get the total channel width for the channel width type.
+ *
+ * \param width the channel width type
+ * \return the total channel width for the channel width type
  */
-uint16_t GetMaximumChannelWidth(WifiModulationClass modulation);
+MHz_u GetChannelWidthInMhz(WifiChannelWidthType width);
 
 /**
  * Return true if a preamble corresponds to an EHT transmission.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy.h ns-3.43/src/wifi/model/wifi-phy.h
--- ns-3.42/src/wifi/model/wifi-phy.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -55,6 +44,7 @@
 class UniformRandomVariable;
 class InterferenceHelper;
 class ErrorRateModel;
+class WifiMacHeader;
 
 /**
  * \brief 802.11 PHY layer model
@@ -96,7 +86,7 @@
      * \param listener the new listener
      *
      * Add the input listener to the list of objects to be notified of
-     * PHY-level events.
+     * PHY-level events. The input listener is notified of CCA busy information.
      */
     void RegisterListener(const std::shared_ptr<WifiPhyListener>& listener);
     /**
@@ -166,7 +156,7 @@
      * real transmission power is calculated as txPowerMin + txPowerLevel * (txPowerMax -
      * txPowerMin) / nTxLevels
      */
-    void Send(WifiConstPsduMap psdus, const WifiTxVector& txVector);
+    void Send(const WifiConstPsduMap& psdus, const WifiTxVector& txVector);
 
     /**
      * \param ppdu the PPDU to send
@@ -276,7 +266,7 @@
      *
      * \return the total amount of time this PHY will stay busy for the transmission of the PPDU
      */
-    static Time CalculateTxDuration(WifiConstPsduMap psduMap,
+    static Time CalculateTxDuration(const WifiConstPsduMap& psduMap,
                                     const WifiTxVector& txVector,
                                     WifiPhyBand band);
 
@@ -572,16 +562,16 @@
      * Implemented for encapsulation purposes.
      *
      * \param psdus the PSDUs being transmitted (only one unless DL MU transmission)
-     * \param txPowerW the transmit power in Watts
+     * \param txPower the transmit power
      */
-    void NotifyTxBegin(WifiConstPsduMap psdus, double txPowerW);
+    void NotifyTxBegin(const WifiConstPsduMap& psdus, Watt_u txPower);
     /**
      * Public method used to fire a PhyTxEnd trace.
      * Implemented for encapsulation purposes.
      *
      * \param psdus the PSDUs being transmitted (only one unless DL MU transmission)
      */
-    void NotifyTxEnd(WifiConstPsduMap psdus);
+    void NotifyTxEnd(const WifiConstPsduMap& psdus);
     /**
      * Public method used to fire a PhyTxDrop trace.
      * Implemented for encapsulation purposes.
@@ -635,13 +625,11 @@
      * for each A-MPDU but the same for each subframe within one A-MPDU.
      *
      * \param psdu the PSDU being received
-     * \param channelFreqMhz the frequency in MHz at which the packet is
-     *        received. Note that in real devices this is normally the
-     *        frequency to which  the receiver is tuned, and this can be
-     *        different than the frequency at which the packet was originally
-     *        transmitted. This is because it is possible to have the receiver
-     *        tuned on a given channel and still to be able to receive packets
-     *        on a nearby channel.
+     * \param channelFreq the frequency at which the packet is received. Note that in real devices
+     * this is normally the frequency to which the receiver is tuned, and this can be different than
+     * the frequency at which the packet was originally transmitted. This is because it is possible
+     * to have the receiver tuned on a given channel and still to be able to receive packets on a
+     * nearby channel.
      * \param txVector the TXVECTOR that holds RX parameters
      * \param signalNoise signal power and noise power in dBm (noise power includes the noise
      * figure)
@@ -649,7 +637,7 @@
      * \param staId the STA-ID
      */
     void NotifyMonitorSniffRx(Ptr<const WifiPsdu> psdu,
-                              uint16_t channelFreqMhz,
+                              MHz_u channelFreq,
                               WifiTxVector txVector,
                               SignalNoiseDbm signalNoise,
                               std::vector<bool> statusPerMpdu,
@@ -660,13 +648,11 @@
      *
      *
      * \param packet the packet being received
-     * \param channelFreqMhz the frequency in MHz at which the packet is
-     *        received. Note that in real devices this is normally the
-     *        frequency to which  the receiver is tuned, and this can be
-     *        different than the frequency at which the packet was originally
-     *        transmitted. This is because it is possible to have the receiver
-     *        tuned on a given channel and still to be able to receive packets
-     *        on a nearby channel.
+     * \param channelFreq the frequency at which the packet is received. Note that in real devices
+     * this is normally the frequency to which  the receiver is tuned, and this can be different
+     * than the frequency at which the packet was originally transmitted. This is because it is
+     * possible to have the receiver tuned on a given channel and still to be able to receive
+     * packets on a nearby channel.
      * \param txVector the TXVECTOR that holds RX parameters
      * \param aMpdu the type of the packet (0 is not A-MPDU, 1 is a MPDU that is part of an A-MPDU
      * and 2 is the last MPDU in an A-MPDU) and the A-MPDU reference number (must be a different
@@ -691,13 +677,13 @@
      * for each A-MPDU but the same for each subframe within one A-MPDU.
      *
      * \param psdu the PSDU being received
-     * \param channelFreqMhz the frequency in MHz at which the packet is
+     * \param channelFreq the frequency at which the packet is
      *        transmitted.
      * \param txVector the TXVECTOR that holds TX parameters
      * \param staId the STA-ID
      */
     void NotifyMonitorSniffTx(Ptr<const WifiPsdu> psdu,
-                              uint16_t channelFreqMhz,
+                              MHz_u channelFreq,
                               WifiTxVector txVector,
                               uint16_t staId = SU_STA_ID);
 
@@ -767,6 +753,17 @@
                                                 WifiPhyRxfailureReason reason);
 
     /**
+     * TracedCallback signature for end of MAC header reception events.
+     *
+     * \param macHdr the MAC header of the MPDU being received
+     * \param txVector the TXVECTOR used to transmit the PSDU
+     * \param psduDuration the remaining duration of the PSDU
+     */
+    typedef void (*PhyRxMacHeaderEndTracedCallback)(const WifiMacHeader& macHdr,
+                                                    const WifiTxVector& txVector,
+                                                    Time psduDuration);
+
+    /**
      * Assign a fixed random variable stream number to the random variables
      * used by this model. Return the number of streams (possibly zero) that
      * have been assigned.
@@ -777,75 +774,75 @@
     virtual int64_t AssignStreams(int64_t stream);
 
     /**
-     * Sets the receive sensitivity threshold (dBm).
+     * Sets the receive sensitivity threshold.
      * The energy of a received signal should be higher than
      * this threshold to allow the PHY layer to detect the signal.
      *
-     * \param threshold the receive sensitivity threshold in dBm
+     * \param threshold the receive sensitivity threshold
      */
-    void SetRxSensitivity(double threshold);
+    void SetRxSensitivity(dBm_u threshold);
     /**
-     * Return the receive sensitivity threshold (dBm).
+     * Return the receive sensitivity threshold.
      *
-     * \return the receive sensitivity threshold in dBm
+     * \return the receive sensitivity threshold
      */
-    double GetRxSensitivity() const;
+    dBm_u GetRxSensitivity() const;
     /**
-     * Sets the CCA energy detection threshold (dBm). The energy of a all received signals
+     * Sets the CCA energy detection threshold. The energy of a all received signals
      * should be higher than this threshold to allow the PHY layer to declare CCA BUSY state.
      *
-     * \param threshold the CCA threshold in dBm
+     * \param threshold the CCA threshold
      */
-    void SetCcaEdThreshold(double threshold);
+    void SetCcaEdThreshold(dBm_u threshold);
     /**
-     * Return the CCA energy detection threshold (dBm).
+     * Return the CCA energy detection threshold.
      *
-     * \return the CCA energy detection threshold in dBm
+     * \return the CCA energy detection threshold
      */
-    double GetCcaEdThreshold() const;
+    dBm_u GetCcaEdThreshold() const;
     /**
-     * Sets the CCA sensitivity threshold (dBm). The energy of a received wifi signal
+     * Sets the CCA sensitivity threshold. The energy of a received wifi signal
      * should be higher than this threshold to allow the PHY layer to declare CCA BUSY state.
      *
-     * \param threshold the CCA sensitivity threshold in dBm
+     * \param threshold the CCA sensitivity threshold
      */
-    void SetCcaSensitivityThreshold(double threshold);
+    void SetCcaSensitivityThreshold(dBm_u threshold);
     /**
-     * Return the CCA sensitivity threshold (dBm).
+     * Return the CCA sensitivity threshold.
      *
-     * \return the CCA sensitivity threshold in dBm
+     * \return the CCA sensitivity threshold
      */
-    double GetCcaSensitivityThreshold() const;
+    dBm_u GetCcaSensitivityThreshold() const;
     /**
-     * Sets the RX loss (dB) in the Signal-to-Noise-Ratio due to non-idealities in the receiver.
+     * Sets the RX loss in the Signal-to-Noise-Ratio due to non-idealities in the receiver.
      *
-     * \param noiseFigureDb noise figure in dB
+     * \param noiseFigure noise figure
      */
-    void SetRxNoiseFigure(double noiseFigureDb);
+    void SetRxNoiseFigure(dB_u noiseFigure);
     /**
-     * Sets the minimum available transmission power level (dBm).
+     * Sets the minimum available transmission power level.
      *
-     * \param start the minimum transmission power level (dBm)
+     * \param start the minimum transmission power level
      */
-    void SetTxPowerStart(double start);
+    void SetTxPowerStart(dBm_u start);
     /**
-     * Return the minimum available transmission power level (dBm).
+     * Return the minimum available transmission power level.
      *
-     * \return the minimum available transmission power level (dBm)
+     * \return the minimum available transmission power level
      */
-    double GetTxPowerStart() const;
+    dBm_u GetTxPowerStart() const;
     /**
-     * Sets the maximum available transmission power level (dBm).
+     * Sets the maximum available transmission power level.
      *
-     * \param end the maximum transmission power level (dBm)
+     * \param end the maximum transmission power level
      */
-    void SetTxPowerEnd(double end);
+    void SetTxPowerEnd(dBm_u end);
     /**
-     * Return the maximum available transmission power level (dBm).
+     * Return the maximum available transmission power level.
      *
-     * \return the maximum available transmission power level (dBm)
+     * \return the maximum available transmission power level
      */
-    double GetTxPowerEnd() const;
+    dBm_u GetTxPowerEnd() const;
     /**
      * Sets the number of transmission power levels available between the
      * minimum level and the maximum level. Transmission power levels are
@@ -861,29 +858,29 @@
      */
     uint8_t GetNTxPower() const;
     /**
-     * Sets the transmission gain (dB).
+     * Sets the transmission gain.
      *
-     * \param gain the transmission gain in dB
+     * \param gain the transmission gain
      */
-    void SetTxGain(double gain);
+    void SetTxGain(dB_u gain);
     /**
-     * Return the transmission gain (dB).
+     * Return the transmission gain.
      *
-     * \return the transmission gain in dB
+     * \return the transmission gain
      */
-    double GetTxGain() const;
+    dB_u GetTxGain() const;
     /**
-     * Sets the reception gain (dB).
+     * Sets the reception gain.
      *
-     * \param gain the reception gain in dB
+     * \param gain the reception gain
      */
-    void SetRxGain(double gain);
+    void SetRxGain(dB_u gain);
     /**
-     * Return the reception gain (dB).
+     * Return the reception gain.
      *
-     * \return the reception gain in dB
+     * \return the reception gain
      */
-    double GetRxGain() const;
+    dB_u GetRxGain() const;
 
     /**
      * Sets the device this PHY is associated with.
@@ -919,26 +916,15 @@
      */
     Ptr<MobilityModel> GetMobility() const;
 
-    using ChannelTuple =
-        std::tuple<uint8_t /* channel number */,
-                   uint16_t /* channel width */,
-                   WifiPhyBand /* WifiPhyBand */,
-                   uint8_t /* primary20 index*/>; //!< Tuple identifying an operating channel
+    using ChannelTuple = std::tuple<uint8_t /* channel number */,
+                                    MHz_u /* channel width */,
+                                    WifiPhyBand /* WifiPhyBand */,
+                                    uint8_t /* primary20 index*/>; //!< Tuple identifying a segment
+                                                                   //!< of an operating channel
+
+    using ChannelSegments =
+        std::vector<ChannelTuple>; //!< segments identifying an operating channel
 
-    /**
-     * If the standard for this object has not been set yet, store the given channel
-     * settings. Otherwise, check if a channel switch can be performed now. If not,
-     * schedule another call to this method when channel switch can be performed.
-     * Otherwise, set the operating channel based on the given channel settings and
-     * call ConfigureStandard if the PHY band has changed.
-     *
-     * Note that, in case a Spectrum PHY is used, a spectrum channel covering the
-     * operating channel bandwidth must have been already added when actually setting
-     * the operating channel.
-     *
-     * \param channelTuple the given channel settings
-     */
-    void SetOperatingChannel(const ChannelTuple& channelTuple);
     /**
      * If the standard for this object has not been set yet, store the channel settings
      * corresponding to the given operating channel. Otherwise, check if a channel switch
@@ -953,6 +939,23 @@
      * \param channel the given operating channel
      */
     void SetOperatingChannel(const WifiPhyOperatingChannel& channel);
+
+    /**
+     * This overloaded function is used to pass a list of segments
+     * from which the operating channel can be deduced.
+     *
+     * \param channelSegments the segments identifying the operating channel
+     */
+    void SetOperatingChannel(const ChannelSegments& channelSegments);
+
+    /**
+     * This overloaded function is used when the operating channel
+     * consists of a single segment, identified by a tuple.
+     *
+     * \param tuple the segment identifying the operating channel
+     */
+    void SetOperatingChannel(const ChannelTuple& tuple);
+
     /**
      * Configure whether it is prohibited to change PHY band after initialization.
      *
@@ -965,9 +968,9 @@
      */
     bool HasFixedPhyBand() const;
     /**
-     * \return the operating center frequency (MHz)
+     * \return the operating center frequency
      */
-    uint16_t GetFrequency() const;
+    MHz_u GetFrequency() const;
     /**
      * \return the index of the primary 20 MHz channel
      */
@@ -981,9 +984,8 @@
      * \param maxAllowedBandWidth the maximum allowed TX bandwidth
      * \return the bandwidth for the transmission
      */
-    uint16_t GetTxBandwidth(
-        WifiMode mode,
-        uint16_t maxAllowedBandWidth = std::numeric_limits<uint16_t>::max()) const;
+    MHz_u GetTxBandwidth(WifiMode mode,
+                         MHz_u maxAllowedBandWidth = std::numeric_limits<MHz_u>::max()) const;
     /**
      * \param antennas the number of antennas on this node.
      */
@@ -1080,38 +1082,38 @@
     void SetWifiRadioEnergyModel(const Ptr<WifiRadioEnergyModel> wifiRadioEnergyModel);
 
     /**
-     * \return the channel width in MHz
+     * \return the channel width
      */
-    uint16_t GetChannelWidth() const;
+    MHz_u GetChannelWidth() const;
 
     /**
-     * Get the power of the given power level in dBm.
-     * In SpectrumWifiPhy implementation, the power levels are equally spaced (in dBm).
+     * Get the power of the given power level.
+     * In current implementation, the power levels are equally spaced (in dBm).
      *
-     * \param power the power level
+     * \param powerLevel the power level
      *
-     * \return the transmission power in dBm at the given power level
+     * \return the transmission power at the given power level
      */
-    double GetPowerDbm(uint8_t power) const;
+    dBm_u GetPower(uint8_t powerLevel) const;
 
     /**
      * Reset PHY to IDLE, with some potential TX power restrictions for the next transmission.
      *
      * \param powerRestricted flag whether the transmit power is restricted for the next
      * transmission
-     * \param txPowerMaxSiso the SISO transmit power restriction for the next transmission in dBm
-     * \param txPowerMaxMimo the MIMO transmit power restriction for the next transmission in dBm
+     * \param txPowerMaxSiso the SISO transmit power restriction for the next transmission
+     * \param txPowerMaxMimo the MIMO transmit power restriction for the next transmission
      */
-    void ResetCca(bool powerRestricted, double txPowerMaxSiso = 0, double txPowerMaxMimo = 0);
+    void ResetCca(bool powerRestricted, dBm_u txPowerMaxSiso = 0, dBm_u txPowerMaxMimo = 0);
     /**
      * Compute the transmit power for the next transmission.
      * The returned power will satisfy the power density constraints
      * after addition of antenna gain.
      *
      * \param ppdu the PPDU to transmit
-     * \return the transmit power in dBm for the next transmission
+     * \return the transmit power for the next transmission
      */
-    double GetTxPowerForTransmission(Ptr<const WifiPpdu> ppdu) const;
+    dBm_u GetTxPowerForTransmission(Ptr<const WifiPpdu> ppdu) const;
     /**
      * Notify the PHY that an access to the channel was requested.
      * This is typically called by the channel access manager to
@@ -1203,8 +1205,8 @@
     void SetPreviouslyRxPpduUid(uint64_t uid);
 
     /**
-     * \param currentChannelWidth channel width of the current transmission (MHz)
-     * \return the width of the guard band (MHz)
+     * \param currentChannelWidth channel width of the current transmission
+     * \return the width of the guard band
      *
      * Note: in order to properly model out of band transmissions for OFDM, the guard
      * band has been configured so as to expand the modeled spectrum up to the
@@ -1215,34 +1217,34 @@
      *
      * This method is only relevant for SpectrumWifiPhy.
      */
-    virtual uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const = 0;
+    virtual MHz_u GetGuardBandwidth(MHz_u currentChannelWidth) const = 0;
     /**
-     * \return a tuple containing the minimum rejection (in dBr) for the inner band,
-     *                            the minimum rejection (in dBr) for the outer band, and
-     *                            the maximum rejection (in dBr) for the outer band
+     * \return a tuple containing the minimum rejection for the inner band,
+     *                            the minimum rejection for the outer band, and
+     *                            the maximum rejection for the outer band
      *                            for the transmit spectrum mask.
      *
      * This method is only relevant for SpectrumWifiPhy.
      */
-    virtual std::tuple<double, double, double> GetTxMaskRejectionParams() const = 0;
+    virtual std::tuple<dBr_u, dBr_u, dBr_u> GetTxMaskRejectionParams() const = 0;
 
     /**
      * Get channel number of the primary channel
-     * \param primaryChannelWidth the width of the primary channel (MHz)
+     * \param primaryChannelWidth the width of the primary channel
      *
      * \return channel number of the primary channel
      */
-    uint8_t GetPrimaryChannelNumber(uint16_t primaryChannelWidth) const;
+    uint8_t GetPrimaryChannelNumber(MHz_u primaryChannelWidth) const;
 
     /**
      * Get the info of a given band
      *
-     * \param bandWidth the width of the band to be returned (MHz)
+     * \param bandWidth the width of the band to be returned
      * \param bandIndex the index of the band to be returned
      *
      * \return the info that defines the band
      */
-    virtual WifiSpectrumBandInfo GetBand(uint16_t bandWidth, uint8_t bandIndex = 0) = 0;
+    virtual WifiSpectrumBandInfo GetBand(MHz_u bandWidth, uint8_t bandIndex = 0) = 0;
 
     /**
      * Get the frequency range of the current RF interface.
@@ -1252,9 +1254,9 @@
     virtual FrequencyRange GetCurrentFrequencyRange() const = 0;
 
     /**
-     * \return the subcarrier spacing corresponding to the configure standard (Hz)
+     * \return the subcarrier spacing corresponding to the configure standard
      */
-    uint32_t GetSubcarrierSpacing() const;
+    Hz_u GetSubcarrierSpacing() const;
 
     /**
      * Callback invoked when the PHY model starts to transmit a signal
@@ -1439,6 +1441,12 @@
     Ptr<const WifiPsdu> GetAddressedPsduInPpdu(Ptr<const WifiPpdu> ppdu) const;
 
     /**
+     * Method that can be overridden by subclasses to perform operations after the channel is
+     * actually switched but before the MAC is notified of the channel switch.
+     */
+    virtual void FinalizeChannelSwitch() = 0;
+
+    /**
      * The trace source fired when a packet begins the transmission process on
      * the medium.
      *
@@ -1494,6 +1502,17 @@
     TracedCallback<WifiTxVector, Time> m_phyRxPayloadBeginTrace;
 
     /**
+     * The trace source fired when the reception of a MAC header ends.
+     *
+     * This traced callback models the behavior of real PHYs that are able to decode the MAC
+     * header of an MPDU being received and make the information therein available to the MAC
+     * as soon as the reception of the MAC header ends.
+     *
+     * \see class CallBackTraceSource
+     */
+    TracedCallback<const WifiMacHeader&, const WifiTxVector&, Time> m_phyRxMacHeaderEndTrace;
+
+    /**
      * The trace source fired when a packet ends the reception process from
      * the medium.
      *
@@ -1564,7 +1583,7 @@
     WifiStandard m_standard;                    //!< WifiStandard
     WifiModulationClass m_maxModClassSupported; //!< max modulation class supported
     WifiPhyBand m_band;                         //!< WifiPhyBand
-    ChannelTuple m_channelSettings; //!< Store operating channel settings until initialization
+    ChannelSegments m_channelSettings; //!< Store operating channel settings until initialization
     WifiPhyOperatingChannel m_operatingChannel; //!< Operating channel
     bool m_fixedPhyBand; //!< True to prohibit changing PHY band after initialization
 
@@ -1574,24 +1593,21 @@
     Time m_ackTxTime;      //!< estimated Ack TX time
     Time m_blockAckTxTime; //!< estimated BlockAck TX time
 
-    double m_rxSensitivityDbm; //!< Receive sensitivity threshold in dBm
-    double m_ccaEdThresholdW; //!< Clear channel assessment (CCA) energy detection (ED) threshold in
-                              //!< watts
-    double m_ccaSensitivityThresholdW; //!< Clear channel assessment (CCA) modulation and coding
-                                       //!< rate sensitivity threshold in watts
-
-    double m_txGainDb;          //!< Transmission gain (dB)
-    double m_rxGainDb;          //!< Reception gain (dB)
-    double m_txPowerBaseDbm;    //!< Minimum transmission power (dBm)
-    double m_txPowerEndDbm;     //!< Maximum transmission power (dBm)
-    uint8_t m_nTxPower;         //!< Number of available transmission power levels
-    double m_powerDensityLimit; //!< the power density limit (dBm/MHz)
+    dBm_u m_rxSensitivity;  //!< Receive sensitivity threshold
+    dBm_u m_ccaEdThreshold; //!< Clear channel assessment (CCA) energy detection (ED) threshold
+    dBm_u m_ccaSensitivityThreshold; //!< Clear channel assessment (CCA) modulation and coding rate
+                                     //!< sensitivity threshold
+
+    dB_u m_txGain;                     //!< Transmission gain
+    dB_u m_rxGain;                     //!< Reception gain
+    dBm_u m_txPowerBase;               //!< Minimum transmission power
+    dBm_u m_txPowerEnd;                //!< Maximum transmission power
+    uint8_t m_nTxPower;                //!< Number of available transmission power levels
+    dBm_per_MHz_u m_powerDensityLimit; //!< the power density limit
 
     bool m_powerRestricted; //!< Flag whether transmit power is restricted by OBSS PD SR
-    double
-        m_txPowerMaxSiso; //!< SISO maximum transmit power due to OBSS PD SR power restriction (dBm)
-    double
-        m_txPowerMaxMimo; //!< MIMO maximum transmit power due to OBSS PD SR power restriction (dBm)
+    dBm_u m_txPowerMaxSiso; //!< SISO maximum transmit power due to OBSS PD SR power restriction
+    dBm_u m_txPowerMaxMimo; //!< MIMO maximum transmit power due to OBSS PD SR power restriction
     bool m_channelAccessRequested; //!< Flag if channels access has been requested (used for OBSS_PD
                                    //!< SR)
 
@@ -1600,7 +1616,7 @@
     uint8_t m_txSpatialStreams; //!< Number of supported TX spatial streams
     uint8_t m_rxSpatialStreams; //!< Number of supported RX spatial streams
 
-    double m_noiseFigureDb; //!< The noise figure in dB
+    dB_u m_noiseFigure; //!< The noise figure
 
     Time m_channelSwitchDelay; //!< Time required to switch between channel
 
@@ -1612,6 +1628,7 @@
     Ptr<WifiRadioEnergyModel> m_wifiRadioEnergyModel;     //!< Wifi radio energy model
     Ptr<ErrorModel> m_postReceptionErrorModel;            //!< Error model for receive packet events
     Time m_timeLastPreambleDetected; //!< Record the time the last preamble was detected
+    bool m_notifyRxMacHeaderEnd;     //!< whether the PHY is capable of notifying MAC header RX end
 
     Callback<void> m_capabilitiesChangedCallback; //!< Callback when PHY capabilities changed
 };
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy-listener.h ns-3.43/src/wifi/model/wifi-phy-listener.h
--- ns-3.42/src/wifi/model/wifi-phy-listener.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy-listener.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -69,7 +58,7 @@
     virtual void NotifyRxEndError() = 0;
     /**
      * \param duration the expected transmission duration.
-     * \param txPowerDbm the nominal TX power in dBm
+     * \param txPower the nominal TX power
      *
      * We are about to send the first bit of the packet.
      * We do not send any event to notify the end of
@@ -77,7 +66,7 @@
      * channel implicitly reverts to the idle state
      * unless they have received a CCA busy report.
      */
-    virtual void NotifyTxStart(Time duration, double txPowerDbm) = 0;
+    virtual void NotifyTxStart(Time duration, dBm_u txPower) = 0;
     /**
      * \param duration the expected busy duration.
      * \param channelType the channel type for which the CCA busy state is reported.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy-operating-channel.cc ns-3.43/src/wifi/model/wifi-phy-operating-channel.cc
--- ns-3.42/src/wifi/model/wifi-phy-operating-channel.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy-operating-channel.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Stefano Avallone <stavallo@unina.it>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -26,258 +15,282 @@
 #include "ns3/log.h"
 
 #include <algorithm>
+#include <numeric>
+#include <sstream>
 
 namespace ns3
 {
 
 NS_LOG_COMPONENT_DEFINE("WifiPhyOperatingChannel");
 
-const std::set<FrequencyChannelInfo> WifiPhyOperatingChannel::m_frequencyChannels = {
+const std::set<FrequencyChannelInfo> WifiPhyOperatingChannel::m_frequencyChannels = {{
     // 2.4 GHz channels
     //  802.11b uses width of 22, while OFDM modes use width of 20
-    {std::make_tuple(1, 2412, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(1, 2412, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(2, 2417, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(2, 2417, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(3, 2422, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(3, 2422, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(4, 2427, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(4, 2427, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(5, 2432, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(5, 2432, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(6, 2437, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(6, 2437, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(7, 2442, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(7, 2442, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(8, 2447, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(8, 2447, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(9, 2452, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(9, 2452, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(10, 2457, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(10, 2457, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(11, 2462, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(11, 2462, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(12, 2467, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(12, 2467, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(13, 2472, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(13, 2472, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
+    {1, 2412, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {1, 2412, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {2, 2417, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {2, 2417, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {3, 2422, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {3, 2422, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {4, 2427, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {4, 2427, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {5, 2432, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {5, 2432, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {6, 2437, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {6, 2437, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {7, 2442, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {7, 2442, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {8, 2447, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {8, 2447, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {9, 2452, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {9, 2452, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {10, 2457, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {10, 2457, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {11, 2462, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {11, 2462, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {12, 2467, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {12, 2467, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {13, 2472, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
+    {13, 2472, 20, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
     // Only defined for 802.11b
-    {std::make_tuple(14, 2484, 22, WIFI_PHY_DSSS_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
+    {14, 2484, 22, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::DSSS},
     // 40 MHz channels
-    {std::make_tuple(3, 2422, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(4, 2427, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(5, 2432, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(6, 2437, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(7, 2442, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(8, 2447, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(9, 2452, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(10, 2457, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
-    {std::make_tuple(11, 2462, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_2_4GHZ)},
+    {3, 2422, 40, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {4, 2427, 40, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {5, 2432, 40, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {6, 2437, 40, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {7, 2442, 40, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {8, 2447, 40, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {9, 2452, 40, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {10, 2457, 40, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
+    {11, 2462, 40, WIFI_PHY_BAND_2_4GHZ, FrequencyChannelType::OFDM},
 
     // Now the 5 GHz channels used for 802.11a/n/ac/ax/be
     // 20 MHz channels
-    {std::make_tuple(36, 5180, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(40, 5200, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(44, 5220, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(48, 5240, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(52, 5260, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(56, 5280, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(60, 5300, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(64, 5320, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(100, 5500, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(104, 5520, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(108, 5540, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(112, 5560, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(116, 5580, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(120, 5600, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(124, 5620, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(128, 5640, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(132, 5660, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(136, 5680, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(140, 5700, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(144, 5720, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(149, 5745, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(153, 5765, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(157, 5785, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(161, 5805, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(165, 5825, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(169, 5845, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(173, 5865, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(177, 5885, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(181, 5905, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
+    {36, 5180, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {40, 5200, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {44, 5220, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {48, 5240, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {52, 5260, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {56, 5280, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {60, 5300, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {64, 5320, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {100, 5500, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {104, 5520, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {108, 5540, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {112, 5560, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {116, 5580, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {120, 5600, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {124, 5620, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {128, 5640, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {132, 5660, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {136, 5680, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {140, 5700, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {144, 5720, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {149, 5745, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {153, 5765, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {157, 5785, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {161, 5805, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {165, 5825, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {169, 5845, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {173, 5865, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {177, 5885, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {181, 5905, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
     // 40 MHz channels
-    {std::make_tuple(38, 5190, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(46, 5230, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(54, 5270, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(62, 5310, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(102, 5510, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(110, 5550, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(118, 5590, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(126, 5630, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(134, 5670, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(142, 5710, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(151, 5755, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(159, 5795, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(167, 5835, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(175, 5875, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
+    {38, 5190, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {46, 5230, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {54, 5270, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {62, 5310, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {102, 5510, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {110, 5550, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {118, 5590, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {126, 5630, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {134, 5670, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {142, 5710, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {151, 5755, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {159, 5795, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {167, 5835, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {175, 5875, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
     // 80 MHz channels
-    {std::make_tuple(42, 5210, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(58, 5290, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(106, 5530, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(122, 5610, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(138, 5690, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(155, 5775, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(171, 5855, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
+    {42, 5210, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {58, 5290, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {106, 5530, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {122, 5610, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {138, 5690, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {155, 5775, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {171, 5855, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
     // 160 MHz channels
-    {std::make_tuple(50, 5250, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(114, 5570, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(163, 5815, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_5GHZ)},
+    {50, 5250, 160, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {114, 5570, 160, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+    {163, 5815, 160, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
 
     // 802.11p 10 MHz channels at the 5.855-5.925 band
-    {std::make_tuple(172, 5860, 10, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(174, 5870, 10, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(176, 5880, 10, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(178, 5890, 10, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(180, 5900, 10, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(182, 5910, 10, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(184, 5920, 10, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
+    {172, 5860, 10, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {174, 5870, 10, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {176, 5880, 10, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {178, 5890, 10, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {180, 5900, 10, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {182, 5910, 10, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {184, 5920, 10, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
 
     // 802.11p 5 MHz channels at the 5.855-5.925 band (for simplification, we consider the same
     // center frequencies as the 10 MHz channels)
-    {std::make_tuple(171, 5860, 5, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(173, 5870, 5, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(175, 5880, 5, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(177, 5890, 5, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(179, 5900, 5, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(181, 5910, 5, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
-    {std::make_tuple(183, 5920, 5, WIFI_PHY_80211p_CHANNEL, WIFI_PHY_BAND_5GHZ)},
+    {171, 5860, 5, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {173, 5870, 5, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {175, 5880, 5, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {177, 5890, 5, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {179, 5900, 5, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {181, 5910, 5, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
+    {183, 5920, 5, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::CH_80211P},
 
     // Now the 6 GHz channels for 802.11ax/be
     // 20 MHz channels
-    {std::make_tuple(1, 5955, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(5, 5975, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(9, 5995, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(13, 6015, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(17, 6035, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(21, 6055, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(25, 6075, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(29, 6095, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(33, 6115, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(37, 6135, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(41, 6155, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(45, 6175, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(49, 6195, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(53, 6215, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(57, 6235, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(61, 6255, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(65, 6275, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(69, 6295, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(73, 6315, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(77, 6335, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(81, 6355, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(85, 6375, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(89, 6395, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(93, 6415, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(97, 6435, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(101, 6455, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(105, 6475, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(109, 6495, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(113, 6515, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(117, 6535, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(121, 6555, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(125, 6575, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(129, 6595, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(133, 6615, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(137, 6635, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(141, 6655, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(145, 6675, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(149, 6695, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(153, 6715, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(157, 6735, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(161, 6755, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(165, 6775, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(169, 6795, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(173, 6815, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(177, 6835, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(181, 6855, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(185, 6875, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(189, 6895, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(193, 6915, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(197, 6935, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(201, 6955, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(205, 6975, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(209, 6995, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(213, 7015, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(217, 7035, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(221, 7055, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(225, 7075, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(229, 7095, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(233, 7115, 20, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
+    {1, 5955, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {5, 5975, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {9, 5995, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {13, 6015, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {17, 6035, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {21, 6055, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {25, 6075, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {29, 6095, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {33, 6115, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {37, 6135, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {41, 6155, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {45, 6175, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {49, 6195, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {53, 6215, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {57, 6235, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {61, 6255, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {65, 6275, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {69, 6295, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {73, 6315, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {77, 6335, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {81, 6355, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {85, 6375, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {89, 6395, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {93, 6415, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {97, 6435, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {101, 6455, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {105, 6475, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {109, 6495, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {113, 6515, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {117, 6535, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {121, 6555, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {125, 6575, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {129, 6595, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {133, 6615, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {137, 6635, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {141, 6655, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {145, 6675, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {149, 6695, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {153, 6715, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {157, 6735, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {161, 6755, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {165, 6775, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {169, 6795, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {173, 6815, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {177, 6835, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {181, 6855, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {185, 6875, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {189, 6895, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {193, 6915, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {197, 6935, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {201, 6955, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {205, 6975, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {209, 6995, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {213, 7015, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {217, 7035, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {221, 7055, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {225, 7075, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {229, 7095, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {233, 7115, 20, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
     // 40 MHz channels
-    {std::make_tuple(3, 5965, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(11, 6005, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(19, 6045, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(27, 6085, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(35, 6125, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(43, 6165, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(51, 6205, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(59, 6245, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(67, 6285, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(75, 6325, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(83, 6365, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(91, 6405, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(99, 6445, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(107, 6485, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(115, 6525, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(123, 6565, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(131, 6605, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(139, 6645, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(147, 6685, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(155, 6725, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(163, 6765, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(171, 6805, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(179, 6845, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(187, 6885, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(195, 6925, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(203, 6965, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(211, 7005, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(219, 7045, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(227, 7085, 40, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
+    {3, 5965, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {11, 6005, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {19, 6045, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {27, 6085, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {35, 6125, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {43, 6165, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {51, 6205, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {59, 6245, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {67, 6285, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {75, 6325, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {83, 6365, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {91, 6405, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {99, 6445, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {107, 6485, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {115, 6525, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {123, 6565, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {131, 6605, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {139, 6645, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {147, 6685, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {155, 6725, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {163, 6765, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {171, 6805, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {179, 6845, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {187, 6885, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {195, 6925, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {203, 6965, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {211, 7005, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {219, 7045, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {227, 7085, 40, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
     // 80 MHz channels
-    {std::make_tuple(7, 5985, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(23, 6065, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(39, 6145, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(55, 6225, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(71, 6305, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(87, 6385, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(103, 6465, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(119, 6545, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(135, 6625, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(151, 6705, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(167, 6785, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(183, 6865, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(199, 6945, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(215, 7025, 80, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
+    {7, 5985, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {23, 6065, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {39, 6145, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {55, 6225, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {71, 6305, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {87, 6385, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {103, 6465, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {119, 6545, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {135, 6625, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {151, 6705, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {167, 6785, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {183, 6865, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {199, 6945, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {215, 7025, 80, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
     // 160 MHz channels
-    {std::make_tuple(15, 6025, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(47, 6185, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(79, 6345, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(111, 6505, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(143, 6665, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(175, 6825, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-    {std::make_tuple(207, 6985, 160, WIFI_PHY_OFDM_CHANNEL, WIFI_PHY_BAND_6GHZ)},
-};
+    {15, 6025, 160, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {47, 6185, 160, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {79, 6345, 160, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {111, 6505, 160, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {143, 6665, 160, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {175, 6825, 160, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+    {207, 6985, 160, WIFI_PHY_BAND_6GHZ, FrequencyChannelType::OFDM},
+}};
+
+std::ostream&
+operator<<(std::ostream& os, const FrequencyChannelInfo& info)
+{
+    os << "{" << +info.number << " " << info.frequency << " " << info.width << " " << info.band
+       << "}";
+    return os;
+}
+
+bool
+WifiPhyOperatingChannel::Compare::operator()(const ConstIterator& first,
+                                             const ConstIterator& second) const
+{
+    return first->frequency < second->frequency;
+}
 
 WifiPhyOperatingChannel::WifiPhyOperatingChannel()
-    : WifiPhyOperatingChannel(m_frequencyChannels.end())
+    : WifiPhyOperatingChannel(ConstIteratorSet{})
 {
 }
 
 WifiPhyOperatingChannel::WifiPhyOperatingChannel(ConstIterator it)
-    : m_channelIt(it),
+    : WifiPhyOperatingChannel(ConstIteratorSet{it})
+{
+}
+
+WifiPhyOperatingChannel::WifiPhyOperatingChannel(const ConstIteratorSet& channelIts)
+    : m_channelIts(channelIts),
       m_primary20Index(0)
 {
     NS_LOG_FUNCTION(this);
+    NS_ASSERT_MSG(channelIts.size() <= 2,
+                  "Operating channel does not support more than 2 segments");
 }
 
 WifiPhyOperatingChannel::~WifiPhyOperatingChannel()
@@ -288,54 +301,129 @@
 bool
 WifiPhyOperatingChannel::IsSet() const
 {
-    return m_channelIt != m_frequencyChannels.end();
+    return !m_channelIts.empty();
 }
 
 void
-WifiPhyOperatingChannel::Set(uint8_t number,
-                             uint16_t frequency,
-                             uint16_t width,
-                             WifiStandard standard,
-                             WifiPhyBand band)
+WifiPhyOperatingChannel::Set(const std::vector<FrequencyChannelInfo>& segments,
+                             WifiStandard standard)
 {
-    NS_LOG_FUNCTION(this << +number << frequency << width << standard << band);
+    std::stringstream ss;
+    for (const auto& segment : segments)
+    {
+        ss << segment;
+    }
+    NS_LOG_FUNCTION(this << ss.str() << standard);
+
+    NS_ASSERT_MSG(!segments.empty(), "At least one frequency segment has to be provided");
+
+    ConstIteratorSet channelIts{};
+    for (const auto& segment : segments)
+    {
+        if (const auto channelIt =
+                FindFirst(segment.number, segment.frequency, segment.width, standard, segment.band);
+            channelIt != m_frequencyChannels.cend() &&
+            FindFirst(segment.number,
+                      segment.frequency,
+                      segment.width,
+                      standard,
+                      segment.band,
+                      std::next(channelIt)) == m_frequencyChannels.cend())
+        {
+            // a unique channel matches the specified criteria
+            channelIts.insert(channelIt);
+        }
+    }
 
-    auto channelIt = FindFirst(number, frequency, width, standard, band);
+    if (channelIts.size() != segments.size())
+    {
+        // if a unique channel was not found, throw an exception (mainly for unit testing this code)
+        throw std::runtime_error(
+            "WifiPhyOperatingChannel: No unique channel found given the specified criteria");
+    }
+
+    auto it = channelIts.begin();
+    for (std::size_t segment = 0; segment < (channelIts.size() - 1); ++segment)
+    {
+        const auto freq = (*it)->frequency;
+        const auto width = (*it)->width;
+        const auto band = (*it)->band;
+        const auto maxFreq = freq + (width / 2);
+        ++it;
+        const auto nextFreq = (*it)->frequency;
+        const auto nextWidth = (*it)->width;
+        const auto nextBand = (*it)->band;
+        const auto nextMinFreq = nextFreq - (nextWidth / 2);
+        if (maxFreq >= nextMinFreq)
+        {
+            throw std::runtime_error(
+                "WifiPhyOperatingChannel is invalid: segments cannot be adjacent nor overlap");
+        }
+        if (band != nextBand)
+        {
+            throw std::runtime_error("WifiPhyOperatingChannel is invalid: all segments shall "
+                                     "belong to the same band");
+        }
+    }
 
-    if (channelIt != m_frequencyChannels.end() &&
-        FindFirst(number, frequency, width, standard, band, std::next(channelIt)) ==
-            m_frequencyChannels.end())
+    if ((channelIts.size() > 2) ||
+        ((channelIts.size() == 2) &&
+         !std::all_of(channelIts.cbegin(), channelIts.cend(), [](const auto& channel) {
+             return channel->width == 80;
+         })))
     {
-        // a unique channel matches the specified criteria
-        m_channelIt = channelIt;
-        m_primary20Index = 0;
-        return;
+        throw std::runtime_error("WifiPhyOperatingChannel is invalid: only 80+80MHz is "
+                                 "expected as non-contiguous channel");
     }
 
-    // if a unique channel was not found, throw an exception (mainly for unit testing this code)
-    throw std::runtime_error(
-        "WifiPhyOperatingChannel: No unique channel found given the specified criteria");
+    m_channelIts = channelIts;
+    m_primary20Index = 0;
 }
 
 void
-WifiPhyOperatingChannel::SetDefault(uint16_t width, WifiStandard standard, WifiPhyBand band)
+WifiPhyOperatingChannel::SetDefault(MHz_u width, WifiStandard standard, WifiPhyBand band)
 {
     NS_LOG_FUNCTION(this << width << standard << band);
-
-    Set(GetDefaultChannelNumber(width, standard, band), 0, width, standard, band);
+    Set({{GetDefaultChannelNumber(width, standard, band), 0, width, band}}, standard);
 }
 
 uint8_t
-WifiPhyOperatingChannel::GetDefaultChannelNumber(uint16_t width,
-                                                 WifiStandard standard,
-                                                 WifiPhyBand band)
-{
-    auto channelIt = FindFirst(0, 0, width, standard, band);
-
+WifiPhyOperatingChannel::GetDefaultChannelNumber(
+    MHz_u width,
+    WifiStandard standard,
+    WifiPhyBand band,
+    std::optional<uint8_t> previousChannelNumber /* = std::nullopt */)
+{
+    auto start = m_frequencyChannels.begin();
+    auto prevSegmentChannelIt = m_frequencyChannels.end();
+    if (previousChannelNumber)
+    {
+        prevSegmentChannelIt = FindFirst(*previousChannelNumber, 0, width, standard, band, start);
+        if (prevSegmentChannelIt != m_frequencyChannels.end())
+        {
+            start = std::next(prevSegmentChannelIt);
+        }
+    }
+    auto channelIt = FindFirst(0, 0, width, standard, band, start);
+    if (prevSegmentChannelIt != m_frequencyChannels.end() && channelIt != m_frequencyChannels.end())
+    {
+        const auto prevFreq = prevSegmentChannelIt->frequency;
+        const auto prevWidth = prevSegmentChannelIt->width;
+        const auto prevMaxFreq = prevFreq + (prevWidth / 2);
+        const auto nextFreq = channelIt->frequency;
+        const auto nextWidth = channelIt->width;
+        const auto nextMinFreq = nextFreq - (nextWidth / 2);
+        if (prevMaxFreq <= nextMinFreq)
+        {
+            // segments are contiguous to each others, find next segment to make sure they are
+            // not contiguous
+            channelIt = FindFirst(0, 0, width, standard, band, std::next(channelIt));
+        }
+    }
     if (channelIt != m_frequencyChannels.end())
     {
         // a channel matches the specified criteria
-        return std::get<0>(*channelIt);
+        return channelIt->number;
     }
 
     // if a default channel was not found, throw an exception (mainly for unit testing this code)
@@ -345,32 +433,32 @@
 
 WifiPhyOperatingChannel::ConstIterator
 WifiPhyOperatingChannel::FindFirst(uint8_t number,
-                                   uint16_t frequency,
-                                   uint16_t width,
+                                   MHz_u frequency,
+                                   MHz_u width,
                                    WifiStandard standard,
                                    WifiPhyBand band,
                                    ConstIterator start)
 {
     // lambda used to match channels against the specified criteria
     auto predicate = [&](const FrequencyChannelInfo& channel) {
-        if (number != 0 && std::get<0>(channel) != number)
+        if (number != 0 && channel.number != number)
         {
             return false;
         }
-        if (frequency != 0 && std::get<1>(channel) != frequency)
+        if (frequency != 0 && channel.frequency != frequency)
         {
             return false;
         }
-        if (width != 0 && std::get<2>(channel) != width)
+        if (width != 0 && channel.width != width)
         {
             return false;
         }
         if (standard != WIFI_STANDARD_UNSPECIFIED &&
-            std::get<3>(channel) != GetFrequencyChannelType(standard))
+            channel.type != GetFrequencyChannelType(standard))
         {
             return false;
         }
-        if (std::get<4>(channel) != band)
+        if (band != WIFI_PHY_BAND_UNSPECIFIED && channel.band != band)
         {
             return false;
         }
@@ -393,70 +481,145 @@
 }
 
 uint8_t
-WifiPhyOperatingChannel::GetNumber() const
+WifiPhyOperatingChannel::GetNumber(std::size_t segment /* = 0 */) const
 {
     NS_ASSERT(IsSet());
-    return std::get<0>(*m_channelIt);
+    return (*std::next(m_channelIts.begin(), segment))->number;
 }
 
-uint16_t
-WifiPhyOperatingChannel::GetFrequency() const
+MHz_u
+WifiPhyOperatingChannel::GetFrequency(std::size_t segment /* = 0 */) const
 {
     NS_ASSERT(IsSet());
-    return std::get<1>(*m_channelIt);
+    return (*std::next(m_channelIts.begin(), segment))->frequency;
 }
 
-uint16_t
-WifiPhyOperatingChannel::GetWidth() const
+MHz_u
+WifiPhyOperatingChannel::GetWidth(std::size_t /* segment = 0 */) const
 {
     NS_ASSERT(IsSet());
-    return std::get<2>(*m_channelIt);
+    // Current specs only allow all segments to be the same width
+    return (*m_channelIts.cbegin())->width;
 }
 
 WifiPhyBand
 WifiPhyOperatingChannel::GetPhyBand() const
 {
     NS_ASSERT(IsSet());
-    return std::get<4>(*m_channelIt);
+    // Current specs only allow all segments to be the same band
+    return (*m_channelIts.cbegin())->band;
 }
 
 bool
 WifiPhyOperatingChannel::IsOfdm() const
 {
     NS_ASSERT(IsSet());
-    return std::get<FrequencyChannelType>(*m_channelIt) == WIFI_PHY_OFDM_CHANNEL;
+    return ((*m_channelIts.cbegin())->type == FrequencyChannelType::OFDM);
 }
 
 bool
 WifiPhyOperatingChannel::IsDsss() const
 {
     NS_ASSERT(IsSet());
-    return std::get<FrequencyChannelType>(*m_channelIt) == WIFI_PHY_DSSS_CHANNEL;
+    return ((*m_channelIts.cbegin())->type == FrequencyChannelType::DSSS);
 }
 
 bool
 WifiPhyOperatingChannel::Is80211p() const
 {
     NS_ASSERT(IsSet());
-    return std::get<FrequencyChannelType>(*m_channelIt) == WIFI_PHY_80211p_CHANNEL;
+    return ((*m_channelIts.cbegin())->type == FrequencyChannelType::CH_80211P);
 }
 
-uint8_t
-WifiPhyOperatingChannel::GetPrimaryChannelIndex(uint16_t primaryChannelWidth) const
+std::vector<uint8_t>
+WifiPhyOperatingChannel::GetNumbers() const
+{
+    NS_ASSERT(IsSet());
+    std::vector<uint8_t> channelNumbers{};
+    std::transform(m_channelIts.cbegin(),
+                   m_channelIts.cend(),
+                   std::back_inserter(channelNumbers),
+                   [](const auto& channel) { return channel->number; });
+    return channelNumbers;
+}
+
+std::vector<MHz_u>
+WifiPhyOperatingChannel::GetFrequencies() const
 {
-    NS_LOG_FUNCTION(this << primaryChannelWidth);
+    NS_ASSERT(IsSet());
+    std::vector<MHz_u> centerFrequencies{};
+    std::transform(m_channelIts.cbegin(),
+                   m_channelIts.cend(),
+                   std::back_inserter(centerFrequencies),
+                   [](const auto& channel) { return channel->frequency; });
+    return centerFrequencies;
+}
+
+std::vector<MHz_u>
+WifiPhyOperatingChannel::GetWidths() const
+{
+    NS_ASSERT(IsSet());
+    std::vector<MHz_u> channelWidths{};
+    std::transform(m_channelIts.cbegin(),
+                   m_channelIts.cend(),
+                   std::back_inserter(channelWidths),
+                   [](const auto& channel) { return channel->width; });
+    return channelWidths;
+}
 
-    if (primaryChannelWidth % 20 != 0)
+MHz_u
+WifiPhyOperatingChannel::GetTotalWidth() const
+{
+    NS_ASSERT(IsSet());
+    return std::accumulate(m_channelIts.cbegin(),
+                           m_channelIts.cend(),
+                           0,
+                           [](MHz_u sum, const auto& channel) { return sum + channel->width; });
+}
+
+WifiChannelWidthType
+WifiPhyOperatingChannel::GetWidthType() const
+{
+    NS_ASSERT(IsSet());
+    switch (static_cast<uint16_t>(GetTotalWidth()))
+    {
+    case 20:
+        return WifiChannelWidthType::CW_20MHZ;
+    case 22:
+        return WifiChannelWidthType::CW_22MHZ;
+    case 5:
+        return WifiChannelWidthType::CW_5MHZ;
+    case 10:
+        return WifiChannelWidthType::CW_10MHZ;
+    case 40:
+        return WifiChannelWidthType::CW_40MHZ;
+    case 80:
+        return WifiChannelWidthType::CW_80MHZ;
+    case 160:
+        return (m_channelIts.size() == 2) ? WifiChannelWidthType::CW_80_PLUS_80MHZ
+                                          : WifiChannelWidthType::CW_160MHZ;
+    case 2160:
+        return WifiChannelWidthType::CW_2160MHZ;
+    case 0:
+    default:
+        return WifiChannelWidthType::UNKNOWN;
+    }
+}
+
+uint8_t
+WifiPhyOperatingChannel::GetPrimaryChannelIndex(MHz_u primaryChannelWidth) const
+{
+    if (static_cast<uint16_t>(primaryChannelWidth) % 20 != 0)
     {
         NS_LOG_DEBUG("The operating channel width is not a multiple of 20 MHz; return 0");
         return 0;
     }
 
-    NS_ASSERT(primaryChannelWidth <= GetWidth());
+    NS_ASSERT(primaryChannelWidth <= GetTotalWidth());
 
     // the index of primary40 is half the index of primary20; the index of
     // primary80 is half the index of primary40, ...
-    uint16_t width = 20;
+    MHz_u width = 20;
     uint8_t index = m_primary20Index;
 
     while (width < primaryChannelWidth)
@@ -464,18 +627,15 @@
         index /= 2;
         width *= 2;
     }
-    NS_LOG_LOGIC("Return primary index " << +index);
     return index;
 }
 
 uint8_t
-WifiPhyOperatingChannel::GetSecondaryChannelIndex(uint16_t secondaryChannelWidth) const
+WifiPhyOperatingChannel::GetSecondaryChannelIndex(MHz_u secondaryChannelWidth) const
 {
-    NS_LOG_FUNCTION(this << secondaryChannelWidth);
     const uint8_t primaryIndex = GetPrimaryChannelIndex(secondaryChannelWidth);
     const uint8_t secondaryIndex =
         (primaryIndex % 2 == 0) ? (primaryIndex + 1) : (primaryIndex - 1);
-    NS_LOG_LOGIC("Return secondary index " << +secondaryIndex);
     return secondaryIndex;
 }
 
@@ -484,65 +644,129 @@
 {
     NS_LOG_FUNCTION(this << +index);
 
-    NS_ABORT_MSG_IF(index > 0 && index >= GetWidth() / 20, "Primary20 index out of range");
+    NS_ABORT_MSG_IF(index > 0 && index >= GetTotalWidth() / 20, "Primary20 index out of range");
     m_primary20Index = index;
 }
 
-uint16_t
-WifiPhyOperatingChannel::GetPrimaryChannelCenterFrequency(uint16_t primaryChannelWidth) const
+uint8_t
+WifiPhyOperatingChannel::GetPrimarySegmentIndex(MHz_u primaryChannelWidth) const
 {
-    uint16_t freq = GetFrequency() - GetWidth() / 2. +
-                    (GetPrimaryChannelIndex(primaryChannelWidth) + 0.5) * primaryChannelWidth;
-
-    NS_LOG_FUNCTION(this << primaryChannelWidth << freq);
-    return freq;
+    if (m_channelIts.size() < 2)
+    {
+        return 0;
+    }
+    // Note: this function assumes no more than 2 segments are used
+    const auto numIndices = GetTotalWidth() / primaryChannelWidth;
+    const auto primaryIndex = GetPrimaryChannelIndex(primaryChannelWidth);
+    return (primaryIndex >= (numIndices / 2)) ? 1 : 0;
 }
 
-uint16_t
-WifiPhyOperatingChannel::GetSecondaryChannelCenterFrequency(uint16_t secondaryChannelWidth) const
+uint8_t
+WifiPhyOperatingChannel::GetSecondarySegmentIndex(MHz_u primaryChannelWidth) const
 {
-    const uint8_t primaryIndex = GetPrimaryChannelIndex(secondaryChannelWidth);
-    const uint16_t primaryCenterFrequency = GetPrimaryChannelCenterFrequency(secondaryChannelWidth);
-    return (primaryIndex % 2 == 0) ? (primaryCenterFrequency + secondaryChannelWidth)
-                                   : (primaryCenterFrequency - secondaryChannelWidth);
+    NS_ABORT_MSG_IF(primaryChannelWidth > GetWidth(),
+                    "Primary channel width cannot be larger than the width of a frequency segment");
+    if (m_channelIts.size() < 2)
+    {
+        return 0;
+    }
+    // Note: this function assumes no more than 2 segments are used
+    const auto numIndices = GetTotalWidth() / primaryChannelWidth;
+    const auto secondaryIndex = GetSecondaryChannelIndex(primaryChannelWidth);
+    return (secondaryIndex >= (numIndices / 2)) ? 1 : 0;
+}
+
+MHz_u
+WifiPhyOperatingChannel::GetPrimaryChannelCenterFrequency(MHz_u primaryChannelWidth) const
+{
+    const auto segmentIndex = GetPrimarySegmentIndex(primaryChannelWidth);
+    // we assume here that all segments have the same width
+    const auto segmentWidth = GetWidth(segmentIndex);
+    // segmentOffset has to be an (unsigned) integer to ensure correct calculation
+    const uint8_t segmentOffset = (segmentIndex * (segmentWidth / primaryChannelWidth));
+    return GetFrequency(segmentIndex) - segmentWidth / 2. +
+           (GetPrimaryChannelIndex(primaryChannelWidth) - segmentOffset + 0.5) *
+               primaryChannelWidth;
+}
+
+MHz_u
+WifiPhyOperatingChannel::GetSecondaryChannelCenterFrequency(MHz_u secondaryChannelWidth) const
+{
+    const auto segmentIndex = GetSecondarySegmentIndex(secondaryChannelWidth);
+    // we assume here that all segments have the same width
+    const auto segmentWidth = GetWidth(segmentIndex);
+    // segmentOffset has to be an (unsigned) integer to ensure correct calculation
+    const uint8_t segmentOffset = (segmentIndex * (segmentWidth / secondaryChannelWidth));
+    return GetFrequency(segmentIndex) - segmentWidth / 2. +
+           (GetSecondaryChannelIndex(secondaryChannelWidth) - segmentOffset + 0.5) *
+               secondaryChannelWidth;
 }
 
 uint8_t
-WifiPhyOperatingChannel::GetPrimaryChannelNumber(uint16_t primaryChannelWidth,
+WifiPhyOperatingChannel::GetPrimaryChannelNumber(MHz_u primaryChannelWidth,
                                                  WifiStandard standard) const
 {
+    NS_ABORT_MSG_IF(primaryChannelWidth > GetWidth(),
+                    "Primary channel width cannot be larger than the width of a frequency segment");
     auto frequency = GetPrimaryChannelCenterFrequency(primaryChannelWidth);
     NS_ASSERT_MSG(IsSet(), "No channel set");
-    auto& [chanNumber, centerFreq, channelWidth, channelType, band] = *m_channelIt;
-    auto primaryChanIt = FindFirst(0, frequency, primaryChannelWidth, standard, band);
+    auto primaryChanIt = FindFirst(0, frequency, primaryChannelWidth, standard, GetPhyBand());
     NS_ASSERT_MSG(primaryChanIt != m_frequencyChannels.end(), "Primary channel number not found");
-    return std::get<0>(*primaryChanIt);
+    return primaryChanIt->number;
+}
+
+WifiPhyOperatingChannel
+WifiPhyOperatingChannel::GetPrimaryChannel(MHz_u primaryChannelWidth) const
+{
+    NS_ASSERT_MSG(IsSet(), "No channel set");
+    NS_ASSERT_MSG(primaryChannelWidth <= GetTotalWidth(),
+                  "Requested primary channel width ("
+                      << primaryChannelWidth << " MHz) exceeds total width (" << GetTotalWidth()
+                      << " MHz)");
+
+    if (primaryChannelWidth == GetTotalWidth())
+    {
+        return *this;
+    }
+
+    const auto frequency = GetPrimaryChannelCenterFrequency(primaryChannelWidth);
+    auto primaryChanIt =
+        FindFirst(0, frequency, primaryChannelWidth, WIFI_STANDARD_UNSPECIFIED, GetPhyBand());
+    NS_ABORT_MSG_IF(primaryChanIt == m_frequencyChannels.end(), "Primary channel number not found");
+
+    WifiPhyOperatingChannel primaryChannel(primaryChanIt);
+
+    const auto primaryIndex = m_primary20Index - (GetPrimaryChannelIndex(primaryChannelWidth) *
+                                                  (primaryChannelWidth / 20));
+    primaryChannel.SetPrimary20Index(primaryIndex);
+
+    return primaryChannel;
 }
 
 std::set<uint8_t>
-WifiPhyOperatingChannel::GetAll20MHzChannelIndicesInPrimary(uint16_t width) const
+WifiPhyOperatingChannel::GetAll20MHzChannelIndicesInPrimary(MHz_u width) const
 {
-    if (width > GetWidth())
+    if (width > GetTotalWidth())
     {
         // a primary channel of the given width does not exist
         return {};
     }
 
-    uint16_t currWidth = 20; // MHz
+    MHz_u currWidth = 20;
     std::set<uint8_t> indices;
     indices.insert(m_primary20Index);
 
     while (currWidth < width)
     {
         indices.merge(GetAll20MHzChannelIndicesInSecondary(indices));
-        currWidth <<= 1;
+        currWidth *= 2;
     }
 
     return indices;
 }
 
 std::set<uint8_t>
-WifiPhyOperatingChannel::GetAll20MHzChannelIndicesInSecondary(uint16_t width) const
+WifiPhyOperatingChannel::GetAll20MHzChannelIndicesInSecondary(MHz_u width) const
 {
     return GetAll20MHzChannelIndicesInSecondary(GetAll20MHzChannelIndicesInPrimary(width));
 }
@@ -551,21 +775,21 @@
 WifiPhyOperatingChannel::GetAll20MHzChannelIndicesInSecondary(
     const std::set<uint8_t>& primaryIndices) const
 {
-    if (primaryIndices.empty() || GetWidth() == 20)
+    if (primaryIndices.empty() || GetTotalWidth() == 20)
     {
         return {};
     }
 
     uint8_t size = 1;
-    uint16_t primaryWidth = 20; // MHz
+    MHz_u primaryWidth = 20;
 
     // find the width of the primary channel corresponding to the size of the given set
     while (size != primaryIndices.size())
     {
         size <<= 1;
-        primaryWidth <<= 1;
+        primaryWidth *= 2;
 
-        if (primaryWidth >= GetWidth())
+        if (primaryWidth >= GetTotalWidth())
         {
             // the width of the primary channel resulting from the given indices
             // exceeds the width of the operating channel
@@ -583,15 +807,15 @@
 }
 
 std::set<uint8_t>
-WifiPhyOperatingChannel::Get20MHzIndicesCoveringRu(HeRu::RuSpec ru, uint16_t width) const
+WifiPhyOperatingChannel::Get20MHzIndicesCoveringRu(HeRu::RuSpec ru, MHz_u width) const
 {
     auto ruType = ru.GetRuType();
 
     NS_ASSERT_MSG(HeRu::GetBandwidth(ruType) <= width,
                   "No RU of type " << ruType << " is contained in a " << width << " MHz channel");
-    NS_ASSERT_MSG(width <= GetWidth(),
+    NS_ASSERT_MSG(width <= GetTotalWidth(),
                   "The given width (" << width << " MHz) exceeds the operational width ("
-                                      << GetWidth() << " MHz)");
+                                      << GetTotalWidth() << ")");
 
     // trivial case: 2x996-tone RU
     if (ruType == HeRu::RU_2x996_TONE)
@@ -695,10 +919,16 @@
     return indices;
 }
 
+std::size_t
+WifiPhyOperatingChannel::GetNSegments() const
+{
+    return m_channelIts.size();
+}
+
 bool
 WifiPhyOperatingChannel::operator==(const WifiPhyOperatingChannel& other) const
 {
-    return m_channelIt == other.m_channelIt;
+    return m_channelIts == other.m_channelIts;
 }
 
 bool
@@ -712,8 +942,24 @@
 {
     if (channel.IsSet())
     {
-        os << "channel " << +channel.GetNumber() << " in band " << channel.GetPhyBand()
-           << " frequency " << channel.GetFrequency() << " width " << channel.GetWidth();
+        const auto numSegments = channel.GetNSegments();
+        for (std::size_t segmentId = 0; segmentId < numSegments; ++segmentId)
+        {
+            if (numSegments > 1)
+            {
+                os << "segment " << segmentId << " ";
+            }
+            os << "channel " << +channel.GetNumber() << " frequency " << channel.GetFrequency()
+               << " width " << channel.GetWidth() << " band " << channel.GetPhyBand();
+            if ((segmentId == 0) && (static_cast<uint16_t>(channel.GetTotalWidth()) % 20 == 0))
+            {
+                os << " primary20 " << +channel.GetPrimaryChannelIndex(20);
+            }
+            if (segmentId < numSegments - 1)
+            {
+                os << " ";
+            }
+        }
     }
     else
     {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy-operating-channel.h ns-3.43/src/wifi/model/wifi-phy-operating-channel.h
--- ns-3.42/src/wifi/model/wifi-phy-operating-channel.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy-operating-channel.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Stefano Avallone <stavallo@unina.it>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -22,21 +11,47 @@
 #define WIFI_PHY_OPERATING_CHANNEL_H
 
 #include "wifi-phy-band.h"
-#include "wifi-standards.h"
+#include "wifi-phy-common.h"
 
 #include "ns3/he-ru.h"
 
+#include <optional>
 #include <set>
 #include <tuple>
+#include <vector>
 
 namespace ns3
 {
 
 /**
- * A tuple (number, frequency, width, type, band) identifying a frequency channel
+ * A structure containing the information about a frequency channel
+ */
+struct FrequencyChannelInfo
+{
+    /**
+     * \brief spaceship operator.
+     *
+     * \param info the frequency channel info
+     * \returns -1 if the provided channel info is located at a lower channel number, 0 if the
+     * provided channel info is identical or 1 if the provided channel info is located at a higher
+     * channel number
+     */
+    auto operator<=>(const FrequencyChannelInfo& info) const = default;
+    uint8_t number{0};                                        ///< the channel number
+    MHz_u frequency{0};                                       ///< the center frequency
+    MHz_u width{0};                                           ///< the channel width
+    WifiPhyBand band{WifiPhyBand::WIFI_PHY_BAND_UNSPECIFIED}; ///< the PHY band
+    FrequencyChannelType type{FrequencyChannelType::OFDM};    ///< the frequency channel type
+};
+
+/**
+ * \brief Stream insertion operator.
+ *
+ * \param os the stream
+ * \param info the frequency channel info
+ * \returns a reference to the stream
  */
-typedef std::tuple<uint8_t, uint16_t, uint16_t, FrequencyChannelType, WifiPhyBand>
-    FrequencyChannelInfo;
+std::ostream& operator<<(std::ostream& os, const FrequencyChannelInfo& info);
 
 /**
  * \ingroup wifi
@@ -47,7 +62,24 @@
 {
   public:
     /// Typedef for a const iterator pointing to a channel in the set of available channels
-    typedef std::set<FrequencyChannelInfo>::const_iterator ConstIterator;
+    using ConstIterator = std::set<FrequencyChannelInfo>::const_iterator;
+
+    /// Comparison functor used to sort the segments by increasing frequencies
+    struct Compare
+    {
+        /**
+         * Functional operator for sorting the frequency segments.
+         *
+         * \param a const iterator pointing to the frequency channel for the first segment
+         * \param b const iterator pointing to the frequency channel for the second segment
+         * \return true if the center frequency of the first segment is lower than the center
+         * frequency of the second segment
+         */
+        bool operator()(const ConstIterator& a, const ConstIterator& b) const;
+    };
+
+    /// Typedef for a set of const iterator pointing to the segments of a channel
+    using ConstIteratorSet = std::set<ConstIterator, Compare>;
 
     /**
      * Create an uninitialized PHY operating channel.
@@ -62,6 +94,14 @@
      */
     WifiPhyOperatingChannel(ConstIterator it);
 
+    /**
+     * Create a PHY operating channel from iterators pointing to multiple frequency segments in the
+     * set of available channels.
+     *
+     * \param its the iterators pointing to frequency segments in the set of available channels
+     */
+    WifiPhyOperatingChannel(const ConstIteratorSet& its);
+
     virtual ~WifiPhyOperatingChannel();
 
     /**
@@ -101,57 +141,102 @@
      * If the channel width is a multiple of 20 MHz, the primary 20 MHz channel
      * is set to the 20 MHz subchannel with the lowest center frequency.
      *
-     * \param number the channel number (use 0 to leave it unspecified)
-     * \param frequency the channel center frequency in MHz (use 0 to leave it unspecified)
-     * \param width the channel width in MHz (use 0 to leave it unspecified)
+     * \param segments the frequency segments
      * \param standard the standard
-     * \param band the PHY band
      */
-    void Set(uint8_t number,
-             uint16_t frequency,
-             uint16_t width,
-             WifiStandard standard,
-             WifiPhyBand band);
+    void Set(const std::vector<FrequencyChannelInfo>& segments, WifiStandard standard);
     /**
      * Set the default channel of the given width and for the given standard and band.
      * If the channel width is a multiple of 20 MHz, the primary 20 MHz channel
      * is set to the 20 MHz subchannel with the lowest center frequency.
      *
-     * \param width the channel width in MHz
+     * \param width the channel width
      * \param standard the standard
      * \param band the PHY band
      */
-    void SetDefault(uint16_t width, WifiStandard standard, WifiPhyBand band);
+    void SetDefault(MHz_u width, WifiStandard standard, WifiPhyBand band);
 
     /**
-     * Get the default channel number of the given width and for the given standard
-     * and band.
+     * Get the default channel number for a given segment of the given width and for the given
+     * standard and band.
      *
-     * \param width the channel width in MHz
+     * \param width the channel width
      * \param standard the standard
      * \param band the PHY band
+     * \param previousChannelNumber the channel number of the previous (in frequency) segment (if
+     * non-contiguous operating channel is used). If there is no place for another segment that is
+     * not contiguous to that previous one (at a higher frequency), an error is thrown
      * \return the default channel number
      */
-    static uint8_t GetDefaultChannelNumber(uint16_t width, WifiStandard standard, WifiPhyBand band);
+    static uint8_t GetDefaultChannelNumber(
+        MHz_u width,
+        WifiStandard standard,
+        WifiPhyBand band,
+        std::optional<uint8_t> previousChannelNumber = std::nullopt);
 
     /**
-     * Return the channel number identifying the whole operating channel.
+     * Return the channel number for a given frequency segment.
+     * Segments are ordered by increasing frequencies, hence by default
+     * it returns the channel number of the segment occuping the lowest
+     * frequencies when a non-contiguous operating channel is used.
      *
-     * \return the channel number identifying the whole operating channel
+     * \param segment the index of the frequency segment (if operating channel is non-contiguous)
+     * \return the channel number for a given frequency segment
      */
-    uint8_t GetNumber() const;
+    uint8_t GetNumber(std::size_t segment = 0) const;
     /**
-     * Return the center frequency of the operating channel (in MHz).
+     * Return the center frequency for a given frequency segment.
+     * Segments are ordered by increasing frequencies, hence by default
+     * it returns the center frequency of the segment occuping the lowest
+     * frequencies when a non-contiguous operating channel is used.
      *
-     * \return the center frequency of the operating channel (in MHz)
+     * \param segment the index of the frequency segment (if operating channel is non-contiguous)
+     * \return the center frequency for a given frequency segment
      */
-    uint16_t GetFrequency() const;
+    MHz_u GetFrequency(std::size_t segment = 0) const;
     /**
-     * Return the width of the whole operating channel (in MHz).
+     * Return the channel width for a given frequency segment.
+     * Segments are ordered by increasing frequencies, hence by default
+     * it returns the channel width of the segment occuping the lowest
+     * frequencies when a non-contiguous operating channel is used.
      *
-     * \return the width of the whole operating channel (in MHz)
+     * \param segment the index of the frequency segment (if operating channel is non-contiguous)
+     * \return the channel width for a given frequency segment
      */
-    uint16_t GetWidth() const;
+    MHz_u GetWidth(std::size_t segment = 0) const;
+    /**
+     * Return the width of the whole operating channel.
+     *
+     * \return the width of the whole operating channel
+     */
+    MHz_u GetTotalWidth() const;
+    /**
+     * Return the channel number per segment.
+     * Segments are ordered by increasing frequencies.
+     *
+     * \return the channel number per segment
+     */
+    std::vector<uint8_t> GetNumbers() const;
+    /**
+     * Return the center frequency per segment.
+     * Segments are ordered by increasing frequencies.
+     *
+     * \return the center frequency per segment
+     */
+    std::vector<MHz_u> GetFrequencies() const;
+    /**
+     * Return the channel width per segment.
+     * Segments are ordered by increasing frequencies.
+     *
+     * \return the channel width per segment
+     */
+    std::vector<MHz_u> GetWidths() const;
+    /**
+     * Return the width type of the operating channel.
+     *
+     * \return the width type of the operating channel
+     */
+    WifiChannelWidthType GetWidthType() const;
     /**
      * Return the PHY band of the operating channel
      *
@@ -182,24 +267,24 @@
      * primary channel of the given width within the operating channel (0 indicates
      * the 20 MHz subchannel with the lowest center frequency). Otherwise, return 0.
      *
-     * \param primaryChannelWidth the width of the primary channel in MHz
+     * \param primaryChannelWidth the width of the primary channel
      * \return the index of the requested primary channel within the operating channel
      */
-    uint8_t GetPrimaryChannelIndex(uint16_t primaryChannelWidth) const;
+    uint8_t GetPrimaryChannelIndex(MHz_u primaryChannelWidth) const;
 
     /**
      * If the operating channel width is made of a multiple of 20 MHz, return the index of the
      * secondary channel of the given width within the operating channel (0 indicates
      * the 20 MHz subchannel with the lowest center frequency). Otherwise, return 0.
      *
-     * \param secondaryChannelWidth the width of the secondary channel in MHz
+     * \param secondaryChannelWidth the width of the secondary channel
      * \return the index of the requested secondary channel within the operating channel
      */
-    uint8_t GetSecondaryChannelIndex(uint16_t secondaryChannelWidth) const;
+    uint8_t GetSecondaryChannelIndex(MHz_u secondaryChannelWidth) const;
 
     /**
      * Set the index of the primary 20 MHz channel (0 indicates the 20 MHz subchannel
-     * with the lowest center frequency).
+     * with the lowest center frequency among all segments).
      *
      * \param index the index of the primary 20 MHz channel
      */
@@ -208,41 +293,41 @@
     /**
      * Get the center frequency of the primary channel of the given width.
      *
-     * \param primaryChannelWidth the width of the primary channel in MHz
+     * \param primaryChannelWidth the width of the primary channel
      * \return the center frequency of the primary channel of the given width
      */
-    uint16_t GetPrimaryChannelCenterFrequency(uint16_t primaryChannelWidth) const;
+    MHz_u GetPrimaryChannelCenterFrequency(MHz_u primaryChannelWidth) const;
 
     /**
      * Get the center frequency of the secondary channel of the given width.
      *
-     * \param secondaryChannelWidth the width of the secondary channel in MHz
+     * \param secondaryChannelWidth the width of the secondary channel
      * \return the center frequency of the secondary channel of the given width
      */
-    uint16_t GetSecondaryChannelCenterFrequency(uint16_t secondaryChannelWidth) const;
+    MHz_u GetSecondaryChannelCenterFrequency(MHz_u secondaryChannelWidth) const;
 
     /**
      * Get the channel indices of all the 20 MHz channels included in the primary
      * channel of the given width, if such primary channel exists, or an empty set,
      * otherwise.
      *
-     * \param width the width in MHz of the primary channel
+     * \param width the width of the primary channel
      * \return the channel indices of all the 20 MHz channels included in the primary
      *         channel of the given width, if such primary channel exists, or an empty set,
      *         otherwise
      */
-    std::set<uint8_t> GetAll20MHzChannelIndicesInPrimary(uint16_t width) const;
+    std::set<uint8_t> GetAll20MHzChannelIndicesInPrimary(MHz_u width) const;
     /**
      * Get the channel indices of all the 20 MHz channels included in the secondary
      * channel of the given width, if such secondary channel exists, or an empty set,
      * otherwise.
      *
-     * \param width the width in MHz of the secondary channel
+     * \param width the width of the secondary channel
      * \return the channel indices of all the 20 MHz channels included in the secondary
      *         channel of the given width, if such secondary channel exists, or an empty set,
      *         otherwise
      */
-    std::set<uint8_t> GetAll20MHzChannelIndicesInSecondary(uint16_t width) const;
+    std::set<uint8_t> GetAll20MHzChannelIndicesInSecondary(MHz_u width) const;
     /**
      * Get the channel indices of all the 20 MHz channels included in the secondary
      * channel corresponding to the given primary channel, if such secondary channel
@@ -258,11 +343,11 @@
         const std::set<uint8_t>& primaryIndices) const;
 
     /**
-     * Find the first channel matching the specified parameters.
+     * Find the first frequency segment matching the specified parameters.
      *
      * \param number the channel number (use 0 to leave it unspecified)
      * \param frequency the channel center frequency in MHz (use 0 to leave it unspecified)
-     * \param width the channel width in MHz (use 0 to leave it unspecified)
+     * \param width the channel width (use 0 to leave it unspecified)
      * \param standard the standard (use WIFI_STANDARD_UNSPECIFIED not to check whether a
      *                 channel is suitable for a specific standard)
      * \param band the PHY band
@@ -271,35 +356,68 @@
      *         of the set of available channels
      */
     static ConstIterator FindFirst(uint8_t number,
-                                   uint16_t frequency,
-                                   uint16_t width,
+                                   MHz_u frequency,
+                                   MHz_u width,
                                    WifiStandard standard,
                                    WifiPhyBand band,
                                    ConstIterator start = m_frequencyChannels.begin());
 
     /**
      * Get channel number of the primary channel
-     * \param primaryChannelWidth the width of the primary channel (MHz)
+     * \param primaryChannelWidth the width of the primary channel
      * \param standard the standard
      *
      * \return channel number of the primary channel
      */
-    uint8_t GetPrimaryChannelNumber(uint16_t primaryChannelWidth, WifiStandard standard) const;
+    uint8_t GetPrimaryChannelNumber(MHz_u primaryChannelWidth, WifiStandard standard) const;
+
+    /**
+     * Get a WifiPhyOperatingChannel object corresponding to the primary channel of the given width.
+     *
+     * \param primaryChannelWidth the width of the primary channel in MHz
+     * \return a WifiPhyOperatingChannel object corresponding to the primary channel of the given
+     *         width
+     */
+    WifiPhyOperatingChannel GetPrimaryChannel(MHz_u primaryChannelWidth) const;
 
     /**
      * Get the channel indices of the minimum subset of 20 MHz channels containing the given RU.
      *
      * \param ru the given RU
-     * \param width the width in MHz of the channel to which the given RU refers to; normally,
-     *              it is the width in MHz of the PPDU for which the RU is allocated
+     * \param width the width of the channel to which the given RU refers to; normally,
+     *              it is the width of the PPDU for which the RU is allocated
      * \return the channel indices of the minimum subset of 20 MHz channels containing the given RU
      */
-    std::set<uint8_t> Get20MHzIndicesCoveringRu(HeRu::RuSpec ru, uint16_t width) const;
+    std::set<uint8_t> Get20MHzIndicesCoveringRu(HeRu::RuSpec ru, MHz_u width) const;
+
+    /**
+     * Get the index of the segment that contains a given primary channel.
+     *
+     * \param primaryChannelWidth the width of the primary channel
+     * \return the index of the segment that contains the primary channel
+     */
+    uint8_t GetPrimarySegmentIndex(MHz_u primaryChannelWidth) const;
+
+    /**
+     * Get the index of the segment that contains a given secondary channel.
+     *
+     * \param secondaryChannelWidth the width of the secondary channel
+     * \return the index of the segment that contains the secondary channel
+     */
+    uint8_t GetSecondarySegmentIndex(MHz_u secondaryChannelWidth) const;
+
+    /**
+     * Get the number of frequency segments in the operating channel.
+     * This is only more than one if a non-contiguous operating channel is used.
+     *
+     * \return the number of frequency segments
+     */
+    std::size_t GetNSegments() const;
 
   private:
-    ConstIterator m_channelIt; //!< const iterator pointing to the configured frequency channel
-    uint8_t m_primary20Index;  /**< index of the primary20 channel (0 indicates the 20 MHz
-                                    subchannel with the lowest center frequency) */
+    ConstIteratorSet m_channelIts; //!< const iterators pointing to the configured frequency channel
+    uint8_t m_primary20Index;      /**< index of the primary20 channel (0 indicates the 20 MHz
+                                        subchannel with the lowest center frequency) */
 };
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy-state.h ns-3.43/src/wifi/model/wifi-phy-state.h
--- ns-3.42/src/wifi/model/wifi-phy-state.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy-state.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -97,21 +86,26 @@
 
 } // namespace ns3
 
+/**
+ * Deprecated WifiPhyState enums.
+ *
+ * Use WifiPhyState class enum symbols instead.
+ * @{
+ */
 NS_DEPRECATED_3_42("Use WifiPhyState::IDLE instead")
-static constexpr auto IDLE = ns3::WifiPhyState::IDLE; //!< \deprecated See WifiPhyState::IDLE
+static constexpr auto IDLE = ns3::WifiPhyState::IDLE;
 NS_DEPRECATED_3_42("Use WifiPhyState::CCA_BUSY instead")
-static constexpr auto CCA_BUSY =
-    ns3::WifiPhyState::CCA_BUSY; //!< \deprecated See WifiPhyState::CCA_BUSY
+static constexpr auto CCA_BUSY = ns3::WifiPhyState::CCA_BUSY;
 NS_DEPRECATED_3_42("Use WifiPhyState::TX instead")
-static constexpr auto TX = ns3::WifiPhyState::TX; //!< \deprecated See WifiPhyState::TX
+static constexpr auto TX = ns3::WifiPhyState::TX;
 NS_DEPRECATED_3_42("Use WifiPhyState::RX instead")
-static constexpr auto RX = ns3::WifiPhyState::RX; //!< \deprecated See WifiPhyState::RX
+static constexpr auto RX = ns3::WifiPhyState::RX;
 NS_DEPRECATED_3_42("Use WifiPhyState::SWITCHING instead")
-static constexpr auto SWITCHING =
-    ns3::WifiPhyState::SWITCHING; //!< \deprecated See WifiPhyState::SWITCHING
+static constexpr auto SWITCHING = ns3::WifiPhyState::SWITCHING;
 NS_DEPRECATED_3_42("Use WifiPhyState::SLEEP instead")
-static constexpr auto SLEEP = ns3::WifiPhyState::SLEEP; //!< \deprecated See WifiPhyState::SLEEP
+static constexpr auto SLEEP = ns3::WifiPhyState::SLEEP;
 NS_DEPRECATED_3_42("Use WifiPhyState::OFF instead")
-static constexpr auto OFF = ns3::WifiPhyState::OFF; //!< \deprecated See WifiPhyState::OFF
+static constexpr auto OFF = ns3::WifiPhyState::OFF;
+/**@}*/
 
 #endif /* WIFI_PHY_STATE_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy-state-helper.cc ns-3.43/src/wifi/model/wifi-phy-state-helper.cc
--- ns-3.42/src/wifi/model/wifi-phy-state-helper.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy-state-helper.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -320,11 +309,11 @@
 
 void
 WifiPhyStateHelper::SwitchToTx(Time txDuration,
-                               WifiConstPsduMap psdus,
-                               double txPowerDbm,
+                               const WifiConstPsduMap& psdus,
+                               dBm_u txPower,
                                const WifiTxVector& txVector)
 {
-    NS_LOG_FUNCTION(this << txDuration << psdus << txPowerDbm << txVector);
+    NS_LOG_FUNCTION(this << txDuration << psdus << txPower << txVector);
     if (!m_txTrace.IsEmpty())
     {
         for (const auto& psdu : psdus)
@@ -335,7 +324,7 @@
                       txVector.GetTxPowerLevel());
         }
     }
-    Time now = Simulator::Now();
+    const auto now = Simulator::Now();
     switch (GetState())
     {
     case WifiPhyState::RX:
@@ -358,7 +347,7 @@
     m_previousStateChangeTime = now;
     m_endTx = now + txDuration;
     m_startTx = now;
-    NotifyListeners(&WifiPhyListener::NotifyTxStart, txDuration, txPowerDbm);
+    NotifyListeners(&WifiPhyListener::NotifyTxStart, txDuration, txPower);
 }
 
 void
@@ -404,6 +393,9 @@
     case WifiPhyState::IDLE:
         LogPreviousIdleAndCcaBusyStates();
         break;
+    case WifiPhyState::SWITCHING:
+        // do nothing
+        break;
     default:
         NS_FATAL_ERROR("Invalid WifiPhy state.");
         break;
@@ -573,7 +565,7 @@
 }
 
 void
-WifiPhyStateHelper::SwitchFromRxAbort(uint16_t operatingWidth)
+WifiPhyStateHelper::SwitchFromRxAbort(MHz_u operatingWidth)
 {
     NS_LOG_FUNCTION(this << operatingWidth);
     NS_ASSERT(IsStateCcaBusy()); // abort is called (with OBSS_PD_CCA_RESET reason) before RX is set
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-phy-state-helper.h ns-3.43/src/wifi/model/wifi-phy-state-helper.h
--- ns-3.42/src/wifi/model/wifi-phy-state-helper.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-phy-state-helper.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -182,12 +171,12 @@
      *
      * \param txDuration the duration of the PPDU to transmit
      * \param psdus the PSDUs in the transmitted PPDU (only one unless it is a MU PPDU)
-     * \param txPowerDbm the nominal TX power in dBm
+     * \param txPower the nominal TX power
      * \param txVector the TX vector for the transmission
      */
     void SwitchToTx(Time txDuration,
-                    WifiConstPsduMap psdus,
-                    double txPowerDbm,
+                    const WifiConstPsduMap& psdus,
+                    dBm_u txPower,
                     const WifiTxVector& txVector);
     /**
      * Switch state to RX for the given duration.
@@ -257,9 +246,9 @@
     void SwitchFromRxEndError();
     /**
      * Abort current reception following a CCA reset request.
-     * \param operatingWidth the channel width the PHY is operating on (in MHz)
+     * \param operatingWidth the channel width the PHY is operating on
      */
-    void SwitchFromRxAbort(uint16_t operatingWidth);
+    void SwitchFromRxAbort(MHz_u operatingWidth);
     /**
      * Switch to CCA busy.
      *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-ppdu.cc ns-3.43/src/wifi/model/wifi-ppdu.cc
--- ns-3.42/src/wifi/model/wifi-ppdu.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-ppdu.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  */
@@ -24,6 +13,49 @@
 
 #include "ns3/log.h"
 
+namespace
+{
+/**
+ * Get the center frequency of each segment covered by the provided channel width. If the specified
+ * channel width is contained in a single frequency segment, a single center frequency is returned.
+ * If the specified channel width is spread over multiple frequency segments (e.g. 160 MHz if
+ * operating channel is 80+80MHz), multiple center frequencies are returned.
+ *
+ * \param channel the operating channel of the PHY
+ * \param channelWidth the channel width
+ * \return the center frequency of each segment covered by the given width
+ */
+std::vector<ns3::MHz_u>
+GetChannelCenterFrequenciesPerSegment(const ns3::WifiPhyOperatingChannel& channel,
+                                      ns3::MHz_u channelWidth)
+{
+    if (!channel.IsSet())
+    {
+        return {};
+    }
+    std::vector<ns3::MHz_u> freqs{};
+    const auto width = std::min(channelWidth, channel.GetWidth(0));
+    const auto primarySegmentIndex = channel.GetPrimarySegmentIndex(width);
+    const auto secondarySegmentIndex = channel.GetSecondarySegmentIndex(width);
+    const auto primaryIndex = channel.GetPrimaryChannelIndex(channelWidth);
+    const auto segmentIndices =
+        ((channel.GetNSegments() < 2) || (channelWidth <= channel.GetWidth(primarySegmentIndex)))
+            ? std::vector<uint8_t>{primarySegmentIndex}
+            : std::vector<uint8_t>{primarySegmentIndex, secondarySegmentIndex};
+    for (auto segmentIndex : segmentIndices)
+    {
+        const auto segmentFrequency = channel.GetFrequency(segmentIndex);
+        const auto segmentWidth = channel.GetWidth(segmentIndex);
+        // segmentOffset has to be an (unsigned) integer to ensure correct calculation
+        const uint8_t segmentOffset = (primarySegmentIndex * (segmentWidth / channelWidth));
+        const auto freq =
+            segmentFrequency - (segmentWidth / 2.) + (primaryIndex - segmentOffset + 0.5) * width;
+        freqs.push_back(freq);
+    }
+    return freqs;
+}
+} // namespace
+
 namespace ns3
 {
 
@@ -35,9 +67,7 @@
                    uint64_t uid /* = UINT64_MAX */)
     : m_preamble(txVector.GetPreambleType()),
       m_modulation(txVector.IsValid() ? txVector.GetModulationClass() : WIFI_MOD_CLASS_UNKNOWN),
-      m_txCenterFreq(channel.IsSet()
-                         ? channel.GetPrimaryChannelCenterFrequency(txVector.GetChannelWidth())
-                         : 0),
+      m_txCenterFreqs(GetChannelCenterFrequenciesPerSegment(channel, txVector.GetChannelWidth())),
       m_uid(uid),
       m_txVector(txVector),
       m_operatingChannel(channel),
@@ -57,9 +87,7 @@
     : m_preamble(txVector.GetPreambleType()),
       m_modulation(txVector.IsValid() ? txVector.GetMode(psdus.begin()->first).GetModulationClass()
                                       : WIFI_MOD_CLASS_UNKNOWN),
-      m_txCenterFreq(channel.IsSet()
-                         ? channel.GetPrimaryChannelCenterFrequency(txVector.GetChannelWidth())
-                         : 0),
+      m_txCenterFreqs(GetChannelCenterFrequenciesPerSegment(channel, txVector.GetChannelWidth())),
       m_uid(uid),
       m_txVector(txVector),
       m_operatingChannel(channel),
@@ -142,54 +170,63 @@
     return m_modulation;
 }
 
-uint16_t
+MHz_u
 WifiPpdu::GetTxChannelWidth() const
 {
     return m_txChannelWidth;
 }
 
-uint16_t
-WifiPpdu::GetTxCenterFreq() const
+std::vector<MHz_u>
+WifiPpdu::GetTxCenterFreqs() const
 {
-    return m_txCenterFreq;
+    return m_txCenterFreqs;
 }
 
 bool
-WifiPpdu::DoesOverlapChannel(uint16_t minFreq, uint16_t maxFreq) const
+WifiPpdu::DoesOverlapChannel(MHz_u minFreq, MHz_u maxFreq) const
 {
-    NS_LOG_FUNCTION(this << m_txCenterFreq << minFreq << maxFreq);
-    uint16_t minTxFreq = m_txCenterFreq - m_txChannelWidth / 2;
-    uint16_t maxTxFreq = m_txCenterFreq + m_txChannelWidth / 2;
-    /**
-     * The PPDU does not overlap the channel in two cases.
-     *
-     * First non-overlapping case:
-     *
-     *                                        ┌─────────┐
-     *                                PPDU    │ Nominal │
-     *                                        │  Band   │
-     *                                        └─────────┘
-     *                                   minTxFreq   maxTxFreq
-     *
-     *       minFreq                       maxFreq
-     *         ┌──────────────────────────────┐
-     *         │           Channel            │
-     *         └──────────────────────────────┘
-     *
-     * Second non-overlapping case:
-     *
-     *         ┌─────────┐
-     * PPDU    │ Nominal │
-     *         │  Band   │
-     *         └─────────┘
-     *    minTxFreq   maxTxFreq
-     *
-     *                 minFreq                       maxFreq
-     *                   ┌──────────────────────────────┐
-     *                   │           Channel            │
-     *                   └──────────────────────────────┘
-     */
-    return minTxFreq < maxFreq && maxTxFreq > minFreq;
+    NS_LOG_FUNCTION(this << minFreq << maxFreq);
+    // all segments have the same width
+    const MHz_u txChannelWidth = (m_txChannelWidth / m_txCenterFreqs.size());
+    for (auto txCenterFreq : m_txCenterFreqs)
+    {
+        const auto minTxFreq = txCenterFreq - txChannelWidth / 2;
+        const auto maxTxFreq = txCenterFreq + txChannelWidth / 2;
+        /**
+         * The PPDU does not overlap the channel in two cases.
+         *
+         * First non-overlapping case:
+         *
+         *                                        ┌─────────┐
+         *                                PPDU    │ Nominal │
+         *                                        │  Band   │
+         *                                        └─────────┘
+         *                                   minTxFreq   maxTxFreq
+         *
+         *       minFreq                       maxFreq
+         *         ┌──────────────────────────────┐
+         *         │           Channel            │
+         *         └──────────────────────────────┘
+         *
+         * Second non-overlapping case:
+         *
+         *         ┌─────────┐
+         * PPDU    │ Nominal │
+         *         │  Band   │
+         *         └─────────┘
+         *    minTxFreq   maxTxFreq
+         *
+         *                 minFreq                       maxFreq
+         *                   ┌──────────────────────────────┐
+         *                   │           Channel            │
+         *                   └──────────────────────────────┘
+         */
+        if ((minTxFreq < maxFreq) && (maxTxFreq > minFreq))
+        {
+            return true;
+        }
+    }
+    return false;
 }
 
 uint64_t
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-ppdu.h ns-3.43/src/wifi/model/wifi-ppdu.h
--- ns-3.42/src/wifi/model/wifi-ppdu.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-ppdu.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  */
@@ -27,6 +16,7 @@
 #include <list>
 #include <optional>
 #include <unordered_map>
+#include <vector>
 
 /**
  * \file
@@ -132,23 +122,23 @@
      * Get the channel width over which the PPDU will effectively be
      * transmitted.
      *
-     * \return the effective channel width (in MHz) used for the tranmsission
+     * \return the effective channel width used for the tranmsission
      */
-    virtual uint16_t GetTxChannelWidth() const;
+    virtual MHz_u GetTxChannelWidth() const;
 
     /**
-     * \return the center frequency (MHz) used for the transmission of this PPDU
+     * \return the center frequency per segment used for the transmission of this PPDU
      */
-    uint16_t GetTxCenterFreq() const;
+    std::vector<MHz_u> GetTxCenterFreqs() const;
 
     /**
      * Check whether the given PPDU overlaps a given channel.
      *
-     * \param minFreq the minimum frequency (MHz) of the channel
-     * \param maxFreq the maximum frequency (MHz) of the channel
+     * \param minFreq the minimum frequency of the channel
+     * \param maxFreq the maximum frequency of the channel
      * \return true if this PPDU overlaps the channel, false otherwise
      */
-    bool DoesOverlapChannel(uint16_t minFreq, uint16_t maxFreq) const;
+    bool DoesOverlapChannel(MHz_u minFreq, MHz_u maxFreq) const;
 
     /**
      * Get the modulation used for the PPDU.
@@ -199,11 +189,12 @@
      */
     virtual std::string PrintPayload() const;
 
-    WifiPreamble m_preamble;          //!< the PHY preamble
-    WifiModulationClass m_modulation; //!< the modulation used for the transmission of this PPDU
-    WifiConstPsduMap m_psdus;         //!< the PSDUs contained in this PPDU
-    uint16_t m_txCenterFreq; //!< the center frequency (MHz) used for the transmission of this PPDU
-    uint64_t m_uid;          //!< the unique ID of this PPDU
+    WifiPreamble m_preamble;            //!< the PHY preamble
+    WifiModulationClass m_modulation;   //!< the modulation used for the transmission of this PPDU
+    WifiConstPsduMap m_psdus;           //!< the PSDUs contained in this PPDU
+    std::vector<MHz_u> m_txCenterFreqs; //!< the center frequency per segment used for the
+                                        //!< transmission of this PPDU
+    uint64_t m_uid;                     //!< the unique ID of this PPDU
     mutable std::optional<WifiTxVector>
         m_txVector; //!< the TXVECTOR at TX PHY or the reconstructed TXVECTOR at RX PHY (or
                     //!< std::nullopt if TXVECTOR has not been reconstructed yet)
@@ -223,12 +214,12 @@
                             //!< returned WifiTxVector)
     uint8_t m_txAntennas;   //!< the number of antennas used to transmit this PPDU
 
-    uint16_t m_txChannelWidth; /**< The channel width (MHz) used for the transmission of this
+    MHz_u m_txChannelWidth; /**< The channel width used for the transmission of this
                                          PPDU. This has to be stored since channel width can not
                                          always be obtained from the PHY headers, especially for
                                          non-HT PPDU, since we do not sense the spectrum to
                                          determine the occupied channel width for simplicity. */
-};                             // class WifiPpdu
+};                          // class WifiPpdu
 
 /**
  * \brief Stream insertion operator.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-protection.cc ns-3.43/src/wifi/model/wifi-protection.cc
--- ns-3.42/src/wifi/model/wifi-protection.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-protection.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-protection.h ns-3.43/src/wifi/model/wifi-protection.h
--- ns-3.42/src/wifi/model/wifi-protection.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-protection.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-protection-manager.cc ns-3.43/src/wifi/model/wifi-protection-manager.cc
--- ns-3.42/src/wifi/model/wifi-protection-manager.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-protection-manager.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -80,7 +69,7 @@
 
 void
 WifiProtectionManager::AddUserInfoToMuRts(CtrlTriggerHeader& muRts,
-                                          uint16_t txWidth,
+                                          MHz_u txWidth,
                                           const Mac48Address& receiver) const
 {
     NS_LOG_FUNCTION(this << muRts << txWidth << receiver);
@@ -91,16 +80,17 @@
     auto apMac = StaticCast<ApWifiMac>(m_mac);
     ui.SetAid12(apMac->GetAssociationId(receiver, m_linkId));
 
-    const uint16_t ctsTxWidth =
+    const auto ctsTxWidth =
         std::min(txWidth, GetWifiRemoteStationManager()->GetChannelWidthSupported(receiver));
     auto phy = m_mac->GetWifiPhy(m_linkId);
     std::size_t primaryIdx = phy->GetOperatingChannel().GetPrimaryChannelIndex(ctsTxWidth);
-    if (phy->GetChannelWidth() == 160 && ctsTxWidth <= 40 && primaryIdx >= 80 / ctsTxWidth)
+    std::size_t idx80MHz = 80 / ctsTxWidth;
+    if ((phy->GetChannelWidth() == 160) && (ctsTxWidth <= 40) && (primaryIdx >= idx80MHz))
     {
         // the primary80 is in the higher part of the 160 MHz channel
         primaryIdx -= 80 / ctsTxWidth;
     }
-    switch (ctsTxWidth)
+    switch (static_cast<uint16_t>(ctsTxWidth))
     {
     case 20:
         ui.SetMuRtsRuAllocation(61 + primaryIdx);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-protection-manager.h ns-3.43/src/wifi/model/wifi-protection-manager.h
--- ns-3.42/src/wifi/model/wifi-protection-manager.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-protection-manager.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -110,7 +99,7 @@
      * \param receiver the MAC address of the solicited station
      */
     void AddUserInfoToMuRts(CtrlTriggerHeader& muRts,
-                            uint16_t txWidth,
+                            MHz_u txWidth,
                             const Mac48Address& receiver) const;
 
     Ptr<WifiMac> m_mac; //!< MAC which is using this Protection Manager
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-psdu.cc ns-3.43/src/wifi/model/wifi-psdu.cc
--- ns-3.42/src/wifi/model/wifi-psdu.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-psdu.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-psdu.h ns-3.43/src/wifi/model/wifi-psdu.h
--- ns-3.42/src/wifi/model/wifi-psdu.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-psdu.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-radio-energy-model.cc ns-3.43/src/wifi/model/wifi-radio-energy-model.cc
--- ns-3.42/src/wifi/model/wifi-radio-energy-model.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-radio-energy-model.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sidharth Nabar <snabar@uw.edu>, He Wu <mdzz@u.washington.edu>
  */
@@ -46,37 +35,37 @@
                           DoubleValue(0.273), // idle mode = 273mA
                           MakeDoubleAccessor(&WifiRadioEnergyModel::SetIdleCurrentA,
                                              &WifiRadioEnergyModel::GetIdleCurrentA),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<ampere_u>())
             .AddAttribute("CcaBusyCurrentA",
                           "The default radio CCA Busy State current in Ampere.",
                           DoubleValue(0.273), // default to be the same as idle mode
                           MakeDoubleAccessor(&WifiRadioEnergyModel::SetCcaBusyCurrentA,
                                              &WifiRadioEnergyModel::GetCcaBusyCurrentA),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<ampere_u>())
             .AddAttribute("TxCurrentA",
                           "The radio TX current in Ampere.",
                           DoubleValue(0.380), // transmit at 0dBm = 380mA
                           MakeDoubleAccessor(&WifiRadioEnergyModel::SetTxCurrentA,
                                              &WifiRadioEnergyModel::GetTxCurrentA),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<ampere_u>())
             .AddAttribute("RxCurrentA",
                           "The radio RX current in Ampere.",
                           DoubleValue(0.313), // receive mode = 313mA
                           MakeDoubleAccessor(&WifiRadioEnergyModel::SetRxCurrentA,
                                              &WifiRadioEnergyModel::GetRxCurrentA),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<ampere_u>())
             .AddAttribute("SwitchingCurrentA",
                           "The default radio Channel Switch current in Ampere.",
                           DoubleValue(0.273), // default to be the same as idle mode
                           MakeDoubleAccessor(&WifiRadioEnergyModel::SetSwitchingCurrentA,
                                              &WifiRadioEnergyModel::GetSwitchingCurrentA),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<ampere_u>())
             .AddAttribute("SleepCurrentA",
                           "The radio Sleep current in Ampere.",
                           DoubleValue(0.033), // sleep mode = 33mA
                           MakeDoubleAccessor(&WifiRadioEnergyModel::SetSleepCurrentA,
                                              &WifiRadioEnergyModel::GetSleepCurrentA),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<ampere_u>())
             .AddAttribute("TxCurrentModel",
                           "A pointer to the attached TX current model.",
                           PointerValue(),
@@ -120,24 +109,24 @@
     NS_ASSERT(source);
     m_source = source;
     m_switchToOffEvent.Cancel();
-    Time durationToOff = GetMaximumTimeInState(m_currentState);
+    const auto durationToOff = GetMaximumTimeInState(m_currentState);
     m_switchToOffEvent = Simulator::Schedule(durationToOff,
                                              &WifiRadioEnergyModel::ChangeState,
                                              this,
                                              static_cast<int>(WifiPhyState::OFF));
 }
 
-double
+Watt_u
 WifiRadioEnergyModel::GetTotalEnergyConsumption() const
 {
     NS_LOG_FUNCTION(this);
 
-    Time duration = Simulator::Now() - m_lastUpdateTime;
+    const auto duration = Simulator::Now() - m_lastUpdateTime;
     NS_ASSERT(duration.IsPositive()); // check if duration is valid
 
     // energy to decrease = current * voltage * time
-    double supplyVoltage = m_source->GetSupplyVoltage();
-    double energyToDecrease = duration.GetSeconds() * GetStateA(m_currentState) * supplyVoltage;
+    const auto supplyVoltage = m_source->GetSupplyVoltage();
+    const auto energyToDecrease = duration.GetSeconds() * GetStateA(m_currentState) * supplyVoltage;
 
     // notify energy source
     m_source->UpdateEnergySource();
@@ -145,88 +134,88 @@
     return m_totalEnergyConsumption + energyToDecrease;
 }
 
-double
+ampere_u
 WifiRadioEnergyModel::GetIdleCurrentA() const
 {
     NS_LOG_FUNCTION(this);
-    return m_idleCurrentA;
+    return m_idleCurrent;
 }
 
 void
-WifiRadioEnergyModel::SetIdleCurrentA(double idleCurrentA)
+WifiRadioEnergyModel::SetIdleCurrentA(ampere_u idleCurrent)
 {
-    NS_LOG_FUNCTION(this << idleCurrentA);
-    m_idleCurrentA = idleCurrentA;
+    NS_LOG_FUNCTION(this << idleCurrent);
+    m_idleCurrent = idleCurrent;
 }
 
-double
+ampere_u
 WifiRadioEnergyModel::GetCcaBusyCurrentA() const
 {
     NS_LOG_FUNCTION(this);
-    return m_ccaBusyCurrentA;
+    return m_ccaBusyCurrent;
 }
 
 void
-WifiRadioEnergyModel::SetCcaBusyCurrentA(double CcaBusyCurrentA)
+WifiRadioEnergyModel::SetCcaBusyCurrentA(ampere_u ccaBusyCurrent)
 {
-    NS_LOG_FUNCTION(this << CcaBusyCurrentA);
-    m_ccaBusyCurrentA = CcaBusyCurrentA;
+    NS_LOG_FUNCTION(this << ccaBusyCurrent);
+    m_ccaBusyCurrent = ccaBusyCurrent;
 }
 
-double
+ampere_u
 WifiRadioEnergyModel::GetTxCurrentA() const
 {
     NS_LOG_FUNCTION(this);
-    return m_txCurrentA;
+    return m_txCurrent;
 }
 
 void
-WifiRadioEnergyModel::SetTxCurrentA(double txCurrentA)
+WifiRadioEnergyModel::SetTxCurrentA(ampere_u txCurrent)
 {
-    NS_LOG_FUNCTION(this << txCurrentA);
-    m_txCurrentA = txCurrentA;
+    NS_LOG_FUNCTION(this << txCurrent);
+    m_txCurrent = txCurrent;
 }
 
-double
+ampere_u
 WifiRadioEnergyModel::GetRxCurrentA() const
 {
     NS_LOG_FUNCTION(this);
-    return m_rxCurrentA;
+    return m_rxCurrent;
 }
 
 void
-WifiRadioEnergyModel::SetRxCurrentA(double rxCurrentA)
+WifiRadioEnergyModel::SetRxCurrentA(ampere_u rxCurrent)
 {
-    NS_LOG_FUNCTION(this << rxCurrentA);
-    m_rxCurrentA = rxCurrentA;
+    NS_LOG_FUNCTION(this << rxCurrent);
+    m_rxCurrent = rxCurrent;
 }
 
-double
+ampere_u
 WifiRadioEnergyModel::GetSwitchingCurrentA() const
 {
     NS_LOG_FUNCTION(this);
-    return m_switchingCurrentA;
+    return m_switchingCurrent;
 }
 
 void
-WifiRadioEnergyModel::SetSwitchingCurrentA(double switchingCurrentA)
+WifiRadioEnergyModel::SetSwitchingCurrentA(ampere_u switchingCurrent)
 {
-    NS_LOG_FUNCTION(this << switchingCurrentA);
-    m_switchingCurrentA = switchingCurrentA;
+    NS_LOG_FUNCTION(this << switchingCurrent);
+    m_switchingCurrent = switchingCurrent;
 }
 
-double
+ampere_u
 WifiRadioEnergyModel::GetSleepCurrentA() const
 {
     NS_LOG_FUNCTION(this);
-    return m_sleepCurrentA;
+    return m_sleepCurrent;
 }
 
 void
-WifiRadioEnergyModel::SetSleepCurrentA(double sleepCurrentA)
+WifiRadioEnergyModel::SetSleepCurrentA(ampere_u sleepCurrent)
 {
-    NS_LOG_FUNCTION(this << sleepCurrentA);
-    m_sleepCurrentA = sleepCurrentA;
+    NS_LOG_FUNCTION(this << sleepCurrent);
+    m_sleepCurrent = sleepCurrent;
 }
 
 WifiPhyState
@@ -265,11 +254,11 @@
 }
 
 void
-WifiRadioEnergyModel::SetTxCurrentFromModel(double txPowerDbm)
+WifiRadioEnergyModel::SetTxCurrentFromModel(dBm_u txPower)
 {
     if (m_txCurrentModel)
     {
-        m_txCurrentA = m_txCurrentModel->CalcTxCurrent(txPowerDbm);
+        m_txCurrent = m_txCurrentModel->CalcTxCurrent(txPower);
     }
 }
 
@@ -280,9 +269,9 @@
     {
         NS_FATAL_ERROR("Requested maximum remaining time for OFF state");
     }
-    double remainingEnergy = m_source->GetRemainingEnergy();
-    double supplyVoltage = m_source->GetSupplyVoltage();
-    double current = GetStateA(state);
+    const auto remainingEnergy = m_source->GetRemainingEnergy();
+    const auto supplyVoltage = m_source->GetSupplyVoltage();
+    const auto current = GetStateA(state);
     return Seconds(remainingEnergy / (current * supplyVoltage));
 }
 
@@ -304,19 +293,19 @@
     if (newPhyState != WifiPhyState::OFF)
     {
         m_switchToOffEvent.Cancel();
-        Time durationToOff = GetMaximumTimeInState(newPhyState);
+        const auto durationToOff = GetMaximumTimeInState(newPhyState);
         m_switchToOffEvent = Simulator::Schedule(durationToOff,
                                                  &WifiRadioEnergyModel::ChangeState,
                                                  this,
                                                  static_cast<int>(WifiPhyState::OFF));
     }
 
-    Time duration = Simulator::Now() - m_lastUpdateTime;
+    const auto duration = Simulator::Now() - m_lastUpdateTime;
     NS_ASSERT(duration.IsPositive()); // check if duration is valid
 
     // energy to decrease = current * voltage * time
-    double supplyVoltage = m_source->GetSupplyVoltage();
-    double energyToDecrease = duration.GetSeconds() * GetStateA(m_currentState) * supplyVoltage;
+    const auto supplyVoltage = m_source->GetSupplyVoltage();
+    const auto energyToDecrease = duration.GetSeconds() * GetStateA(m_currentState) * supplyVoltage;
 
     // update total energy consumption
     m_totalEnergyConsumption += energyToDecrease;
@@ -380,7 +369,7 @@
     if (m_currentState != WifiPhyState::OFF)
     {
         m_switchToOffEvent.Cancel();
-        Time durationToOff = GetMaximumTimeInState(m_currentState);
+        const auto durationToOff = GetMaximumTimeInState(m_currentState);
         m_switchToOffEvent = Simulator::Schedule(durationToOff,
                                                  &WifiRadioEnergyModel::ChangeState,
                                                  this,
@@ -407,30 +396,30 @@
     m_energyDepletionCallback.Nullify();
 }
 
-double
+ampere_u
 WifiRadioEnergyModel::GetStateA(WifiPhyState state) const
 {
     switch (state)
     {
     case WifiPhyState::IDLE:
-        return m_idleCurrentA;
+        return m_idleCurrent;
     case WifiPhyState::CCA_BUSY:
-        return m_ccaBusyCurrentA;
+        return m_ccaBusyCurrent;
     case WifiPhyState::TX:
-        return m_txCurrentA;
+        return m_txCurrent;
     case WifiPhyState::RX:
-        return m_rxCurrentA;
+        return m_rxCurrent;
     case WifiPhyState::SWITCHING:
-        return m_switchingCurrentA;
+        return m_switchingCurrent;
     case WifiPhyState::SLEEP:
-        return m_sleepCurrentA;
+        return m_sleepCurrent;
     case WifiPhyState::OFF:
         return 0.0;
     }
     NS_FATAL_ERROR("WifiRadioEnergyModel: undefined radio state " << state);
 }
 
-double
+ampere_u
 WifiRadioEnergyModel::DoGetCurrentA() const
 {
     return GetStateA(m_currentState);
@@ -536,14 +525,14 @@
 }
 
 void
-WifiRadioEnergyModelPhyListener::NotifyTxStart(Time duration, double txPowerDbm)
+WifiRadioEnergyModelPhyListener::NotifyTxStart(Time duration, dBm_u txPower)
 {
-    NS_LOG_FUNCTION(this << duration << txPowerDbm);
+    NS_LOG_FUNCTION(this << duration << txPower);
     if (m_updateTxCurrentCallback.IsNull())
     {
         NS_FATAL_ERROR("WifiRadioEnergyModelPhyListener:Update tx current callback not set!");
     }
-    m_updateTxCurrentCallback(txPowerDbm);
+    m_updateTxCurrentCallback(txPower);
     if (m_changeStateCallback.IsNull())
     {
         NS_FATAL_ERROR("WifiRadioEnergyModelPhyListener:Change state callback not set!");
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-radio-energy-model.h ns-3.43/src/wifi/model/wifi-radio-energy-model.h
--- ns-3.42/src/wifi/model/wifi-radio-energy-model.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-radio-energy-model.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 Network Security Lab, University of Washington, Seattle.
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sidharth Nabar <snabar@uw.edu>
  *          He Wu <mdzz@u.washington.edu>
@@ -46,7 +35,7 @@
     /**
      * Callback type for updating the transmit current based on the nominal TX power.
      */
-    typedef Callback<void, double> UpdateTxCurrentCallback;
+    typedef Callback<void, dBm_u> UpdateTxCurrentCallback;
 
     WifiRadioEnergyModelPhyListener();
     ~WifiRadioEnergyModelPhyListener() override;
@@ -68,7 +57,7 @@
     void NotifyRxStart(Time duration) override;
     void NotifyRxEndOk() override;
     void NotifyRxEndError() override;
-    void NotifyTxStart(Time duration, double txPowerDbm) override;
+    void NotifyTxStart(Time duration, dBm_u txPower) override;
     void NotifyCcaBusyStart(Time duration,
                             WifiChannelListType channelType,
                             const std::vector<Time>& per20MhzDurations) override;
@@ -179,85 +168,85 @@
     void SetEnergySource(const Ptr<energy::EnergySource> source) override;
 
     /**
-     * \returns Total energy consumption of the wifi device in watts.
+     * \returns Total energy consumption of the wifi device.
      *
      * Implements DeviceEnergyModel::GetTotalEnergyConsumption.
      */
-    double GetTotalEnergyConsumption() const override;
+    Watt_u GetTotalEnergyConsumption() const override;
 
     // Setter & getters for state power consumption.
     /**
-     * \brief Gets idle current in Amperes.
+     * \brief Gets idle current.
      *
      * \returns idle current of the wifi device.
      */
-    double GetIdleCurrentA() const;
+    ampere_u GetIdleCurrentA() const;
     /**
-     * \brief Sets idle current in Amperes.
+     * \brief Sets idle current.
      *
      * \param idleCurrentA the idle current
      */
-    void SetIdleCurrentA(double idleCurrentA);
+    void SetIdleCurrentA(ampere_u idleCurrentA);
     /**
-     * \brief Gets CCA busy current in Amperes.
+     * \brief Gets CCA busy current.
      *
      * \returns CCA Busy current of the wifi device.
      */
-    double GetCcaBusyCurrentA() const;
+    ampere_u GetCcaBusyCurrentA() const;
     /**
-     * \brief Sets CCA busy current in Amperes.
+     * \brief Sets CCA busy current.
      *
      * \param ccaBusyCurrentA the CCA busy current
      */
-    void SetCcaBusyCurrentA(double ccaBusyCurrentA);
+    void SetCcaBusyCurrentA(ampere_u ccaBusyCurrentA);
     /**
-     * \brief Gets transmit current in Amperes.
+     * \brief Gets transmit current.
      *
      * \returns transmit current of the wifi device.
      */
-    double GetTxCurrentA() const;
+    ampere_u GetTxCurrentA() const;
     /**
-     * \brief Sets transmit current in Amperes.
+     * \brief Sets transmit current.
      *
      * \param txCurrentA the transmit current
      */
-    void SetTxCurrentA(double txCurrentA);
+    void SetTxCurrentA(ampere_u txCurrentA);
     /**
-     * \brief Gets receive current in Amperes.
+     * \brief Gets receive current.
      *
      * \returns receive current of the wifi device.
      */
-    double GetRxCurrentA() const;
+    ampere_u GetRxCurrentA() const;
     /**
-     * \brief Sets receive current in Amperes.
+     * \brief Sets receive current.
      *
      * \param rxCurrentA the receive current
      */
-    void SetRxCurrentA(double rxCurrentA);
+    void SetRxCurrentA(ampere_u rxCurrentA);
     /**
-     * \brief Gets switching current in Amperes.
+     * \brief Gets switching current.
      *
      * \returns switching current of the wifi device.
      */
-    double GetSwitchingCurrentA() const;
+    ampere_u GetSwitchingCurrentA() const;
     /**
-     * \brief Sets switching current in Amperes.
+     * \brief Sets switching current.
      *
      * \param switchingCurrentA the switching current
      */
-    void SetSwitchingCurrentA(double switchingCurrentA);
+    void SetSwitchingCurrentA(ampere_u switchingCurrentA);
     /**
-     * \brief Gets sleep current in Amperes.
+     * \brief Gets sleep current.
      *
      * \returns sleep current of the wifi device.
      */
-    double GetSleepCurrentA() const;
+    ampere_u GetSleepCurrentA() const;
     /**
-     * \brief Sets sleep current in Amperes.
+     * \brief Sets sleep current.
      *
      * \param sleepCurrentA the sleep current
      */
-    void SetSleepCurrentA(double sleepCurrentA);
+    void SetSleepCurrentA(ampere_u sleepCurrentA);
 
     /**
      * \returns Current state.
@@ -287,9 +276,9 @@
      * \brief Calls the CalcTxCurrent method of the TX current model to
      *        compute the TX current based on such model
      *
-     * \param txPowerDbm the nominal TX power in dBm
+     * \param txPower the nominal TX power
      */
-    void SetTxCurrentFromModel(double txPowerDbm);
+    void SetTxCurrentFromModel(dBm_u txPower);
 
     /**
      * \brief Changes state of the WifiRadioEnergyMode.
@@ -338,16 +327,16 @@
 
     /**
      * \param state the wifi state
-     * \returns draw of device in Amperes, at given state.
+     * \returns draw of device at given state.
      */
-    double GetStateA(WifiPhyState state) const;
+    ampere_u GetStateA(WifiPhyState state) const;
 
     /**
-     * \returns Current draw of device in Amperes, at current state.
+     * \returns Current draw of device at current state.
      *
      * Implements DeviceEnergyModel::GetCurrentA.
      */
-    double DoGetCurrentA() const override;
+    ampere_u DoGetCurrentA() const override;
 
     /**
      * \param state New state the radio device is currently in.
@@ -360,12 +349,12 @@
     Ptr<energy::EnergySource> m_source; ///< energy source
 
     // Member variables for current draw in different radio modes.
-    double m_txCurrentA;                      ///< transmit current in Amperes
-    double m_rxCurrentA;                      ///< receive current in Amperes
-    double m_idleCurrentA;                    ///< idle current in Amperes
-    double m_ccaBusyCurrentA;                 ///< CCA busy current in Amperes
-    double m_switchingCurrentA;               ///< switching current in Amperes
-    double m_sleepCurrentA;                   ///< sleep current in Amperes
+    ampere_u m_txCurrent;                     ///< transmit current
+    ampere_u m_rxCurrent;                     ///< receive current
+    ampere_u m_idleCurrent;                   ///< idle current
+    ampere_u m_ccaBusyCurrent;                ///< CCA busy current
+    ampere_u m_switchingCurrent;              ///< switching current
+    ampere_u m_sleepCurrent;                  ///< sleep current
     Ptr<WifiTxCurrentModel> m_txCurrentModel; ///< current model
 
     /// This variable keeps track of the total energy consumed by this model in watts.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-remote-station-info.cc ns-3.43/src/wifi/model/wifi-remote-station-info.cc
--- ns-3.42/src/wifi/model/wifi-remote-station-info.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-remote-station-info.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-remote-station-info.h ns-3.43/src/wifi/model/wifi-remote-station-info.h
--- ns-3.42/src/wifi/model/wifi-remote-station-info.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-remote-station-info.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-remote-station-manager.cc ns-3.43/src/wifi/model/wifi-remote-station-manager.cc
--- ns-3.42/src/wifi/model/wifi-remote-station-manager.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-remote-station-manager.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -297,16 +286,16 @@
     return false;
 }
 
-uint16_t
+Time
 WifiRemoteStationManager::GetGuardInterval() const
 {
-    uint16_t gi = 0;
+    Time gi{};
     if (GetHeSupported())
     {
         Ptr<HeConfiguration> heConfiguration = m_wifiPhy->GetDevice()->GetHeConfiguration();
         NS_ASSERT(heConfiguration); // If HE is supported, we should have a HE configuration
                                     // attached
-        gi = static_cast<uint16_t>(heConfiguration->GetGuardInterval().GetNanoSeconds());
+        gi = heConfiguration->GetGuardInterval();
     }
     return gi;
 }
@@ -588,7 +577,7 @@
 }
 
 WifiTxVector
-WifiRemoteStationManager::GetDataTxVector(const WifiMacHeader& header, uint16_t allowedWidth)
+WifiRemoteStationManager::GetDataTxVector(const WifiMacHeader& header, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << header << allowedWidth);
     Mac48Address address = header.GetAddr1();
@@ -601,7 +590,7 @@
             GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()));
         v.SetTxPowerLevel(m_defaultTxPowerLevel);
         v.SetChannelWidth(m_wifiPhy->GetTxBandwidth(mode, allowedWidth));
-        v.SetGuardInterval(ConvertGuardIntervalToNanoSeconds(mode, m_wifiPhy->GetDevice()));
+        v.SetGuardInterval(GetGuardIntervalForMode(mode, m_wifiPhy->GetDevice()));
         v.SetNTx(GetNumberOfAntennas());
         v.SetNss(1);
         v.SetNess(0);
@@ -624,10 +613,10 @@
         txVector.SetPreambleType(
             GetPreambleForTransmission(mgtMode.GetModulationClass(), GetShortPreambleEnabled()));
         txVector.SetTxPowerLevel(m_defaultTxPowerLevel);
-        uint16_t channelWidth = allowedWidth;
+        auto channelWidth = allowedWidth;
         if (!header.GetAddr1().IsGroup())
         {
-            if (uint16_t rxWidth = GetChannelWidthSupported(header.GetAddr1());
+            if (const auto rxWidth = GetChannelWidthSupported(header.GetAddr1());
                 rxWidth < channelWidth)
             {
                 channelWidth = rxWidth;
@@ -635,8 +624,7 @@
         }
 
         txVector.SetChannelWidth(m_wifiPhy->GetTxBandwidth(mgtMode, channelWidth));
-        txVector.SetGuardInterval(
-            ConvertGuardIntervalToNanoSeconds(mgtMode, m_wifiPhy->GetDevice()));
+        txVector.SetGuardInterval(GetGuardIntervalForMode(mgtMode, m_wifiPhy->GetDevice()));
     }
     else
     {
@@ -652,7 +640,8 @@
     }
     // If both the allowed width and the TXVECTOR channel width are integer multiple
     // of 20 MHz, then the TXVECTOR channel width must not exceed the allowed width
-    NS_ASSERT_MSG((txVector.GetChannelWidth() % 20 != 0) || (allowedWidth % 20 != 0) ||
+    NS_ASSERT_MSG((static_cast<uint16_t>(txVector.GetChannelWidth()) % 20 != 0) ||
+                      (static_cast<uint16_t>(allowedWidth) % 20 != 0) ||
                       (txVector.GetChannelWidth() <= allowedWidth),
                   "TXVECTOR channel width (" << txVector.GetChannelWidth()
                                              << " MHz) exceeds allowed width (" << allowedWidth
@@ -689,7 +678,7 @@
     return WifiTxVector(defaultMode,
                         GetDefaultTxPowerLevel(),
                         defaultPreamble,
-                        ConvertGuardIntervalToNanoSeconds(defaultMode, m_wifiPhy->GetDevice()),
+                        GetGuardIntervalForMode(defaultMode, m_wifiPhy->GetDevice()),
                         GetNumberOfAntennas(),
                         1,
                         0,
@@ -698,7 +687,7 @@
 }
 
 WifiTxVector
-WifiRemoteStationManager::GetRtsTxVector(Mac48Address address, uint16_t allowedWidth)
+WifiRemoteStationManager::GetRtsTxVector(Mac48Address address, MHz_u allowedWidth)
 {
     NS_LOG_FUNCTION(this << address << allowedWidth);
     WifiTxVector v;
@@ -710,7 +699,7 @@
             GetPreambleForTransmission(mode.GetModulationClass(), GetShortPreambleEnabled()));
         v.SetTxPowerLevel(m_defaultTxPowerLevel);
         v.SetChannelWidth(m_wifiPhy->GetTxBandwidth(mode));
-        v.SetGuardInterval(ConvertGuardIntervalToNanoSeconds(mode, m_wifiPhy->GetDevice()));
+        v.SetGuardInterval(GetGuardIntervalForMode(mode, m_wifiPhy->GetDevice()));
         v.SetNTx(GetNumberOfAntennas());
         v.SetNss(1);
         v.SetNess(0);
@@ -752,9 +741,7 @@
         GetPreambleForTransmission(ctsMode.GetModulationClass(), GetShortPreambleEnabled()));
     v.SetTxPowerLevel(GetDefaultTxPowerLevel());
     v.SetChannelWidth(m_wifiPhy->GetTxBandwidth(ctsMode));
-    uint16_t ctsTxGuardInterval =
-        ConvertGuardIntervalToNanoSeconds(ctsMode, m_wifiPhy->GetDevice());
-    v.SetGuardInterval(ctsTxGuardInterval);
+    v.SetGuardInterval(GetGuardIntervalForMode(ctsMode, m_wifiPhy->GetDevice()));
     v.SetNss(1);
     return v;
 }
@@ -803,9 +790,7 @@
         GetPreambleForTransmission(ackMode.GetModulationClass(), GetShortPreambleEnabled()));
     v.SetTxPowerLevel(GetDefaultTxPowerLevel());
     v.SetChannelWidth(m_wifiPhy->GetTxBandwidth(ackMode));
-    uint16_t ackTxGuardInterval =
-        ConvertGuardIntervalToNanoSeconds(ackMode, m_wifiPhy->GetDevice());
-    v.SetGuardInterval(ackTxGuardInterval);
+    v.SetGuardInterval(GetGuardIntervalForMode(ackMode, m_wifiPhy->GetDevice()));
     v.SetNss(1);
     return v;
 }
@@ -822,9 +807,7 @@
         GetPreambleForTransmission(blockAckMode.GetModulationClass(), GetShortPreambleEnabled()));
     v.SetTxPowerLevel(GetDefaultTxPowerLevel());
     v.SetChannelWidth(m_wifiPhy->GetTxBandwidth(blockAckMode));
-    uint16_t blockAckTxGuardInterval =
-        ConvertGuardIntervalToNanoSeconds(blockAckMode, m_wifiPhy->GetDevice());
-    v.SetGuardInterval(blockAckTxGuardInterval);
+    v.SetGuardInterval(GetGuardIntervalForMode(blockAckMode, m_wifiPhy->GetDevice()));
     v.SetNss(1);
     return v;
 }
@@ -1398,7 +1381,7 @@
     return LookupState(address)->m_info;
 }
 
-std::optional<double>
+std::optional<dBm_u>
 WifiRemoteStationManager::GetMostRecentRssi(Mac48Address address) const
 {
     auto station = Lookup(address);
@@ -1575,12 +1558,12 @@
     }
     if (heCapabilities.GetHeSuPpdu1xHeLtf800nsGi())
     {
-        state->m_guardInterval = 800;
+        state->m_guardInterval = NanoSeconds(800);
     }
     else
     {
         // todo: Using 3200ns, default value for HeConfiguration::GuardInterval
-        state->m_guardInterval = 3200;
+        state->m_guardInterval = NanoSeconds(3200);
     }
     for (const auto& mcs : m_wifiPhy->GetMcsList(WIFI_MOD_CLASS_HE))
     {
@@ -1917,7 +1900,7 @@
                                                 uint16_t nFailedMpdus,
                                                 double rxSnr,
                                                 double dataSnr,
-                                                uint16_t dataChannelWidth,
+                                                MHz_u dataChannelWidth,
                                                 uint8_t dataNss)
 {
     NS_LOG_DEBUG("DoReportAmpduTxStatus received but the manager does not handle A-MPDUs!");
@@ -1973,7 +1956,7 @@
     return station->m_state->m_address;
 }
 
-uint16_t
+MHz_u
 WifiRemoteStationManager::GetChannelWidth(const WifiRemoteStation* station) const
 {
     return station->m_state->m_channelWidth;
@@ -1991,7 +1974,7 @@
     return htCapabilities->GetShortGuardInterval20();
 }
 
-uint16_t
+Time
 WifiRemoteStationManager::GetGuardInterval(const WifiRemoteStation* station) const
 {
     return station->m_state->m_guardInterval;
@@ -2110,7 +2093,7 @@
     return size;
 }
 
-uint16_t
+MHz_u
 WifiRemoteStationManager::GetChannelWidthSupported(Mac48Address address) const
 {
     return LookupState(address)->m_channelWidth;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-remote-station-manager.h ns-3.43/src/wifi/model/wifi-remote-station-manager.h
--- ns-3.42/src/wifi/model/wifi-remote-station-manager.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-remote-station-manager.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -70,9 +59,9 @@
 {
     virtual ~WifiRemoteStation(){};
     WifiRemoteStationState* m_state; //!< Remote station state
-    std::pair<double, Time>
-        m_rssiAndUpdateTimePair; //!< RSSI (in dBm) of the most recent packet received from the
-                                 //!< remote station along with update time
+    std::pair<dBm_u, Time>
+        m_rssiAndUpdateTimePair; //!< RSSI of the most recent packet received from
+                                 //!< the remote station along with update time
 };
 
 /**
@@ -120,15 +109,14 @@
     std::shared_ptr<CommonInfoBasicMle> m_mleCommonInfo;
     bool m_emlsrEnabled; //!< whether EMLSR mode is enabled on this link
 
-    uint16_t m_channelWidth;  //!< Channel width (in MHz) supported by the remote station
-    uint16_t m_guardInterval; //!< HE Guard interval duration (in nanoseconds) supported by the
-                              //!< remote station
-    uint8_t m_ness;           //!< Number of extended spatial streams of the remote station
-    bool m_aggregation;       //!< Flag if MPDU aggregation is used by the remote station
-    bool m_shortPreamble;     //!< Flag if short PHY preamble is supported by the remote station
-    bool m_shortSlotTime;     //!< Flag if short ERP slot time is supported by the remote station
-    bool m_qosSupported;      //!< Flag if QoS is supported by the station
-    bool m_isInPsMode;        //!< Flag if the STA is currently in PS mode
+    MHz_u m_channelWidth; //!< Channel width supported by the remote station
+    Time m_guardInterval; //!< HE Guard interval durationsupported by the remote station
+    uint8_t m_ness;       //!< Number of extended spatial streams of the remote station
+    bool m_aggregation;   //!< Flag if MPDU aggregation is used by the remote station
+    bool m_shortPreamble; //!< Flag if short PHY preamble is supported by the remote station
+    bool m_shortSlotTime; //!< Flag if short ERP slot time is supported by the remote station
+    bool m_qosSupported;  //!< Flag if QoS is supported by the station
+    bool m_isInPsMode;    //!< Flag if the STA is currently in PS mode
 };
 
 /**
@@ -376,11 +364,11 @@
      */
     bool GetShortGuardIntervalSupported() const;
     /**
-     * Return the supported HE guard interval duration (in nanoseconds).
+     * Return the supported HE guard interval duration.
      *
-     * \return the supported HE guard interval duration (in nanoseconds)
+     * \return the supported HE guard interval duration
      */
-    uint16_t GetGuardInterval() const;
+    Time GetGuardInterval() const;
     /**
      * Enable or disable protection for non-ERP stations.
      *
@@ -572,7 +560,7 @@
      *
      * \return the channel width supported by the station
      */
-    uint16_t GetChannelWidthSupported(Mac48Address address) const;
+    MHz_u GetChannelWidthSupported(Mac48Address address) const;
     /**
      * Return whether the station supports HT/VHT short guard interval.
      *
@@ -833,18 +821,18 @@
 
     /**
      * \param header MAC header
-     * \param allowedWidth the allowed width in MHz to send this packet
+     * \param allowedWidth the allowed width to send this packet
      * \return the TXVECTOR to use to send this packet
      */
-    WifiTxVector GetDataTxVector(const WifiMacHeader& header, uint16_t allowedWidth);
+    WifiTxVector GetDataTxVector(const WifiMacHeader& header, MHz_u allowedWidth);
     /**
      * \param address remote address
-     * \param allowedWidth the allowed width in MHz for the data frame being protected
+     * \param allowedWidth the allowed width for the data frame being protected
      *
      * \return the TXVECTOR to use to send the RTS prior to the
      *         transmission of the data packet itself.
      */
-    WifiTxVector GetRtsTxVector(Mac48Address address, uint16_t allowedWidth);
+    WifiTxVector GetRtsTxVector(Mac48Address address, MHz_u allowedWidth);
     /**
      * Return a TXVECTOR for the CTS frame given the destination and the mode of the RTS
      * used by the sender.
@@ -1044,14 +1032,14 @@
     /**
      * \param address of the remote station
      *
-     * \return the RSSI (in dBm) of the most recent packet received from the remote station
-     * (irrespective of TID)
+     * \return the RSSI of the most recent packet received from the remote station (irrespective of
+     * TID)
      *
      * This method is typically used when the device needs
      * to estimate the target UL RSSI info to put in the
      * Trigger frame to send to the remote station.
      */
-    std::optional<double> GetMostRecentRssi(Mac48Address address) const;
+    std::optional<dBm_u> GetMostRecentRssi(Mac48Address address) const;
     /**
      * Set the default transmission power level
      *
@@ -1232,9 +1220,9 @@
      *
      * \param station the station being queried
      *
-     * \return the channel width (in MHz) supported by the station
+     * \return the channel width supported by the station
      */
-    uint16_t GetChannelWidth(const WifiRemoteStation* station) const;
+    MHz_u GetChannelWidth(const WifiRemoteStation* station) const;
     /**
      * Return whether the given station supports HT/VHT short guard interval.
      *
@@ -1249,9 +1237,9 @@
      *
      * \param station the station being queried
      *
-     * \return the HE guard interval duration (in nanoseconds) supported by the station
+     * \return the HE guard interval duration supported by the station
      */
-    uint16_t GetGuardInterval(const WifiRemoteStation* station) const;
+    Time GetGuardInterval(const WifiRemoteStation* station) const;
     /**
      * Return whether the given station supports A-MPDU.
      *
@@ -1337,13 +1325,13 @@
     virtual WifiRemoteStation* DoCreateStation() const = 0;
     /**
      * \param station the station that we need to communicate
-     * \param allowedWidth the allowed width in MHz to send a packet to the station
+     * \param allowedWidth the allowed width to send a packet to the station
      * \return the TXVECTOR to use to send a packet to the station
      *
      * Note: This method is called before sending a unicast packet or a fragment
      *       of a unicast packet to decide which transmission mode to use.
      */
-    virtual WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, uint16_t allowedWidth) = 0;
+    virtual WifiTxVector DoGetDataTxVector(WifiRemoteStation* station, MHz_u allowedWidth) = 0;
     /**
      * \param station the station that we need to communicate
      *
@@ -1389,14 +1377,14 @@
      * \param ackSnr the SNR of the ACK we received
      * \param ackMode the WifiMode the receiver used to send the ACK
      * \param dataSnr the SNR of the DATA we sent
-     * \param dataChannelWidth the channel width (in MHz) of the DATA we sent
+     * \param dataChannelWidth the channel width of the DATA we sent
      * \param dataNss the number of spatial streams used to send the DATA
      */
     virtual void DoReportDataOk(WifiRemoteStation* station,
                                 double ackSnr,
                                 WifiMode ackMode,
                                 double dataSnr,
-                                uint16_t dataChannelWidth,
+                                MHz_u dataChannelWidth,
                                 uint8_t dataNss) = 0;
     /**
      * This method is a pure virtual method that must be implemented by the sub-class.
@@ -1433,7 +1421,7 @@
      * \param nFailedMpdus number of unsuccessfuly transmitted MPDUs.
      * \param rxSnr received SNR of the block ack frame itself
      * \param dataSnr data SNR reported by remote station
-     * \param dataChannelWidth the channel width (in MHz) of the A-MPDU we sent
+     * \param dataChannelWidth the channel width of the A-MPDU we sent
      * \param dataNss the number of spatial streams used to send the A-MPDU
      */
     virtual void DoReportAmpduTxStatus(WifiRemoteStation* station,
@@ -1441,7 +1429,7 @@
                                        uint16_t nFailedMpdus,
                                        double rxSnr,
                                        double dataSnr,
-                                       uint16_t dataChannelWidth,
+                                       MHz_u dataChannelWidth,
                                        uint8_t dataNss);
 
     /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-spectrum-phy-interface.cc ns-3.43/src/wifi/model/wifi-spectrum-phy-interface.cc
--- ns-3.42/src/wifi/model/wifi-spectrum-phy-interface.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-spectrum-phy-interface.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
@@ -25,6 +14,8 @@
 #include "ns3/spectrum-channel.h"
 #include "ns3/spectrum-value.h"
 
+#include <sstream>
+
 NS_LOG_COMPONENT_DEFINE("WifiSpectrumPhyInterface");
 
 namespace ns3
@@ -42,7 +33,7 @@
 
 WifiSpectrumPhyInterface::WifiSpectrumPhyInterface(FrequencyRange freqRange)
     : m_frequencyRange{freqRange},
-      m_centerFrequency{0},
+      m_centerFrequencies{},
       m_channelWidth{0},
       m_bands{},
       m_heRuBands{}
@@ -107,15 +98,20 @@
 }
 
 void
-WifiSpectrumPhyInterface::SetRxSpectrumModel(uint32_t centerFrequency,
-                                             uint16_t channelWidth,
-                                             uint32_t bandBandwidth,
-                                             uint16_t guardBandwidth)
-{
-    NS_LOG_FUNCTION(this << centerFrequency << channelWidth << bandBandwidth << guardBandwidth);
-    m_centerFrequency = centerFrequency;
+WifiSpectrumPhyInterface::SetRxSpectrumModel(const std::vector<MHz_u>& centerFrequencies,
+                                             MHz_u channelWidth,
+                                             Hz_u bandBandwidth,
+                                             MHz_u guardBandwidth)
+{
+    std::stringstream ss;
+    for (const auto& centerFrequency : centerFrequencies)
+    {
+        ss << centerFrequency << " ";
+    }
+    NS_LOG_FUNCTION(this << ss.str() << channelWidth << bandBandwidth << guardBandwidth);
+    m_centerFrequencies = centerFrequencies;
     m_channelWidth = channelWidth;
-    m_rxSpectrumModel = WifiSpectrumValueHelper::GetSpectrumModel(centerFrequency,
+    m_rxSpectrumModel = WifiSpectrumValueHelper::GetSpectrumModel(centerFrequencies,
                                                                   channelWidth,
                                                                   bandBandwidth,
                                                                   guardBandwidth);
@@ -145,13 +141,13 @@
     return m_frequencyRange;
 }
 
-uint16_t
-WifiSpectrumPhyInterface::GetCenterFrequency() const
+const std::vector<MHz_u>&
+WifiSpectrumPhyInterface::GetCenterFrequencies() const
 {
-    return m_centerFrequency;
+    return m_centerFrequencies;
 }
 
-uint16_t
+MHz_u
 WifiSpectrumPhyInterface::GetChannelWidth() const
 {
     return m_channelWidth;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-spectrum-phy-interface.h ns-3.43/src/wifi/model/wifi-spectrum-phy-interface.h
--- ns-3.42/src/wifi/model/wifi-spectrum-phy-interface.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-spectrum-phy-interface.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  */
@@ -25,6 +14,8 @@
 #include "ns3/he-phy.h"
 #include "ns3/spectrum-phy.h"
 
+#include <vector>
+
 namespace ns3
 {
 
@@ -91,20 +82,21 @@
     const FrequencyRange& GetFrequencyRange() const;
 
     /**
-     * Get the center frequency in MHz of the the spectrum channel this interface is attached to
+     * Get the center frequency for each segment of the the spectrum channel this interface is
+     * attached to
      *
-     * \return the center frequency in MHz of the the spectrum channel this interface is attached to
-     * to
+     * \return the center frequency for each segment of the the spectrum channel this interface is
+     * attached to to
      */
-    uint16_t GetCenterFrequency() const;
+    const std::vector<MHz_u>& GetCenterFrequencies() const;
 
     /**
-     * Get the channel width in MHz covered by the spectrum channel this interface is attached to
+     * Get the channel width covered by the spectrum channel this interface is attached to
      *
-     * \return the channel width in MHz covered by the spectrum channel this interface is attached
+     * \return the channel width covered by the spectrum channel this interface is attached
      * to to
      */
-    uint16_t GetChannelWidth() const;
+    MHz_u GetChannelWidth() const;
 
     /**
      * Start transmission over the spectrum channel
@@ -116,15 +108,15 @@
     /**
      * Set the RX spectrum model
      *
-     * \param centerFrequency the center frequency in MHz
-     * \param channelWidth the channel width in MHz
-     * \param bandBandwidth the width of each band in Hz
-     * \param guardBandwidth the width of the guard band in MHz
-     */
-    void SetRxSpectrumModel(uint32_t centerFrequency,
-                            uint16_t channelWidth,
-                            uint32_t bandBandwidth,
-                            uint16_t guardBandwidth);
+     * \param centerFrequencies the center frequency for each segment
+     * \param channelWidth the total channel width
+     * \param bandBandwidth the width of each band
+     * \param guardBandwidth the total width of the guard band
+     */
+    void SetRxSpectrumModel(const std::vector<MHz_u>& centerFrequencies,
+                            MHz_u channelWidth,
+                            Hz_u bandBandwidth,
+                            MHz_u guardBandwidth);
 
     /**
      * Set the vector of spectrum bands handled by this interface
@@ -159,8 +151,8 @@
     Ptr<SpectrumWifiPhy> m_spectrumWifiPhy;     ///< spectrum PHY
     Ptr<NetDevice> m_netDevice;                 ///< the device
     Ptr<SpectrumChannel> m_channel;             ///< spectrum channel
-    uint16_t m_centerFrequency;                 ///< center frequency in MHz
-    uint16_t m_channelWidth;                    ///< channel width in MHz
+    std::vector<MHz_u> m_centerFrequencies;     ///< center frequency per segment
+    MHz_u m_channelWidth;                       ///< channel width
     Ptr<const SpectrumModel> m_rxSpectrumModel; ///< receive spectrum model
 
     WifiSpectrumBands
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-spectrum-signal-parameters.cc ns-3.43/src/wifi/model/wifi-spectrum-signal-parameters.cc
--- ns-3.42/src/wifi/model/wifi-spectrum-signal-parameters.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-spectrum-signal-parameters.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  * Modified by Marco Miozzo <mmiozzo@cttc.es> (add data and ctrl diversity)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-spectrum-signal-parameters.h ns-3.43/src/wifi/model/wifi-spectrum-signal-parameters.h
--- ns-3.42/src/wifi/model/wifi-spectrum-signal-parameters.h	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-spectrum-signal-parameters.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2011 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Nicola Baldo <nbaldo@cttc.es>
  * Modified by Marco Miozzo <mmiozzo@cttc.es> (add data and ctrl diversity)
@@ -21,6 +10,8 @@
 #ifndef WIFI_SPECTRUM_SIGNAL_PARAMETERS_H
 #define WIFI_SPECTRUM_SIGNAL_PARAMETERS_H
 
+#include "wifi-phy-common.h"
+
 #include "ns3/spectrum-signal-parameters.h"
 
 namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-spectrum-value-helper.cc ns-3.43/src/wifi/model/wifi-spectrum-value-helper.cc
--- ns-3.42/src/wifi/model/wifi-spectrum-value-helper.cc	2024-05-29 15:29:47.212073800 -0700
+++ ns-3.43/src/wifi/model/wifi-spectrum-value-helper.cc	2024-10-09 16:41:10.132656800 -0700
@@ -3,18 +3,7 @@
  * Copyright (c) 2010 TELEMATICS LAB, DEE - Politecnico di Bari
  * Copyright (c) 2017 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Giuseppe Piro  <g.piro@poliba.it>
@@ -23,14 +12,36 @@
 
 #include "wifi-spectrum-value-helper.h"
 
+#include "wifi-utils.h"
+
 #include "ns3/assert.h"
 #include "ns3/fatal-error.h"
 #include "ns3/log.h"
 
+#include <algorithm>
 #include <cmath>
+#include <iterator>
 #include <map>
+#include <numeric>
+#include <optional>
 #include <sstream>
 
+namespace
+{
+
+/**
+ * Lambda to print a vector of frequencies.
+ */
+auto printFrequencies = [](const std::vector<ns3::MHz_u>& v) {
+    std::stringstream ss;
+    for (const auto& centerFrequency : v)
+    {
+        ss << centerFrequency << " ";
+    }
+    return ss.str();
+};
+} // namespace
+
 namespace ns3
 {
 
@@ -39,56 +50,72 @@
 ///< Wifi Spectrum Model structure
 struct WifiSpectrumModelId
 {
-    uint32_t m_centerFrequency; ///< center frequency (in MHz)
-    uint16_t m_channelWidth;    ///< channel width (in MHz)
-    uint32_t m_carrierSpacing;  ///< carrier spacing (in Hz)
-    uint16_t m_guardBandwidth;  ///< guard band width (in MHz)
+    std::vector<MHz_u> centerFrequencies; ///< center frequency per segment
+    MHz_u channelWidth;                   ///< channel width
+    Hz_u carrierSpacing;                  ///< carrier spacing
+    MHz_u guardBandwidth;                 ///< guard band width
 };
 
 /**
  * Less than operator
- * \param a the first wifi spectrum to compare
- * \param b the second wifi spectrum to compare
- * \returns true if the first spectrum is less than the second spectrum
+ * \param lhs the left hand side wifi spectrum to compare
+ * \param rhs the right hand side wifi spectrum to compare
+ * \returns true if the left hand side spectrum is less than the right hand side spectrum
  */
 bool
-operator<(const WifiSpectrumModelId& a, const WifiSpectrumModelId& b)
+operator<(const WifiSpectrumModelId& lhs, const WifiSpectrumModelId& rhs)
 {
-    return (
-        (a.m_centerFrequency < b.m_centerFrequency) ||
-        ((a.m_centerFrequency == b.m_centerFrequency) && (a.m_channelWidth < b.m_channelWidth)) ||
-        ((a.m_centerFrequency == b.m_centerFrequency) && (a.m_channelWidth == b.m_channelWidth) &&
-         (a.m_carrierSpacing < b.m_carrierSpacing)) // to cover coexistence of 11ax with legacy case
-        || ((a.m_centerFrequency == b.m_centerFrequency) &&
-            (a.m_channelWidth == b.m_channelWidth) && (a.m_carrierSpacing == b.m_carrierSpacing) &&
-            (a.m_guardBandwidth <
-             b.m_guardBandwidth))); // to cover 2.4 GHz case, where DSSS coexists with OFDM
+    return std::tie(lhs.centerFrequencies,
+                    lhs.channelWidth,
+                    lhs.carrierSpacing,
+                    lhs.guardBandwidth) < std::tie(rhs.centerFrequencies,
+                                                   rhs.channelWidth,
+                                                   rhs.carrierSpacing,
+                                                   rhs.guardBandwidth);
+    // TODO: replace with default spaceship operator, but it seems currently not working with all
+    // compilers
 }
 
 static std::map<WifiSpectrumModelId, Ptr<SpectrumModel>>
     g_wifiSpectrumModelMap; ///< static initializer for the class
 
 Ptr<SpectrumModel>
-WifiSpectrumValueHelper::GetSpectrumModel(uint32_t centerFrequency,
-                                          uint16_t channelWidth,
-                                          uint32_t carrierSpacing,
-                                          uint16_t guardBandwidth)
+WifiSpectrumValueHelper::GetSpectrumModel(const std::vector<MHz_u>& centerFrequencies,
+                                          MHz_u channelWidth,
+                                          Hz_u carrierSpacing,
+                                          MHz_u guardBandwidth)
 {
-    NS_LOG_FUNCTION(centerFrequency << channelWidth << carrierSpacing << guardBandwidth);
+    NS_LOG_FUNCTION(printFrequencies(centerFrequencies)
+                    << channelWidth << carrierSpacing << guardBandwidth);
+    NS_ASSERT_MSG(centerFrequencies.size() <= 2,
+                  "Spectrum model does not support more than 2 segments");
+    if (centerFrequencies.size() != 1)
+    {
+        NS_ASSERT_MSG(centerFrequencies.front() != centerFrequencies.back(),
+                      "Center frequency of each segment shall be different");
+    }
+    // assume all frequency segments have the same width, hence split the guard bandwidth
+    // accordingly over the segments
+    guardBandwidth /= centerFrequencies.size();
     Ptr<SpectrumModel> ret;
-    WifiSpectrumModelId key{centerFrequency, channelWidth, carrierSpacing, guardBandwidth};
-    auto it = g_wifiSpectrumModelMap.find(key);
-    if (it != g_wifiSpectrumModelMap.end())
+    WifiSpectrumModelId key{centerFrequencies, channelWidth, carrierSpacing, guardBandwidth};
+    if (const auto it = g_wifiSpectrumModelMap.find(key); it != g_wifiSpectrumModelMap.cend())
     {
         ret = it->second;
     }
     else
     {
         Bands bands;
-        double centerFrequencyHz = centerFrequency * 1e6;
-        double bandwidth = (channelWidth + (2.0 * guardBandwidth)) * 1e6;
+        const auto [minCenterFrequency, maxCenterFrequency] =
+            std::minmax_element(centerFrequencies.cbegin(), centerFrequencies.cend());
+        const auto separationWidth =
+            (minCenterFrequency == maxCenterFrequency)
+                ? 0
+                : (*maxCenterFrequency - *minCenterFrequency - (channelWidth / 2));
+        NS_ASSERT(separationWidth == 0 || centerFrequencies.size() == 2);
+        Hz_u bandwidth = (channelWidth + (2 * guardBandwidth) + separationWidth) * 1e6;
         // For OFDM, the center subcarrier is null (at center frequency)
-        auto numBands = static_cast<uint32_t>((bandwidth / carrierSpacing) + 0.5);
+        uint32_t numBands = std::ceil(bandwidth / carrierSpacing);
         NS_ASSERT(numBands > 0);
         if (numBands % 2 == 0)
         {
@@ -98,14 +125,20 @@
         }
         NS_ASSERT_MSG(numBands % 2 == 1, "Number of bands should be odd");
         NS_LOG_DEBUG("Num bands " << numBands << " band bandwidth " << carrierSpacing);
-        // lay down numBands/2 bands symmetrically around center frequency
-        // and place an additional band at center frequency
-        double startingFrequencyHz =
-            centerFrequencyHz - (numBands / 2 * carrierSpacing) - carrierSpacing / 2;
+
+        // The lowest frequency is obtained from the minimum center frequency among the segment(s).
+        // Then, we subtract half the channel width to retrieve the starting frequency of the
+        // operating channel. If the channel is made of 2 segments, since the channel width is the
+        // total width, only a quarter of the channel width has to be subtracted. Finally, we
+        // remove the guard band width to get the center frequency of the first band and half the
+        // carrier spacing to get the effective starting frequency of the first band.
+        const auto startingFrequencyHz = *minCenterFrequency * 1e6 -
+                                         ((channelWidth * 1e6) / (2 * centerFrequencies.size())) -
+                                         (guardBandwidth * 1e6) - (carrierSpacing / 2);
         for (size_t i = 0; i < numBands; i++)
         {
             BandInfo info;
-            double f = startingFrequencyHz + (i * carrierSpacing);
+            auto f = startingFrequencyHz + (i * carrierSpacing);
             info.fl = f;
             f += carrierSpacing / 2;
             info.fc = f;
@@ -124,58 +157,59 @@
 
 // Power allocated to 71 center subbands out of 135 total subbands in the band
 Ptr<SpectrumValue>
-WifiSpectrumValueHelper::CreateDsssTxPowerSpectralDensity(uint32_t centerFrequency,
-                                                          double txPowerW,
-                                                          uint16_t guardBandwidth)
-{
-    NS_LOG_FUNCTION(centerFrequency << txPowerW << +guardBandwidth);
-    uint16_t channelWidth = 22; // DSSS channels are 22 MHz wide
-    uint32_t carrierSpacing = 312500;
+WifiSpectrumValueHelper::CreateDsssTxPowerSpectralDensity(MHz_u centerFrequency,
+                                                          Watt_u txPower,
+                                                          MHz_u guardBandwidth)
+{
+    NS_LOG_FUNCTION(centerFrequency << txPower << +guardBandwidth);
+    MHz_u channelWidth = 22; // DSSS channels are 22 MHz wide
+    Hz_u carrierSpacing = 312500;
     Ptr<SpectrumValue> c = Create<SpectrumValue>(
-        GetSpectrumModel(centerFrequency, channelWidth, carrierSpacing, guardBandwidth));
+        GetSpectrumModel({centerFrequency}, channelWidth, carrierSpacing, guardBandwidth));
     auto vit = c->ValuesBegin();
     auto bit = c->ConstBandsBegin();
     auto nGuardBands = static_cast<uint32_t>(((2 * guardBandwidth * 1e6) / carrierSpacing) + 0.5);
     auto nAllocatedBands = static_cast<uint32_t>(((channelWidth * 1e6) / carrierSpacing) + 0.5);
     NS_ASSERT(c->GetSpectrumModel()->GetNumBands() == (nAllocatedBands + nGuardBands + 1));
     // Evenly spread power across 22 MHz
-    double txPowerPerBand = txPowerW / nAllocatedBands;
+    const auto txPowerPerBand = txPower / nAllocatedBands;
+    const auto psd = txPowerPerBand / (bit->fh - bit->fl);
     for (size_t i = 0; i < c->GetSpectrumModel()->GetNumBands(); i++, vit++, bit++)
     {
         if ((i >= (nGuardBands / 2)) && (i <= ((nGuardBands / 2) + nAllocatedBands - 1)))
         {
-            *vit = txPowerPerBand / (bit->fh - bit->fl);
+            *vit = psd;
         }
     }
     return c;
 }
 
 Ptr<SpectrumValue>
-WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(uint32_t centerFrequency,
-                                                          uint16_t channelWidth,
-                                                          double txPowerW,
-                                                          uint16_t guardBandwidth,
-                                                          double minInnerBandDbr,
-                                                          double minOuterBandDbr,
-                                                          double lowestPointDbr)
-{
-    NS_LOG_FUNCTION(centerFrequency << channelWidth << txPowerW << guardBandwidth << minInnerBandDbr
-                                    << minOuterBandDbr << lowestPointDbr);
-    uint32_t carrierSpacing = 0;
+WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(MHz_u centerFrequency,
+                                                          MHz_u channelWidth,
+                                                          Watt_u txPower,
+                                                          MHz_u guardBandwidth,
+                                                          dBr_u minInnerBand,
+                                                          dBr_u minOuterBand,
+                                                          dBr_u lowestPoint)
+{
+    NS_LOG_FUNCTION(centerFrequency << channelWidth << txPower << guardBandwidth << minInnerBand
+                                    << minOuterBand << lowestPoint);
+    Hz_u carrierSpacing = 0;
     uint32_t innerSlopeWidth = 0;
-    switch (channelWidth)
+    switch (static_cast<uint16_t>(channelWidth))
     {
     case 20:
-        carrierSpacing = 312500;
+        carrierSpacing = 312500;                                               // Hz
         innerSlopeWidth = static_cast<uint32_t>((2e6 / carrierSpacing) + 0.5); // [-11;-9] & [9;11]
         break;
     case 10:
-        carrierSpacing = 156250;
+        carrierSpacing = 156250; // Hz
         innerSlopeWidth =
             static_cast<uint32_t>((1e6 / carrierSpacing) + 0.5); // [-5.5;-4.5] & [4.5;5.5]
         break;
     case 5:
-        carrierSpacing = 78125;
+        carrierSpacing = 78125; // Hz
         innerSlopeWidth =
             static_cast<uint32_t>((5e5 / carrierSpacing) + 0.5); // [-2.75;-2.5] & [2.5;2.75]
         break;
@@ -184,8 +218,8 @@
         return nullptr;
     }
 
-    Ptr<SpectrumValue> c = Create<SpectrumValue>(
-        GetSpectrumModel(centerFrequency, channelWidth, carrierSpacing, guardBandwidth));
+    auto c = Create<SpectrumValue>(
+        GetSpectrumModel({centerFrequency}, channelWidth, carrierSpacing, guardBandwidth));
     auto nGuardBands = static_cast<uint32_t>(((2 * guardBandwidth * 1e6) / carrierSpacing) + 0.5);
     auto nAllocatedBands = static_cast<uint32_t>(((channelWidth * 1e6) / carrierSpacing) + 0.5);
     NS_ASSERT_MSG(c->GetSpectrumModel()->GetNumBands() == (nAllocatedBands + nGuardBands + 1),
@@ -194,8 +228,8 @@
     // skip guard band and 6 subbands, then place power in 26 subbands, then
     // skip the center subband, then place power in 26 subbands, then skip
     // the final 6 subbands and the guard band.
-    double txPowerPerBandW = txPowerW / 52;
-    NS_LOG_DEBUG("Power per band " << txPowerPerBandW << "W");
+    const auto txPowerPerBand = txPower / 52;
+    NS_LOG_DEBUG("Power per band " << txPowerPerBand << "W");
     uint32_t start1 = (nGuardBands / 2) + 6;
     uint32_t stop1 = start1 + 26 - 1;
     uint32_t start2 = stop1 + 2;
@@ -208,181 +242,269 @@
     };
     WifiSpectrumBandIndices maskBand(0, nAllocatedBands + nGuardBands);
     CreateSpectrumMaskForOfdm(c,
-                              subBands,
+                              {subBands},
                               maskBand,
-                              txPowerPerBandW,
+                              txPowerPerBand,
                               nGuardBands,
                               innerSlopeWidth,
-                              minInnerBandDbr,
-                              minOuterBandDbr,
-                              lowestPointDbr);
-    NormalizeSpectrumMask(c, txPowerW);
-    NS_ASSERT_MSG(std::abs(txPowerW - Integral(*c)) < 1e-6, "Power allocation failed");
+                              minInnerBand,
+                              minOuterBand,
+                              lowestPoint);
+    NormalizeSpectrumMask(c, txPower);
+    NS_ASSERT_MSG(std::abs(txPower - Integral(*c)) < 1e-6, "Power allocation failed");
     return c;
 }
 
 Ptr<SpectrumValue>
 WifiSpectrumValueHelper::CreateDuplicated20MhzTxPowerSpectralDensity(
-    uint32_t centerFrequency,
-    uint16_t channelWidth,
-    double txPowerW,
-    uint16_t guardBandwidth,
-    double minInnerBandDbr,
-    double minOuterBandDbr,
-    double lowestPointDbr,
+    const std::vector<MHz_u>& centerFrequencies,
+    MHz_u channelWidth,
+    Watt_u txPower,
+    MHz_u guardBandwidth,
+    dBr_u minInnerBand,
+    dBr_u minOuterBand,
+    dBr_u lowestPoint,
     const std::vector<bool>& puncturedSubchannels)
 {
-    NS_LOG_FUNCTION(centerFrequency << channelWidth << txPowerW << guardBandwidth << minInnerBandDbr
-                                    << minOuterBandDbr << lowestPointDbr);
-    uint32_t carrierSpacing = 312500;
+    NS_ASSERT_MSG(centerFrequencies.size() == 1 ||
+                      (channelWidth == 160 && centerFrequencies.size() <= 2),
+                  "PSD for non-contiguous channels is only possible when the total width is 160 "
+                  "MHz and cannot be made of more than 2 segments");
+    NS_LOG_FUNCTION(printFrequencies(centerFrequencies)
+                    << channelWidth << txPower << guardBandwidth << minInnerBand << minOuterBand
+                    << lowestPoint);
+    const Hz_u carrierSpacing = 312500;
     Ptr<SpectrumValue> c = Create<SpectrumValue>(
-        GetSpectrumModel(centerFrequency, channelWidth, carrierSpacing, guardBandwidth));
-    auto nGuardBands = static_cast<uint32_t>(((2 * guardBandwidth * 1e6) / carrierSpacing) + 0.5);
-    auto nAllocatedBands = static_cast<uint32_t>(((channelWidth * 1e6) / carrierSpacing) + 0.5);
-    NS_ASSERT_MSG(c->GetSpectrumModel()->GetNumBands() == (nAllocatedBands + nGuardBands + 1),
+        GetSpectrumModel(centerFrequencies, channelWidth, carrierSpacing, guardBandwidth));
+    // assume all frequency segments have the same width, hence split the guard bandwidth
+    // accordingly over the segments
+    guardBandwidth /= centerFrequencies.size();
+    const auto nGuardBands =
+        static_cast<uint32_t>(((2 * guardBandwidth * 1e6) / carrierSpacing) + 0.5);
+    const auto nAllocatedBands =
+        static_cast<uint32_t>(((channelWidth * 1e6) / carrierSpacing) + 0.5);
+    const auto separationWidth = std::abs(centerFrequencies.back() - centerFrequencies.front());
+    const auto unallocatedWidth = separationWidth > 0 ? (separationWidth - (channelWidth / 2)) : 0;
+    const auto nUnallocatedBands =
+        static_cast<uint32_t>(((unallocatedWidth * 1e6) / carrierSpacing) + 0.5);
+    NS_ASSERT_MSG(c->GetSpectrumModel()->GetNumBands() ==
+                      (nAllocatedBands + nGuardBands + nUnallocatedBands + 1),
                   "Unexpected number of bands " << c->GetSpectrumModel()->GetNumBands());
     std::size_t num20MhzBands = channelWidth / 20;
     std::size_t numAllocatedSubcarriersPer20MHz = 52;
     NS_ASSERT(puncturedSubchannels.empty() || (puncturedSubchannels.size() == num20MhzBands));
-    double txPowerPerBandW = (txPowerW / numAllocatedSubcarriersPer20MHz) / num20MhzBands;
-    NS_LOG_DEBUG("Power per band " << txPowerPerBandW << "W");
+    const auto txPowerPerBand = (txPower / numAllocatedSubcarriersPer20MHz) / num20MhzBands;
+    NS_LOG_DEBUG("Power per band " << txPowerPerBand << "W");
 
     std::size_t numSubcarriersPer20MHz = (20 * 1e6) / carrierSpacing;
     std::size_t numUnallocatedSubcarriersPer20MHz =
         numSubcarriersPer20MHz - numAllocatedSubcarriersPer20MHz;
-    std::vector<WifiSpectrumBandIndices>
-        subBands; // list of data/pilot-containing subBands (sent at 0dBr)
-    subBands.resize(num20MhzBands *
-                    2); // the center subcarrier is skipped, hence 2 subbands per 20 MHz subchannel
+    std::vector<std::vector<WifiSpectrumBandIndices>> subBandsPerSegment(
+        centerFrequencies.size()); // list of data/pilot-containing subBands (sent at 0dBr)
+    for (std::size_t i = 0; i < centerFrequencies.size(); ++i)
+    {
+        subBandsPerSegment.at(i).resize(
+            num20MhzBands * 2 / centerFrequencies.size()); // the center subcarrier is skipped,
+                                                           // hence 2 subbands per 20 MHz subchannel
+    }
+    std::vector<std::vector<WifiSpectrumBandIndices>> puncturedBandsPerSegment;
     uint32_t start = (nGuardBands / 2) + (numUnallocatedSubcarriersPer20MHz / 2);
     uint32_t stop;
     uint8_t index = 0;
-    for (auto it = subBands.begin(); it != subBands.end();)
+    for (auto& subBands : subBandsPerSegment)
     {
-        if (!puncturedSubchannels.empty() && puncturedSubchannels.at(index++))
+        puncturedBandsPerSegment.emplace_back();
+        for (auto it = subBands.begin(); it != subBands.end();)
         {
-            // if subchannel is punctured, skip it and go the next one
-            NS_LOG_DEBUG("20 MHz subchannel " << +index << " is punctured");
-            it += 2;
-            continue;
-        }
-        stop = start + (numAllocatedSubcarriersPer20MHz / 2) - 1;
-        *it = std::make_pair(start, stop);
-        ++it;
-        start = stop + 2; // skip center subcarrier
-        stop = start + (numAllocatedSubcarriersPer20MHz / 2) - 1;
-        *it = std::make_pair(start, stop);
-        ++it;
-        start = stop + numUnallocatedSubcarriersPer20MHz;
+            stop = start + (numAllocatedSubcarriersPer20MHz / 2) - 1;
+            *it = std::make_pair(start, stop);
+            ++it;
+            uint32_t puncturedStart = start;
+            start = stop + 2; // skip center subcarrier
+            stop = start + (numAllocatedSubcarriersPer20MHz / 2) - 1;
+            *it = std::make_pair(start, stop);
+            ++it;
+            start = stop + numUnallocatedSubcarriersPer20MHz;
+            uint32_t puncturedStop = stop;
+            if (!puncturedSubchannels.empty() && puncturedSubchannels.at(index++))
+            {
+                puncturedBandsPerSegment.back().emplace_back(puncturedStart, puncturedStop);
+            }
+        }
+        start += nUnallocatedBands;
     }
 
     // Prepare spectrum mask specific variables
     auto innerSlopeWidth = static_cast<uint32_t>(
         (2e6 / carrierSpacing) +
         0.5); // size in number of subcarriers of the 0dBr<->20dBr slope (2MHz for HT/VHT)
-    WifiSpectrumBandIndices maskBand(0, nAllocatedBands + nGuardBands);
+    WifiSpectrumBandIndices maskBand(0, nAllocatedBands + nGuardBands + nUnallocatedBands);
+    const auto puncturedSlopeWidth =
+        static_cast<uint32_t>((500e3 / carrierSpacing) +
+                              0.5); // size in number of subcarriers of the punctured slope band
 
     // Build transmit spectrum mask
     CreateSpectrumMaskForOfdm(c,
-                              subBands,
+                              subBandsPerSegment,
                               maskBand,
-                              txPowerPerBandW,
+                              txPowerPerBand,
                               nGuardBands,
                               innerSlopeWidth,
-                              minInnerBandDbr,
-                              minOuterBandDbr,
-                              lowestPointDbr);
-    NormalizeSpectrumMask(c, txPowerW);
-    NS_ASSERT_MSG(std::abs(txPowerW - Integral(*c)) < 1e-6, "Power allocation failed");
+                              minInnerBand,
+                              minOuterBand,
+                              lowestPoint,
+                              puncturedBandsPerSegment,
+                              puncturedSlopeWidth);
+    NormalizeSpectrumMask(c, txPower);
+    NS_ASSERT_MSG(std::abs(txPower - Integral(*c)) < 1e-6, "Power allocation failed");
     return c;
 }
 
 Ptr<SpectrumValue>
-WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(uint32_t centerFrequency,
-                                                            uint16_t channelWidth,
-                                                            double txPowerW,
-                                                            uint16_t guardBandwidth,
-                                                            double minInnerBandDbr,
-                                                            double minOuterBandDbr,
-                                                            double lowestPointDbr)
-{
-    NS_LOG_FUNCTION(centerFrequency << channelWidth << txPowerW << guardBandwidth << minInnerBandDbr
-                                    << minOuterBandDbr << lowestPointDbr);
-    uint32_t carrierSpacing = 312500;
+WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(
+    const std::vector<MHz_u>& centerFrequencies,
+    MHz_u channelWidth,
+    Watt_u txPower,
+    MHz_u guardBandwidth,
+    dBr_u minInnerBand,
+    dBr_u minOuterBand,
+    dBr_u lowestPoint)
+{
+    NS_ASSERT_MSG(centerFrequencies.size() == 1 ||
+                      (channelWidth == 160 && centerFrequencies.size() <= 2),
+                  "PSD for non-contiguous channels is only possible when the total width is 160 "
+                  "MHz and cannot be made of more than 2 segments");
+    NS_LOG_FUNCTION(printFrequencies(centerFrequencies)
+                    << channelWidth << txPower << guardBandwidth << minInnerBand << minOuterBand
+                    << lowestPoint);
+    const Hz_u carrierSpacing = 312500;
     Ptr<SpectrumValue> c = Create<SpectrumValue>(
-        GetSpectrumModel(centerFrequency, channelWidth, carrierSpacing, guardBandwidth));
-    auto nGuardBands = static_cast<uint32_t>(((2 * guardBandwidth * 1e6) / carrierSpacing) + 0.5);
-    auto nAllocatedBands = static_cast<uint32_t>(((channelWidth * 1e6) / carrierSpacing) + 0.5);
-    NS_ASSERT_MSG(c->GetSpectrumModel()->GetNumBands() == (nAllocatedBands + nGuardBands + 1),
+        GetSpectrumModel(centerFrequencies, channelWidth, carrierSpacing, guardBandwidth));
+    // assume all frequency segments have the same width, hence split the guard bandwidth
+    // accordingly over the segments
+    guardBandwidth /= centerFrequencies.size();
+    const auto nGuardBands =
+        static_cast<uint32_t>(((2 * guardBandwidth * 1e6) / carrierSpacing) + 0.5);
+    const auto nAllocatedBands =
+        static_cast<uint32_t>(((channelWidth * 1e6) / carrierSpacing) + 0.5);
+    const auto separationWidth = std::abs(centerFrequencies.back() - centerFrequencies.front());
+    const auto unallocatedWidth = separationWidth > 0 ? (separationWidth - (channelWidth / 2)) : 0;
+    const auto nUnallocatedBands =
+        static_cast<uint32_t>(((unallocatedWidth * 1e6) / carrierSpacing) + 0.5);
+    NS_ASSERT_MSG(c->GetSpectrumModel()->GetNumBands() ==
+                      (nAllocatedBands + nGuardBands + nUnallocatedBands + 1),
                   "Unexpected number of bands " << c->GetSpectrumModel()->GetNumBands());
     std::size_t num20MhzBands = channelWidth / 20;
     std::size_t numAllocatedSubcarriersPer20MHz = 56;
-    double txPowerPerBandW = (txPowerW / numAllocatedSubcarriersPer20MHz) / num20MhzBands;
-    NS_LOG_DEBUG("Power per band " << txPowerPerBandW << "W");
+    const auto txPowerPerBand = (txPower / numAllocatedSubcarriersPer20MHz) / num20MhzBands;
+    NS_LOG_DEBUG("Power per band " << txPowerPerBand << "W");
 
     std::size_t numSubcarriersPer20MHz = (20 * 1e6) / carrierSpacing;
     std::size_t numUnallocatedSubcarriersPer20MHz =
         numSubcarriersPer20MHz - numAllocatedSubcarriersPer20MHz;
-    std::vector<WifiSpectrumBandIndices>
-        subBands; // list of data/pilot-containing subBands (sent at 0dBr)
-    subBands.resize(num20MhzBands *
-                    2); // the center subcarrier is skipped, hence 2 subbands per 20 MHz subchannel
+    std::vector<std::vector<WifiSpectrumBandIndices>> subBandsPerSegment(
+        centerFrequencies.size()); // list of data/pilot-containing subBands (sent at 0dBr)
+    for (std::size_t i = 0; i < centerFrequencies.size(); ++i)
+    {
+        subBandsPerSegment.at(i).resize(
+            num20MhzBands * 2 / centerFrequencies.size()); // the center subcarrier is skipped,
+                                                           // hence 2 subbands per 20 MHz subchannel
+    }
     uint32_t start = (nGuardBands / 2) + (numUnallocatedSubcarriersPer20MHz / 2);
     uint32_t stop;
-    for (auto it = subBands.begin(); it != subBands.end();)
+    for (auto& subBands : subBandsPerSegment)
     {
-        stop = start + (numAllocatedSubcarriersPer20MHz / 2) - 1;
-        *it = std::make_pair(start, stop);
-        ++it;
-        start = stop + 2; // skip center subcarrier
-        stop = start + (numAllocatedSubcarriersPer20MHz / 2) - 1;
-        *it = std::make_pair(start, stop);
-        ++it;
-        start = stop + numUnallocatedSubcarriersPer20MHz;
+        for (auto it = subBands.begin(); it != subBands.end();)
+        {
+            stop = start + (numAllocatedSubcarriersPer20MHz / 2) - 1;
+            *it = std::make_pair(start, stop);
+            ++it;
+            start = stop + 2; // skip center subcarrier
+            stop = start + (numAllocatedSubcarriersPer20MHz / 2) - 1;
+            *it = std::make_pair(start, stop);
+            ++it;
+            start = stop + numUnallocatedSubcarriersPer20MHz;
+        }
+        start += nUnallocatedBands;
     }
 
     // Prepare spectrum mask specific variables
     auto innerSlopeWidth = static_cast<uint32_t>(
         (2e6 / carrierSpacing) +
         0.5); // size in number of subcarriers of the inner band (2MHz for HT/VHT)
-    WifiSpectrumBandIndices maskBand(0, nAllocatedBands + nGuardBands);
+    WifiSpectrumBandIndices maskBand(0, nAllocatedBands + nGuardBands + nUnallocatedBands);
 
     // Build transmit spectrum mask
     CreateSpectrumMaskForOfdm(c,
-                              subBands,
+                              subBandsPerSegment,
                               maskBand,
-                              txPowerPerBandW,
+                              txPowerPerBand,
                               nGuardBands,
                               innerSlopeWidth,
-                              minInnerBandDbr,
-                              minOuterBandDbr,
-                              lowestPointDbr);
-    NormalizeSpectrumMask(c, txPowerW);
-    NS_ASSERT_MSG(std::abs(txPowerW - Integral(*c)) < 1e-6, "Power allocation failed");
+                              minInnerBand,
+                              minOuterBand,
+                              lowestPoint);
+    NormalizeSpectrumMask(c, txPower);
+    NS_ASSERT_MSG(std::abs(txPower - Integral(*c)) < 1e-6, "Power allocation failed");
     return c;
 }
 
 Ptr<SpectrumValue>
 WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(
-    uint32_t centerFrequency,
-    uint16_t channelWidth,
-    double txPowerW,
-    uint16_t guardBandwidth,
-    double minInnerBandDbr,
-    double minOuterBandDbr,
-    double lowestPointDbr,
+    MHz_u centerFrequency,
+    MHz_u channelWidth,
+    Watt_u txPower,
+    MHz_u guardBandwidth,
+    dBr_u minInnerBand,
+    dBr_u minOuterBand,
+    dBr_u lowestPoint,
     const std::vector<bool>& puncturedSubchannels)
 {
-    NS_LOG_FUNCTION(centerFrequency << channelWidth << txPowerW << guardBandwidth << minInnerBandDbr
-                                    << minOuterBandDbr << lowestPointDbr);
-    uint32_t carrierSpacing = 78125;
+    return CreateHeOfdmTxPowerSpectralDensity(std::vector<MHz_u>{centerFrequency},
+                                              channelWidth,
+                                              txPower,
+                                              guardBandwidth,
+                                              minInnerBand,
+                                              minOuterBand,
+                                              lowestPoint,
+                                              puncturedSubchannels);
+}
+
+Ptr<SpectrumValue>
+WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(
+    const std::vector<MHz_u>& centerFrequencies,
+    MHz_u channelWidth,
+    Watt_u txPower,
+    MHz_u guardBandwidth,
+    dBr_u minInnerBand,
+    dBr_u minOuterBand,
+    dBr_u lowestPoint,
+    const std::vector<bool>& puncturedSubchannels)
+{
+    NS_ASSERT_MSG(
+        centerFrequencies.size() == 1 || channelWidth == 160,
+        "PSD for non-contiguous channels is only possible when the total width is 160 MHz");
+    NS_LOG_FUNCTION(printFrequencies(centerFrequencies)
+                    << channelWidth << txPower << guardBandwidth << minInnerBand << minOuterBand
+                    << lowestPoint);
+    const Hz_u carrierSpacing = 78125;
     Ptr<SpectrumValue> c = Create<SpectrumValue>(
-        GetSpectrumModel(centerFrequency, channelWidth, carrierSpacing, guardBandwidth));
-    auto nGuardBands = static_cast<uint32_t>(((2 * guardBandwidth * 1e6) / carrierSpacing) + 0.5);
-    auto nAllocatedBands = static_cast<uint32_t>(((channelWidth * 1e6) / carrierSpacing) + 0.5);
-    NS_ASSERT_MSG(c->GetSpectrumModel()->GetNumBands() == (nAllocatedBands + nGuardBands + 1),
+        GetSpectrumModel(centerFrequencies, channelWidth, carrierSpacing, guardBandwidth));
+    // assume all frequency segments have the same width, hence split the guard bandwidth
+    // accordingly over the segments
+    guardBandwidth /= centerFrequencies.size();
+    const auto nGuardBands =
+        static_cast<uint32_t>(((2 * guardBandwidth * 1e6) / carrierSpacing) + 0.5);
+    const auto separationWidth = std::abs(centerFrequencies.back() - centerFrequencies.front());
+    const auto unallocatedWidth = separationWidth > 0 ? (separationWidth - (channelWidth / 2)) : 0;
+    const auto nUnallocatedBands =
+        static_cast<uint32_t>(((unallocatedWidth * 1e6) / carrierSpacing) + 0.5);
+    const auto nAllocatedBands =
+        static_cast<uint32_t>(((channelWidth * 1e6) / carrierSpacing) + 0.5);
+    NS_ASSERT_MSG(c->GetSpectrumModel()->GetNumBands() ==
+                      (nAllocatedBands + nGuardBands + nUnallocatedBands + 1),
                   "Unexpected number of bands " << c->GetSpectrumModel()->GetNumBands());
-    double txPowerPerBandW = 0.0;
+    Watt_u txPowerPerBand = 0.0;
     uint32_t start1;
     uint32_t stop1;
     uint32_t start2;
@@ -394,14 +516,14 @@
     // Prepare spectrum mask specific variables
     auto innerSlopeWidth = static_cast<uint32_t>(
         (1e6 / carrierSpacing) + 0.5); // size in number of subcarriers of the inner band
-    std::vector<WifiSpectrumBandIndices>
-        subBands; // list of data/pilot-containing subBands (sent at 0dBr)
-    WifiSpectrumBandIndices maskBand(0, nAllocatedBands + nGuardBands);
-    switch (channelWidth)
+    std::vector<std::vector<WifiSpectrumBandIndices>> subBandsPerSegment(
+        centerFrequencies.size()); // list of data/pilot-containing subBands (sent at 0dBr)
+    WifiSpectrumBandIndices maskBand(0, nAllocatedBands + nGuardBands + nUnallocatedBands);
+    switch (static_cast<uint16_t>(channelWidth))
     {
     case 20:
         // 242 subcarriers (234 data + 8 pilot)
-        txPowerPerBandW = txPowerW / 242;
+        txPowerPerBand = txPower / 242;
         innerSlopeWidth =
             static_cast<uint32_t>((5e5 / carrierSpacing) + 0.5); // [-10.25;-9.75] & [9.75;10.25]
         // skip the guard band and 6 subbands, then place power in 121 subbands, then
@@ -411,12 +533,12 @@
         stop1 = start1 + 121 - 1;
         start2 = stop1 + 4;
         stop2 = start2 + 121 - 1;
-        subBands.emplace_back(start1, stop1);
-        subBands.emplace_back(start2, stop2);
+        subBandsPerSegment.at(0).emplace_back(start1, stop1);
+        subBandsPerSegment.at(0).emplace_back(start2, stop2);
         break;
     case 40:
         // 484 subcarriers (468 data + 16 pilot)
-        txPowerPerBandW = txPowerW / 484;
+        txPowerPerBand = txPower / 484;
         // skip the guard band and 12 subbands, then place power in 242 subbands, then
         // skip 5 DC, then place power in 242 subbands, then skip
         // the final 11 subbands and the guard band.
@@ -424,12 +546,12 @@
         stop1 = start1 + 242 - 1;
         start2 = stop1 + 6;
         stop2 = start2 + 242 - 1;
-        subBands.emplace_back(start1, stop1);
-        subBands.emplace_back(start2, stop2);
+        subBandsPerSegment.at(0).emplace_back(start1, stop1);
+        subBandsPerSegment.at(0).emplace_back(start2, stop2);
         break;
     case 80:
         // 996 subcarriers (980 data + 16 pilot)
-        txPowerPerBandW = txPowerW / 996;
+        txPowerPerBand = txPower / 996;
         // skip the guard band and 12 subbands, then place power in 498 subbands, then
         // skip 5 DC, then place power in 498 subbands, then skip
         // the final 11 subbands and the guard band.
@@ -437,25 +559,29 @@
         stop1 = start1 + 498 - 1;
         start2 = stop1 + 6;
         stop2 = start2 + 498 - 1;
-        subBands.emplace_back(start1, stop1);
-        subBands.emplace_back(start2, stop2);
+        subBandsPerSegment.at(0).emplace_back(start1, stop1);
+        subBandsPerSegment.at(0).emplace_back(start2, stop2);
         break;
-    case 160:
+    case 160: {
+        NS_ASSERT_MSG(centerFrequencies.size() <= 2,
+                      "It is not possible to create a PSD made of more than 2 segments for a width "
+                      "of 160 MHz");
         // 2 x 996 subcarriers (2 x 80 MHZ bands)
-        txPowerPerBandW = txPowerW / (2 * 996);
+        txPowerPerBand = txPower / (2 * 996);
         start1 = (nGuardBands / 2) + 12;
         stop1 = start1 + 498 - 1;
         start2 = stop1 + 6;
         stop2 = start2 + 498 - 1;
-        start3 = stop2 + (2 * 12);
+        start3 = stop2 + (2 * 12) + nUnallocatedBands;
         stop3 = start3 + 498 - 1;
         start4 = stop3 + 6;
         stop4 = start4 + 498 - 1;
-        subBands.emplace_back(start1, stop1);
-        subBands.emplace_back(start2, stop2);
-        subBands.emplace_back(start3, stop3);
-        subBands.emplace_back(start4, stop4);
+        subBandsPerSegment.at(0).emplace_back(start1, stop1);
+        subBandsPerSegment.at(0).emplace_back(start2, stop2);
+        subBandsPerSegment.at(subBandsPerSegment.size() - 1).emplace_back(start3, stop3);
+        subBandsPerSegment.at(subBandsPerSegment.size() - 1).emplace_back(start4, stop4);
         break;
+    }
     default:
         NS_FATAL_ERROR("ChannelWidth " << channelWidth << " unsupported");
         break;
@@ -465,348 +591,534 @@
     auto puncturedSlopeWidth =
         static_cast<uint32_t>((500e3 / carrierSpacing) +
                               0.5); // size in number of subcarriers of the punctured slope band
-    std::vector<WifiSpectrumBandIndices> puncturedBands;
+    std::vector<std::vector<WifiSpectrumBandIndices>> puncturedBandsPerSegment;
     std::size_t subcarriersPerSuband = (20 * 1e6 / carrierSpacing);
     uint32_t start = (nGuardBands / 2);
     uint32_t stop = start + subcarriersPerSuband - 1;
-    for (auto puncturedSubchannel : puncturedSubchannels)
+    if (!puncturedSubchannels.empty())
     {
-        if (puncturedSubchannel)
+        for (std::size_t i = 0; i < subBandsPerSegment.size(); ++i)
         {
-            puncturedBands.emplace_back(start, stop);
+            puncturedBandsPerSegment.emplace_back();
+        }
+    }
+    std::size_t prevPsdIndex = 0;
+    for (std::size_t i = 0; i < puncturedSubchannels.size(); ++i)
+    {
+        std::size_t psdIndex = (puncturedBandsPerSegment.size() == 1)
+                                   ? 0
+                                   : ((i < (puncturedSubchannels.size() / 2)) ? 0 : 1);
+        if (psdIndex != prevPsdIndex)
+        {
+            start += nUnallocatedBands;
+            stop += nUnallocatedBands;
+        }
+        if (puncturedSubchannels.at(i))
+        {
+            puncturedBandsPerSegment.at(psdIndex).emplace_back(start, stop);
         }
         start = stop + 1;
         stop = start + subcarriersPerSuband - 1;
+        prevPsdIndex = psdIndex;
     }
 
     // Build transmit spectrum mask
     CreateSpectrumMaskForOfdm(c,
-                              subBands,
+                              subBandsPerSegment,
                               maskBand,
-                              txPowerPerBandW,
+                              txPowerPerBand,
                               nGuardBands,
                               innerSlopeWidth,
-                              minInnerBandDbr,
-                              minOuterBandDbr,
-                              lowestPointDbr,
-                              puncturedBands,
+                              minInnerBand,
+                              minOuterBand,
+                              lowestPoint,
+                              puncturedBandsPerSegment,
                               puncturedSlopeWidth);
-    NormalizeSpectrumMask(c, txPowerW);
-    NS_ASSERT_MSG(std::abs(txPowerW - Integral(*c)) < 1e-6, "Power allocation failed");
+    NormalizeSpectrumMask(c, txPower);
+    NS_ASSERT_MSG(std::abs(txPower - Integral(*c)) < 1e-6, "Power allocation failed");
     return c;
 }
 
 Ptr<SpectrumValue>
-WifiSpectrumValueHelper::CreateHeMuOfdmTxPowerSpectralDensity(uint32_t centerFrequency,
-                                                              uint16_t channelWidth,
-                                                              double txPowerW,
-                                                              uint16_t guardBandwidth,
-                                                              const WifiSpectrumBandIndices& ru)
-{
-    NS_LOG_FUNCTION(centerFrequency << channelWidth << txPowerW << guardBandwidth << ru.first
-                                    << ru.second);
-    uint32_t carrierSpacing = 78125;
+WifiSpectrumValueHelper::CreateHeMuOfdmTxPowerSpectralDensity(
+    const std::vector<MHz_u>& centerFrequencies,
+    MHz_u channelWidth,
+    Watt_u txPower,
+    MHz_u guardBandwidth,
+    const std::vector<WifiSpectrumBandIndices>& ru)
+{
+    auto printRuIndices = [](const std::vector<WifiSpectrumBandIndices>& v) {
+        std::stringstream ss;
+        for (const auto& [start, stop] : v)
+        {
+            ss << start << "-" << stop << " ";
+        }
+        return ss.str();
+    };
+    NS_LOG_FUNCTION(printFrequencies(centerFrequencies)
+                    << channelWidth << txPower << guardBandwidth << printRuIndices(ru));
+    const Hz_u carrierSpacing = 78125;
     Ptr<SpectrumValue> c = Create<SpectrumValue>(
-        GetSpectrumModel(centerFrequency, channelWidth, carrierSpacing, guardBandwidth));
+        GetSpectrumModel(centerFrequencies, channelWidth, carrierSpacing, guardBandwidth));
 
     // Build spectrum mask
     auto vit = c->ValuesBegin();
     auto bit = c->ConstBandsBegin();
-    double txPowerPerBandW = (txPowerW / (ru.second - ru.first + 1)); // FIXME: null subcarriers
+    const auto numSubcarriers =
+        std::accumulate(ru.cbegin(), ru.cend(), 0, [](uint32_t sum, const auto& p) {
+            return sum + (p.second - p.first) + 1;
+        });
+    const auto txPowerPerBand = (txPower / numSubcarriers); // FIXME: null subcarriers
     uint32_t numBands = c->GetSpectrumModel()->GetNumBands();
+    const auto psd = txPowerPerBand / (bit->fh - bit->fl);
     for (size_t i = 0; i < numBands; i++, vit++, bit++)
     {
-        if (i < ru.first || i > ru.second) // outside the spectrum mask
-        {
-            *vit = 0.0;
-        }
-        else
-        {
-            *vit = (txPowerPerBandW / (bit->fh - bit->fl));
-        }
+        const auto allocated = std::any_of(ru.cbegin(), ru.cend(), [i](const auto& p) {
+            return (i >= p.first && i <= p.second);
+        });
+        *vit = allocated ? psd : 0.0;
     }
 
     return c;
 }
 
-Ptr<SpectrumValue>
-WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity(uint32_t centerFrequency,
-                                                         uint16_t channelWidth,
-                                                         uint32_t carrierSpacing,
-                                                         double noiseFigure,
-                                                         uint16_t guardBandwidth)
-{
-    Ptr<SpectrumModel> model =
-        GetSpectrumModel(centerFrequency, channelWidth, carrierSpacing, guardBandwidth);
-    return CreateNoisePowerSpectralDensity(noiseFigure, model);
-}
-
-Ptr<SpectrumValue>
-WifiSpectrumValueHelper::CreateNoisePowerSpectralDensity(double noiseFigureDb,
-                                                         Ptr<SpectrumModel> spectrumModel)
-{
-    NS_LOG_FUNCTION(noiseFigureDb << spectrumModel);
-
-    // see "LTE - From theory to practice"
-    // Section 22.4.4.2 Thermal Noise and Receiver Noise Figure
-    const double kT_dBm_Hz = -174.0; // dBm/Hz
-    double kT_W_Hz = DbmToW(kT_dBm_Hz);
-    double noiseFigureLinear = std::pow(10.0, noiseFigureDb / 10.0);
-    double noisePowerSpectralDensity = kT_W_Hz * noiseFigureLinear;
-
-    Ptr<SpectrumValue> noisePsd = Create<SpectrumValue>(spectrumModel);
-    (*noisePsd) = noisePowerSpectralDensity;
-    NS_LOG_INFO("NoisePowerSpectralDensity has integrated power of " << Integral(*noisePsd));
-    return noisePsd;
-}
-
 void
 WifiSpectrumValueHelper::CreateSpectrumMaskForOfdm(
     Ptr<SpectrumValue> c,
-    const std::vector<WifiSpectrumBandIndices>& allocatedSubBands,
+    const std::vector<std::vector<WifiSpectrumBandIndices>>& allocatedSubBandsPerSegment,
     const WifiSpectrumBandIndices& maskBand,
-    double txPowerPerBandW,
+    Watt_u txPowerPerBand,
     uint32_t nGuardBands,
     uint32_t innerSlopeWidth,
-    double minInnerBandDbr,
-    double minOuterBandDbr,
-    double lowestPointDbr,
-    const std::vector<WifiSpectrumBandIndices>& puncturedBands,
+    dBr_u minInnerBand,
+    dBr_u minOuterBand,
+    dBr_u lowestPoint,
+    const std::vector<std::vector<WifiSpectrumBandIndices>>& puncturedBandsPerSegment,
     uint32_t puncturedSlopeWidth)
 {
-    NS_LOG_FUNCTION(c << allocatedSubBands.front().first << allocatedSubBands.back().second
-                      << maskBand.first << maskBand.second << txPowerPerBandW << nGuardBands
-                      << innerSlopeWidth << minInnerBandDbr << minOuterBandDbr << lowestPointDbr
-                      << puncturedSlopeWidth);
-    uint32_t numSubBands = allocatedSubBands.size();
+    NS_ASSERT_MSG(allocatedSubBandsPerSegment.size() <= 2,
+                  "Only PSDs for up to 2 frequency segments are supported");
+    NS_ASSERT(puncturedBandsPerSegment.empty() ||
+              (puncturedBandsPerSegment.size() == allocatedSubBandsPerSegment.size()));
+    NS_LOG_FUNCTION(c << allocatedSubBandsPerSegment.front().front().first
+                      << allocatedSubBandsPerSegment.front().back().second << maskBand.first
+                      << maskBand.second << txPowerPerBand << nGuardBands << innerSlopeWidth
+                      << minInnerBand << minOuterBand << lowestPoint << puncturedSlopeWidth);
+    uint32_t numSubBands = allocatedSubBandsPerSegment.front().size();
     uint32_t numBands = c->GetSpectrumModel()->GetNumBands();
     uint32_t numMaskBands = maskBand.second - maskBand.first + 1;
     NS_ASSERT(numSubBands && numBands && numMaskBands);
-    NS_LOG_LOGIC("Power per band " << txPowerPerBandW << "W");
+    NS_LOG_LOGIC("Power per band " << txPowerPerBand << "W");
 
     // Different power levels
-    double txPowerRefDbm = (10.0 * std::log10(txPowerPerBandW * 1000.0));
-    double txPowerInnerBandMinDbm = txPowerRefDbm + minInnerBandDbr;
-    double txPowerMiddleBandMinDbm = txPowerRefDbm + minOuterBandDbr;
-    double txPowerOuterBandMinDbm =
-        txPowerRefDbm + lowestPointDbr; // TODO also take into account dBm/MHz constraints
+    dBm_u txPowerRef = (10.0 * std::log10(txPowerPerBand * 1000.0));
+    dBm_u txPowerInnerBandMin = txPowerRef + minInnerBand;
+    dBm_u txPowerMiddleBandMin = txPowerRef + minOuterBand;
+    dBm_u txPowerOuterBandMin =
+        txPowerRef + lowestPoint; // TODO also take into account dBm/MHz constraints
 
     // Different widths (in number of bands)
     uint32_t outerSlopeWidth =
         nGuardBands / 4; // nGuardBands is the total left+right guard band. The left/right outer
                          // part is half of the left/right guard band.
     uint32_t middleSlopeWidth = outerSlopeWidth - (innerSlopeWidth / 2);
-    WifiSpectrumBandIndices outerBandLeft(
-        maskBand.first, // to handle cases where allocated channel is
-                        // under WifiPhy configured channel width.
-        maskBand.first + outerSlopeWidth - 1);
-    WifiSpectrumBandIndices middleBandLeft(outerBandLeft.second + 1,
-                                           outerBandLeft.second + middleSlopeWidth);
-    WifiSpectrumBandIndices innerBandLeft(
-        allocatedSubBands.front().first - innerSlopeWidth,
-        allocatedSubBands.front().first -
-            1); // better to place slope based on allocated subcarriers
-    WifiSpectrumBandIndices flatJunctionLeft(
-        middleBandLeft.second + 1,
-        innerBandLeft.first - 1); // in order to handle shift due to guard subcarriers
-    WifiSpectrumBandIndices outerBandRight(
-        maskBand.second - outerSlopeWidth + 1,
-        maskBand.second); // start from outer edge to be able to compute flat junction width
-    WifiSpectrumBandIndices middleBandRight(outerBandRight.first - middleSlopeWidth,
-                                            outerBandRight.first - 1);
-    WifiSpectrumBandIndices innerBandRight(allocatedSubBands.back().second + 1,
-                                           allocatedSubBands.back().second + innerSlopeWidth);
-    WifiSpectrumBandIndices flatJunctionRight(innerBandRight.second + 1, middleBandRight.first - 1);
+
+    std::vector<WifiSpectrumBandIndices> outerBandsLeft;
+    std::vector<WifiSpectrumBandIndices> middleBandsLeft;
+    std::vector<WifiSpectrumBandIndices> flatJunctionsLeft;
+    std::vector<WifiSpectrumBandIndices> innerBandsLeft;
+    std::vector<WifiSpectrumBandIndices> allocatedSubBands;
+    std::vector<WifiSpectrumBandIndices> innerBandsRight;
+    std::vector<WifiSpectrumBandIndices> flatJunctionsRight;
+    std::vector<WifiSpectrumBandIndices> middleBandsRight;
+    std::vector<WifiSpectrumBandIndices> outerBandsRight;
+    std::optional<WifiSpectrumBandIndices> betweenPsdsBand;
+
+    allocatedSubBands.emplace_back(allocatedSubBandsPerSegment.front().front().first,
+                                   allocatedSubBandsPerSegment.front().back().second);
+    outerBandsLeft.emplace_back(maskBand.first, // to handle cases where allocated channel is
+                                                // under WifiPhy configured channel width.
+                                maskBand.first + outerSlopeWidth - 1);
+    middleBandsLeft.emplace_back(outerBandsLeft.front().second + 1,
+                                 outerBandsLeft.front().second + middleSlopeWidth);
+    innerBandsLeft.emplace_back(allocatedSubBands.front().first - innerSlopeWidth,
+                                allocatedSubBands.front().first -
+                                    1); // better to place slope based on allocated subcarriers
+    flatJunctionsLeft.emplace_back(middleBandsLeft.front().second + 1,
+                                   innerBandsLeft.front().first -
+                                       1); // in order to handle shift due to guard subcarriers
+    uint32_t flatJunctionWidth =
+        flatJunctionsLeft.front().second - flatJunctionsLeft.front().first + 1;
+    innerBandsRight.emplace_back(allocatedSubBands.front().second + 1,
+                                 allocatedSubBands.front().second + innerSlopeWidth);
+    flatJunctionsRight.emplace_back(innerBandsRight.front().second + 1,
+                                    innerBandsRight.front().second + flatJunctionWidth);
+    middleBandsRight.emplace_back(flatJunctionsRight.front().second + 1,
+                                  flatJunctionsRight.front().second + middleSlopeWidth);
+    outerBandsRight.emplace_back(middleBandsRight.front().second + 1,
+                                 middleBandsRight.front().second + outerSlopeWidth);
+
+    if (allocatedSubBandsPerSegment.size() > 1)
+    {
+        const auto offset = (((allocatedSubBandsPerSegment.front().back().second -
+                               allocatedSubBandsPerSegment.front().front().first) /
+                              2) +
+                             (allocatedSubBandsPerSegment.back().front().first -
+                              allocatedSubBandsPerSegment.front().back().second) +
+                             ((allocatedSubBandsPerSegment.back().back().second -
+                               allocatedSubBandsPerSegment.back().front().first) /
+                              2));
+        outerBandsLeft.emplace_back(outerBandsLeft.front().first + offset,
+                                    outerBandsLeft.front().second + offset);
+        middleBandsLeft.emplace_back(middleBandsLeft.front().first + offset,
+                                     middleBandsLeft.front().second + offset);
+        flatJunctionsLeft.emplace_back(flatJunctionsLeft.front().first + offset,
+                                       flatJunctionsLeft.front().second + offset);
+        innerBandsLeft.emplace_back(innerBandsLeft.front().first + offset,
+                                    innerBandsLeft.front().second + offset);
+        allocatedSubBands.emplace_back(allocatedSubBands.front().first + offset,
+                                       allocatedSubBands.front().second + offset);
+        innerBandsRight.emplace_back(innerBandsRight.front().first + offset,
+                                     innerBandsRight.front().second + offset);
+        flatJunctionsRight.emplace_back(flatJunctionsRight.front().first + offset,
+                                        flatJunctionsRight.front().second + offset);
+        middleBandsRight.emplace_back(middleBandsRight.front().first + offset,
+                                      middleBandsRight.front().second + offset);
+        outerBandsRight.emplace_back(outerBandsRight.front().first + offset,
+                                     outerBandsRight.front().second + offset);
+        betweenPsdsBand.emplace(middleBandsRight.front().first, middleBandsLeft.back().second);
+    }
+
     std::ostringstream ss;
-    ss << "outerBandLeft=[" << outerBandLeft.first << ";" << outerBandLeft.second << "] "
-       << "middleBandLeft=[" << middleBandLeft.first << ";" << middleBandLeft.second << "] "
-       << "flatJunctionLeft=[" << flatJunctionLeft.first << ";" << flatJunctionLeft.second << "] "
-       << "innerBandLeft=[" << innerBandLeft.first << ";" << innerBandLeft.second << "] "
-       << "subBands=[" << allocatedSubBands.front().first << ";" << allocatedSubBands.back().second
-       << "] ";
-    if (!puncturedBands.empty())
-    {
-        ss << "puncturedBands=[" << puncturedBands.front().first << ";"
-           << puncturedBands.back().second << "] ";
-    }
-    ss << "innerBandRight=[" << innerBandRight.first << ";" << innerBandRight.second << "] "
-       << "flatJunctionRight=[" << flatJunctionRight.first << ";" << flatJunctionRight.second
-       << "] "
-       << "middleBandRight=[" << middleBandRight.first << ";" << middleBandRight.second << "] "
-       << "outerBandRight=[" << outerBandRight.first << ";" << outerBandRight.second << "] ";
+    for (std::size_t i = 0; i < allocatedSubBandsPerSegment.size(); ++i)
+    {
+        if (allocatedSubBandsPerSegment.size() > 1)
+        {
+            ss << "PSD" << i + 1 << ": ";
+        }
+        ss << "outerBandLeft=[" << outerBandsLeft.at(i).first << ";" << outerBandsLeft.at(i).second
+           << "] "
+           << "middleBandLeft=[" << middleBandsLeft.at(i).first << ";"
+           << middleBandsLeft.at(i).second << "] "
+           << "flatJunctionLeft=[" << flatJunctionsLeft.at(i).first << ";"
+           << flatJunctionsLeft.at(i).second << "] "
+           << "innerBandLeft=[" << innerBandsLeft.at(i).first << ";" << innerBandsLeft.at(i).second
+           << "] "
+           << "allocatedBand=[" << allocatedSubBands.at(i).first << ";"
+           << allocatedSubBands.at(i).second << "] ";
+        if (!puncturedBandsPerSegment.empty() && !puncturedBandsPerSegment.at(i).empty())
+        {
+            ss << "puncturedBands=[" << puncturedBandsPerSegment.at(i).front().first << ";"
+               << puncturedBandsPerSegment.at(i).back().second << "] ";
+        }
+        ss << "innerBandRight=[" << innerBandsRight.at(i).first << ";"
+           << innerBandsRight.at(i).second << "] "
+           << "flatJunctionRight=[" << flatJunctionsRight.at(i).first << ";"
+           << flatJunctionsRight.at(i).second << "] "
+           << "middleBandRight=[" << middleBandsRight.at(i).first << ";"
+           << middleBandsRight.at(i).second << "] "
+           << "outerBandRight=[" << outerBandsRight.at(i).first << ";"
+           << outerBandsRight.at(i).second << "] ";
+    }
+    if (allocatedSubBandsPerSegment.size() > 1)
+    {
+        ss << "=> PSD: "
+           << "outerBandLeft=[" << outerBandsLeft.front().first << ";"
+           << outerBandsLeft.front().second << "] "
+           << "middleBandLeft=[" << middleBandsLeft.front().first << ";"
+           << middleBandsLeft.front().second << "] "
+           << "flatJunctionLeft=[" << flatJunctionsLeft.front().first << ";"
+           << flatJunctionsLeft.front().second << "] "
+           << "innerBandLeft=[" << innerBandsLeft.front().first << ";"
+           << innerBandsLeft.front().second << "] "
+           << "allocatedBandInPsd1=[" << allocatedSubBands.front().first << ";"
+           << allocatedSubBands.front().second << "] ";
+        if (!puncturedBandsPerSegment.empty() && !puncturedBandsPerSegment.front().empty())
+        {
+            ss << "puncturedBandsInPsd1=[" << puncturedBandsPerSegment.front().front().first << ";"
+               << puncturedBandsPerSegment.front().back().second << "] ";
+        }
+        ss << "flatJunctionRightPsd1=[" << flatJunctionsRight.front().first << ";"
+           << flatJunctionsRight.front().second << "] "
+           << "linearSum=[" << betweenPsdsBand->first << ";" << betweenPsdsBand->second << "] "
+           << "flatJunctionLeftPsd2=[" << flatJunctionsLeft.back().first << ";"
+           << flatJunctionsLeft.back().second << "] "
+           << "innerBandLeftPsd2=[" << innerBandsLeft.back().first << ";"
+           << innerBandsLeft.back().second << "] "
+           << "allocatedBandInPsd2=[" << allocatedSubBands.back().first << ";"
+           << allocatedSubBands.back().second << "] ";
+        if (!puncturedBandsPerSegment.empty() && !puncturedBandsPerSegment.back().empty())
+        {
+            ss << "puncturedBandsInPsd2=[" << puncturedBandsPerSegment.back().front().first << ";"
+               << puncturedBandsPerSegment.back().back().second << "] ";
+        }
+        ss << "innerBandRight=[" << innerBandsRight.back().first << ";"
+           << innerBandsRight.back().second << "] "
+           << "flatJunctionRight=[" << flatJunctionsRight.back().first << ";"
+           << flatJunctionsRight.back().second << "] "
+           << "middleBandRight=[" << middleBandsRight.back().first << ";"
+           << middleBandsRight.back().second << "] "
+           << "outerBandRight=[" << outerBandsRight.back().first << ";"
+           << outerBandsRight.back().second << "] ";
+    }
     NS_LOG_DEBUG(ss.str());
+    NS_ASSERT(maskBand.second == outerBandsRight.back().second);
     NS_ASSERT(numMaskBands ==
-              ((allocatedSubBands.back().second - allocatedSubBands.front().first +
+              ((allocatedSubBandsPerSegment.back().back().second -
+                allocatedSubBandsPerSegment.front().front().first +
                 1) // equivalent to allocatedBand (includes notches and DC)
-               + 2 * (innerSlopeWidth + middleSlopeWidth + outerSlopeWidth) +
-               (flatJunctionLeft.second - flatJunctionLeft.first + 1) // flat junctions
-               + (flatJunctionRight.second - flatJunctionRight.first + 1)));
+               + 2 * (innerSlopeWidth + middleSlopeWidth + outerSlopeWidth + flatJunctionWidth)));
 
     // Different slopes
-    double innerSlope = (-1 * minInnerBandDbr) / innerSlopeWidth;
-    double middleSlope = (-1 * (minOuterBandDbr - minInnerBandDbr)) / middleSlopeWidth;
-    double outerSlope = (txPowerMiddleBandMinDbm - txPowerOuterBandMinDbm) / outerSlopeWidth;
-    double puncturedSlope = (-1 * minInnerBandDbr) / puncturedSlopeWidth;
+    double innerSlope = (-1.0 * minInnerBand) / innerSlopeWidth;
+    double middleSlope = (-1.0 * (minOuterBand - minInnerBand)) / middleSlopeWidth;
+    double outerSlope = (txPowerMiddleBandMin - txPowerOuterBandMin) / outerSlopeWidth;
+    double puncturedSlope = (-1.0 * minInnerBand) / puncturedSlopeWidth;
 
     // Build spectrum mask
-    auto vit = c->ValuesBegin();
-    auto bit = c->ConstBandsBegin();
-    double txPowerW = 0.0;
-    double previousTxPowerW = 0.0;
-    for (size_t i = 0; i < numBands; i++, vit++, bit++)
+    Watt_u previousTxPower = 0.0;
+    std::vector<Watt_u> txPowerValues(numBands);
+    NS_ASSERT(txPowerValues.size() == numBands);
+    for (size_t i = 0; i < numBands; ++i)
     {
+        size_t psdIndex =
+            (allocatedSubBandsPerSegment.size() == 1) ? 0 : ((i < (numBands / 2)) ? 0 : 1);
+        Watt_u txPower = 0.0;
         if (i < maskBand.first || i > maskBand.second) // outside the spectrum mask
         {
-            txPowerW = 0.0;
+            txPower = 0.0;
         }
-        else if (i <= outerBandLeft.second &&
-                 i >= outerBandLeft.first) // better to put greater first (less computation)
+        else if (betweenPsdsBand.has_value() &&
+                 (i <= betweenPsdsBand->second && i >= betweenPsdsBand->first))
         {
-            txPowerW = DbmToW(txPowerOuterBandMinDbm + ((i - outerBandLeft.first) * outerSlope));
+            // value for PSD mask 1
+            std::vector<double> txPowerWPsds(2);
+            if (i <= middleBandsRight.at(0).second && i >= middleBandsRight.at(0).first)
+            {
+                txPowerWPsds.at(0) =
+                    DbmToW(txPowerInnerBandMin -
+                           ((i - middleBandsRight.at(0).first + 1) *
+                            middleSlope)); // +1 so as to be symmetric with left slope
+            }
+            else if (i <= outerBandsRight.at(0).second && i >= outerBandsRight.at(0).first)
+            {
+                txPowerWPsds.at(0) =
+                    DbmToW(txPowerMiddleBandMin -
+                           ((i - outerBandsRight.at(0).first + 1) *
+                            outerSlope)); // +1 so as to be symmetric with left slope
+            }
+            else if (i > outerBandsRight.at(0).second)
+            {
+                txPower = DbmToW(txPowerOuterBandMin);
+            }
+            else
+            {
+                NS_ASSERT(false);
+            }
+
+            // value for PSD mask 2
+            if (i < outerBandsLeft.at(1).first)
+            {
+                txPower = DbmToW(txPowerOuterBandMin);
+            }
+            else if (i <= outerBandsLeft.at(1).second && i >= outerBandsLeft.at(1).first)
+            {
+                txPowerWPsds.at(1) =
+                    DbmToW(txPowerOuterBandMin + ((i - outerBandsLeft.at(1).first) * outerSlope));
+            }
+            else if (i <= middleBandsLeft.at(1).second && i >= middleBandsLeft.at(1).first)
+            {
+                txPowerWPsds.at(1) = DbmToW(txPowerMiddleBandMin +
+                                            ((i - middleBandsLeft.at(1).first) * middleSlope));
+            }
+            else
+            {
+                NS_ASSERT(false);
+            }
+
+            txPower = std::accumulate(txPowerWPsds.cbegin(), txPowerWPsds.cend(), 0.0);
+            txPower = std::max(DbmToW(txPowerRef - 25.0), txPower);
+            txPower = std::min(DbmToW(txPowerRef - 20.0), txPower);
+        }
+        else if (i <= outerBandsLeft.at(psdIndex).second &&
+                 i >= outerBandsLeft.at(psdIndex)
+                          .first) // better to put greater first (less computation)
+        {
+            txPower = DbmToW(txPowerOuterBandMin +
+                             ((i - outerBandsLeft.at(psdIndex).first) * outerSlope));
         }
-        else if (i <= middleBandLeft.second && i >= middleBandLeft.first)
+        else if (i <= middleBandsLeft.at(psdIndex).second &&
+                 i >= middleBandsLeft.at(psdIndex).first)
         {
-            txPowerW = DbmToW(txPowerMiddleBandMinDbm + ((i - middleBandLeft.first) * middleSlope));
+            txPower = DbmToW(txPowerMiddleBandMin +
+                             ((i - middleBandsLeft.at(psdIndex).first) * middleSlope));
         }
-        else if ((i <= flatJunctionLeft.second && i >= flatJunctionLeft.first) ||
-                 (i <= flatJunctionRight.second && i >= flatJunctionRight.first))
+        else if ((i <= flatJunctionsLeft.at(psdIndex).second &&
+                  i >= flatJunctionsLeft.at(psdIndex).first) ||
+                 (i <= flatJunctionsRight.at(psdIndex).second &&
+                  i >= flatJunctionsRight.at(psdIndex).first))
         {
-            txPowerW = DbmToW(txPowerInnerBandMinDbm);
+            txPower = DbmToW(txPowerInnerBandMin);
         }
-        else if (i <= innerBandLeft.second && i >= innerBandLeft.first)
+        else if (i <= innerBandsLeft.at(psdIndex).second && i >= innerBandsLeft.at(psdIndex).first)
         {
-            txPowerW =
-                (!puncturedBands.empty() &&
-                 (puncturedBands.front().first <= allocatedSubBands.front().first))
-                    ? DbmToW(txPowerInnerBandMinDbm)
-                    : // first 20 MHz band is punctured
-                    DbmToW(txPowerInnerBandMinDbm + ((i - innerBandLeft.first) * innerSlope));
+            txPower = (!puncturedBandsPerSegment.empty() &&
+                       !puncturedBandsPerSegment.at(psdIndex).empty() &&
+                       (puncturedBandsPerSegment.at(psdIndex).front().first <=
+                        allocatedSubBandsPerSegment.at(psdIndex).front().first))
+                          ? DbmToW(txPowerInnerBandMin)
+                          : // first 20 MHz band is punctured
+                          DbmToW(txPowerInnerBandMin +
+                                 ((i - innerBandsLeft.at(psdIndex).first) * innerSlope));
         }
-        else if (i <= allocatedSubBands.back().second &&
-                 i >= allocatedSubBands.front().first) // roughly in allocated band
+        else if ((i <= allocatedSubBandsPerSegment.at(psdIndex).back().second &&
+                  i >= allocatedSubBandsPerSegment.at(psdIndex).front().first)) // roughly in
+                                                                                // allocated band
         {
             bool insideSubBand = false;
             for (uint32_t j = 0; !insideSubBand && j < numSubBands;
                  j++) // continue until inside a sub-band
             {
-                insideSubBand =
-                    (i <= allocatedSubBands[j].second) && (i >= allocatedSubBands[j].first);
+                insideSubBand = (i <= allocatedSubBandsPerSegment.at(psdIndex)[j].second) &&
+                                (i >= allocatedSubBandsPerSegment.at(psdIndex)[j].first);
             }
             if (insideSubBand)
             {
                 bool insidePuncturedSubBand = false;
-                uint32_t j = 0;
-                for (; !insidePuncturedSubBand && j < puncturedBands.size();
+                std::size_t j = 0;
+                std::size_t puncturedBandSize = !puncturedBandsPerSegment.empty()
+                                                    ? puncturedBandsPerSegment.at(psdIndex).size()
+                                                    : 0;
+                for (; !insidePuncturedSubBand && j < puncturedBandSize;
                      j++) // continue until inside a punctured sub-band
                 {
                     insidePuncturedSubBand =
-                        (i <= puncturedBands[j].second) && (i >= puncturedBands[j].first);
+                        (i <= puncturedBandsPerSegment.at(psdIndex).at(j).second) &&
+                        (i >= puncturedBandsPerSegment.at(psdIndex).at(j).first);
                 }
                 if (insidePuncturedSubBand)
                 {
                     uint32_t startPuncturedSlope =
-                        (puncturedBands[puncturedBands.size() - 1].second -
+                        (puncturedBandsPerSegment.at(psdIndex)
+                             .at(puncturedBandsPerSegment.at(psdIndex).size() - 1)
+                             .second -
                          puncturedSlopeWidth); // only consecutive subchannels can be punctured
                     if (i >= startPuncturedSlope)
                     {
-                        txPowerW = DbmToW(txPowerInnerBandMinDbm +
-                                          ((i - startPuncturedSlope) * puncturedSlope));
+                        txPower = DbmToW(txPowerInnerBandMin +
+                                         ((i - startPuncturedSlope) * puncturedSlope));
                     }
                     else
                     {
-                        txPowerW = std::max(DbmToW(txPowerInnerBandMinDbm),
-                                            DbmToW(txPowerRefDbm - ((i - puncturedBands[0].first) *
-                                                                    puncturedSlope)));
+                        txPower = std::max(
+                            DbmToW(txPowerInnerBandMin),
+                            DbmToW(txPowerRef -
+                                   ((i - puncturedBandsPerSegment.at(psdIndex).at(0).first) *
+                                    puncturedSlope)));
                     }
                 }
                 else
                 {
-                    txPowerW = txPowerPerBandW;
+                    txPower = txPowerPerBand;
                 }
             }
             else
             {
-                txPowerW = DbmToW(txPowerInnerBandMinDbm);
+                txPower = DbmToW(txPowerInnerBandMin);
             }
         }
-        else if (i <= innerBandRight.second && i >= innerBandRight.first)
+        else if (i <= innerBandsRight.at(psdIndex).second &&
+                 i >= innerBandsRight.at(psdIndex).first)
         {
             // take min to handle the case where last 20 MHz band is punctured
-            txPowerW = std::min(
-                previousTxPowerW,
-                DbmToW(txPowerRefDbm - ((i - innerBandRight.first + 1) *
-                                        innerSlope))); // +1 so as to be symmetric with left slope
-        }
-        else if (i <= middleBandRight.second && i >= middleBandRight.first)
-        {
-            txPowerW = DbmToW(txPowerInnerBandMinDbm -
-                              ((i - middleBandRight.first + 1) *
-                               middleSlope)); // +1 so as to be symmetric with left slope
-        }
-        else if (i <= outerBandRight.second && i >= outerBandRight.first)
-        {
-            txPowerW = DbmToW(txPowerMiddleBandMinDbm -
-                              ((i - outerBandRight.first + 1) *
-                               outerSlope)); // +1 so as to be symmetric with left slope
+            txPower = std::min(
+                previousTxPower,
+                DbmToW(txPowerRef - ((i - innerBandsRight.at(psdIndex).first + 1) *
+                                     innerSlope))); // +1 so as to be symmetric with left slope
+        }
+        else if (i <= middleBandsRight.at(psdIndex).second &&
+                 i >= middleBandsRight.at(psdIndex).first)
+        {
+            txPower = DbmToW(txPowerInnerBandMin -
+                             ((i - middleBandsRight.at(psdIndex).first + 1) *
+                              middleSlope)); // +1 so as to be symmetric with left slope
+        }
+        else if (i <= outerBandsRight.at(psdIndex).second &&
+                 i >= outerBandsRight.at(psdIndex).first)
+        {
+            txPower = DbmToW(txPowerMiddleBandMin -
+                             ((i - outerBandsRight.at(psdIndex).first + 1) *
+                              outerSlope)); // +1 so as to be symmetric with left slope
         }
         else
         {
             NS_FATAL_ERROR("Should have handled all cases");
         }
-        double txPowerDbr = 10 * std::log10(txPowerW / txPowerPerBandW);
-        NS_LOG_LOGIC(uint32_t(i) << " -> " << txPowerDbr);
-        *vit = txPowerW / (bit->fh - bit->fl);
-        previousTxPowerW = txPowerW;
+        NS_LOG_LOGIC(i << " -> " << (10 * std::log10(txPower / txPowerPerBand)));
+        previousTxPower = txPower;
+        txPowerValues.at(i) = txPower;
+    }
+
+    // fill in spectrum mask
+    auto vit = c->ValuesBegin();
+    auto bit = c->ConstBandsBegin();
+    const auto invBandwidth = 1 / (bit->fh - bit->fl);
+    for (auto txPowerValue : txPowerValues)
+    {
+        *vit = txPowerValue * invBandwidth;
+        vit++;
+        bit++;
+    }
+
+    for (const auto& allocatedSubBands : allocatedSubBandsPerSegment)
+    {
+        NS_LOG_INFO("Added signal power to subbands " << allocatedSubBands.front().first << "-"
+                                                      << allocatedSubBands.back().second);
     }
-    NS_LOG_INFO("Added signal power to subbands " << allocatedSubBands.front().first << "-"
-                                                  << allocatedSubBands.back().second);
 }
 
 void
-WifiSpectrumValueHelper::NormalizeSpectrumMask(Ptr<SpectrumValue> c, double txPowerW)
+WifiSpectrumValueHelper::NormalizeSpectrumMask(Ptr<SpectrumValue> c, Watt_u txPower)
 {
-    NS_LOG_FUNCTION(c << txPowerW);
+    NS_LOG_FUNCTION(c << txPower);
     // Normalize power so that total signal power equals transmit power
-    double currentTxPowerW = Integral(*c);
-    double normalizationRatio = currentTxPowerW / txPowerW;
-    NS_LOG_LOGIC("Current power: " << currentTxPowerW << "W vs expected power: " << txPowerW << "W"
+    Watt_u currentTxPower = Integral(*c);
+    double normalizationRatio [[maybe_unused]] = currentTxPower / txPower;
+    double invNormalizationRatio = txPower / currentTxPower;
+    NS_LOG_LOGIC("Current power: " << currentTxPower << "W vs expected power: " << txPower << "W"
                                    << " -> ratio (C/E) = " << normalizationRatio);
     auto vit = c->ValuesBegin();
     for (size_t i = 0; i < c->GetSpectrumModel()->GetNumBands(); i++, vit++)
     {
-        *vit = (*vit) / normalizationRatio;
+        *vit = (*vit) * invNormalizationRatio;
     }
 }
 
-double
-WifiSpectrumValueHelper::DbmToW(double dBm)
+Watt_u
+WifiSpectrumValueHelper::GetBandPowerW(Ptr<SpectrumValue> psd,
+                                       const std::vector<WifiSpectrumBandIndices>& segments)
 {
-    return std::pow(10.0, 0.1 * (dBm - 30.0));
-}
-
-double
-WifiSpectrumValueHelper::GetBandPowerW(Ptr<SpectrumValue> psd, const WifiSpectrumBandIndices& band)
-{
-    auto valueIt = psd->ConstValuesBegin() + band.first;
-    auto end = psd->ConstValuesBegin() + band.second;
-    auto bandIt = psd->ConstBandsBegin() + band.first; // all bands have same width
+    auto powerWattPerHertz{0.0};
+    auto bandIt = psd->ConstBandsBegin() + segments.front().first; // all bands have same width
     const auto bandWidth = (bandIt->fh - bandIt->fl);
     NS_ASSERT_MSG(bandWidth >= 0.0,
                   "Invalid width for subband [" << bandIt->fl << ";" << bandIt->fh << "]");
-    uint32_t index{0};
-    auto powerWattPerHertz{0.0};
-    while (valueIt <= end)
+    for (const auto& [start, stop] : segments)
     {
-        NS_ASSERT_MSG(*valueIt >= 0.0,
-                      "Invalid power value " << *valueIt << " in subband " << index);
-        powerWattPerHertz += *valueIt;
-        ++valueIt;
-        ++index;
-    }
-    const auto power = powerWattPerHertz * bandWidth;
-    NS_ASSERT_MSG(power >= 0.0,
-                  "Invalid calculated power " << power << " for band [" << band.first << ";"
-                                              << band.second << "]");
+        auto valueIt = psd->ConstValuesBegin() + start;
+        auto end = psd->ConstValuesBegin() + stop;
+        uint32_t index [[maybe_unused]] = 0;
+        while (valueIt <= end)
+        {
+            NS_ASSERT_MSG(*valueIt >= 0.0,
+                          "Invalid power value " << *valueIt << " in subband " << index);
+            powerWattPerHertz += *valueIt;
+            ++valueIt;
+            ++index;
+        }
+    }
+    const Watt_u power = powerWattPerHertz * bandWidth;
+    NS_ASSERT_MSG(power >= 0.0, "Invalid calculated power " << power);
     return power;
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-spectrum-value-helper.h ns-3.43/src/wifi/model/wifi-spectrum-value-helper.h
--- ns-3.42/src/wifi/model/wifi-spectrum-value-helper.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-spectrum-value-helper.h	2024-10-09 16:41:10.132656800 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2009 CTTC
  * Copyright (c) 2017 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Rediet <getachew.redieteab@orange.com>
@@ -22,8 +11,12 @@
 #ifndef WIFI_SPECTRUM_VALUE_HELPER_H
 #define WIFI_SPECTRUM_VALUE_HELPER_H
 
+#include "wifi-units.h"
+
 #include <ns3/spectrum-value.h>
 
+#include <vector>
+
 namespace ns3
 {
 
@@ -53,18 +46,17 @@
      * +/- the guard bands (i.e. the model will span (channelWidth +
      * 2 * guardBandwidth) MHz of bandwidth).
      *
-     * \param centerFrequency center frequency (MHz)
-     * \param channelWidth channel width (MHz)
-     * \param carrierSpacing carrier spacing (Hz)
-     * \param guardBandwidth width of the guard band (MHz)
-     *
+     * \param centerFrequencies center frequency per segment
+     * \param channelWidth total allocated channel width over all segments
+     * \param carrierSpacing carrier spacing
+     * \param guardBandwidth total width of the guard band, which will be split over the segments
      * \return the static SpectrumModel instance corresponding to the
      * given carrier frequency and channel width configuration.
      */
-    static Ptr<SpectrumModel> GetSpectrumModel(uint32_t centerFrequency,
-                                               uint16_t channelWidth,
-                                               uint32_t carrierSpacing,
-                                               uint16_t guardBandwidth);
+    static Ptr<SpectrumModel> GetSpectrumModel(const std::vector<MHz_u>& centerFrequencies,
+                                               MHz_u channelWidth,
+                                               Hz_u carrierSpacing,
+                                               MHz_u guardBandwidth);
 
     /**
      * Create a transmit power spectral density corresponding to DSSS
@@ -74,164 +66,159 @@
      *
      * \note There is no channel width parameter; this method assumes 22 MHz
      *
-     * \param centerFrequency center frequency (MHz)
-     * \param txPowerW  transmit power (W) to allocate
-     * \param guardBandwidth width of the guard band (MHz)
+     * \param centerFrequency center frequency
+     * \param txPower transmit power to allocate
+     * \param guardBandwidth width of the guard band
      * \returns a pointer to a newly allocated SpectrumValue representing the DSSS Transmit Power
      * Spectral Density in W/Hz
      */
-    static Ptr<SpectrumValue> CreateDsssTxPowerSpectralDensity(uint32_t centerFrequency,
-                                                               double txPowerW,
-                                                               uint16_t guardBandwidth);
+    static Ptr<SpectrumValue> CreateDsssTxPowerSpectralDensity(MHz_u centerFrequency,
+                                                               Watt_u txPower,
+                                                               MHz_u guardBandwidth);
 
     /**
      * Create a transmit power spectral density corresponding to OFDM
      * (802.11a/g).  Channel width may vary between 20, 10, and 5 MHz.
      * Guard bandwidth also typically varies with channel width.
      *
-     * \param centerFrequency center frequency (MHz)
-     * \param channelWidth channel width (MHz)
-     * \param txPowerW  transmit power (W) to allocate
-     * \param guardBandwidth width of the guard band (MHz)
-     * \param minInnerBandDbr the minimum relative power in the inner band (in dBr)
-     * \param minOuterbandDbr the minimum relative power in the outer band (in dBr)
-     * \param lowestPointDbr maximum relative power of the outermost subcarriers of the guard band
-     * (in dBr)
+     * \param centerFrequency center frequency
+     * \param channelWidth channel width
+     * \param txPower transmit power to allocate
+     * \param guardBandwidth width of the guard band
+     * \param minInnerBand the minimum relative power in the inner band
+     * \param minOuterband the minimum relative power in the outer band
+     * \param lowestPoint maximum relative power of the outermost subcarriers of the guard band
      * \return a pointer to a newly allocated SpectrumValue representing the OFDM Transmit Power
      * Spectral Density in W/Hz for each Band
      */
-    static Ptr<SpectrumValue> CreateOfdmTxPowerSpectralDensity(uint32_t centerFrequency,
-                                                               uint16_t channelWidth,
-                                                               double txPowerW,
-                                                               uint16_t guardBandwidth,
-                                                               double minInnerBandDbr = -20,
-                                                               double minOuterbandDbr = -28,
-                                                               double lowestPointDbr = -40);
+    static Ptr<SpectrumValue> CreateOfdmTxPowerSpectralDensity(MHz_u centerFrequency,
+                                                               MHz_u channelWidth,
+                                                               Watt_u txPower,
+                                                               MHz_u guardBandwidth,
+                                                               dBr_u minInnerBand = -20,
+                                                               dBr_u minOuterband = -28,
+                                                               dBr_u lowestPoint = -40);
 
     /**
      * Create a transmit power spectral density corresponding to OFDM duplicated over multiple 20
      * MHz subchannels. Channel width may vary between 20, 40, 80, and 160 MHz.
      *
-     * \param centerFrequency center frequency (MHz)
-     * \param channelWidth channel width (MHz)
-     * \param txPowerW  transmit power (W) to allocate
-     * \param guardBandwidth width of the guard band (MHz)
-     * \param minInnerBandDbr the minimum relative power in the inner band (in dBr)
-     * \param minOuterbandDbr the minimum relative power in the outer band (in dBr)
-     * \param lowestPointDbr maximum relative power of the outermost subcarriers of the guard band
-     * (in dBr)
+     * \param centerFrequencies center frequency per segment
+     * \param channelWidth total allocated channel width over all segments
+     * \param txPower transmit power to allocate
+     * \param guardBandwidth width of the guard band
+     * \param minInnerBand the minimum relative power in the inner band
+     * \param minOuterband the minimum relative power in the outer band
+     * \param lowestPoint maximum relative power of the outermost subcarriers of the guard band
      * \param puncturedSubchannels bitmap indicating whether a 20 MHz subchannel is punctured or not
      * \return a pointer to a newly allocated SpectrumValue representing the duplicated 20 MHz OFDM
      * Transmit Power Spectral Density in W/Hz for each Band
      */
     static Ptr<SpectrumValue> CreateDuplicated20MhzTxPowerSpectralDensity(
-        uint32_t centerFrequency,
-        uint16_t channelWidth,
-        double txPowerW,
-        uint16_t guardBandwidth,
-        double minInnerBandDbr = -20,
-        double minOuterbandDbr = -28,
-        double lowestPointDbr = -40,
-        const std::vector<bool>& puncturedSubchannels = std::vector<bool>{});
+        const std::vector<MHz_u>& centerFrequencies,
+        MHz_u channelWidth,
+        Watt_u txPower,
+        MHz_u guardBandwidth,
+        dBr_u minInnerBand = -20,
+        dBr_u minOuterband = -28,
+        dBr_u lowestPoint = -40,
+        const std::vector<bool>& puncturedSubchannels = {});
 
     /**
      * Create a transmit power spectral density corresponding to OFDM
      * High Throughput (HT) (802.11n/ac).  Channel width may vary between
      * 20, 40, 80, and 160 MHz.
      *
-     * \param centerFrequency center frequency (MHz)
-     * \param channelWidth channel width (MHz)
-     * \param txPowerW  transmit power (W) to allocate
-     * \param guardBandwidth width of the guard band (MHz)
-     * \param minInnerBandDbr the minimum relative power in the inner band (in dBr)
-     * \param minOuterbandDbr the minimum relative power in the outer band (in dBr)
-     * \param lowestPointDbr maximum relative power of the outermost subcarriers of the guard band
-     * (in dBr)
+     * \param centerFrequencies center frequency per segment
+     * \param channelWidth total allocated channel width over all segments
+     * \param txPower transmit power to allocate
+     * \param guardBandwidth width of the guard band
+     * \param minInnerBand the minimum relative power in the inner band
+     * \param minOuterband the minimum relative power in the outer band
+     * \param lowestPoint maximum relative power of the outermost subcarriers of the guard band
      * \return a pointer to a newly allocated SpectrumValue representing the HT OFDM Transmit Power
      * Spectral Density in W/Hz for each Band
      */
-    static Ptr<SpectrumValue> CreateHtOfdmTxPowerSpectralDensity(uint32_t centerFrequency,
-                                                                 uint16_t channelWidth,
-                                                                 double txPowerW,
-                                                                 uint16_t guardBandwidth,
-                                                                 double minInnerBandDbr = -20,
-                                                                 double minOuterbandDbr = -28,
-                                                                 double lowestPointDbr = -40);
+    static Ptr<SpectrumValue> CreateHtOfdmTxPowerSpectralDensity(
+        const std::vector<MHz_u>& centerFrequencies,
+        MHz_u channelWidth,
+        Watt_u txPower,
+        MHz_u guardBandwidth,
+        dBr_u minInnerBand = -20,
+        dBr_u minOuterband = -28,
+        dBr_u lowestPoint = -40);
 
     /**
      * Create a transmit power spectral density corresponding to OFDM
-     * High Efficiency (HE) (802.11ax).  Channel width may vary between
-     * 20, 40, 80, and 160 MHz.
+     * High Efficiency (HE) (802.11ax) for contiguous channels.
+     * Channel width may vary between 20, 40, 80, and 160 MHz.
      *
-     * \param centerFrequency center frequency (MHz)
-     * \param channelWidth channel width (MHz)
-     * \param txPowerW  transmit power (W) to allocate
-     * \param guardBandwidth width of the guard band (MHz)
-     * \param minInnerBandDbr the minimum relative power in the inner band (in dBr)
-     * \param minOuterbandDbr the minimum relative power in the outer band (in dBr)
-     * \param lowestPointDbr maximum relative power of the outermost subcarriers of the guard band
-     * (in dBr)
+     * \param centerFrequency center frequency
+     * \param channelWidth channel width
+     * \param txPower transmit power to allocate
+     * \param guardBandwidth width of the guard band
+     * \param minInnerBand the minimum relative power in the inner band
+     * \param minOuterband the minimum relative power in the outer band
+     * \param lowestPoint maximum relative power of the outermost subcarriers of the guard band
      * \param puncturedSubchannels bitmap indicating whether a 20 MHz subchannel is punctured or not
      * \return a pointer to a newly allocated SpectrumValue representing the HE OFDM Transmit Power
      * Spectral Density in W/Hz for each Band
      */
     static Ptr<SpectrumValue> CreateHeOfdmTxPowerSpectralDensity(
-        uint32_t centerFrequency,
-        uint16_t channelWidth,
-        double txPowerW,
-        uint16_t guardBandwidth,
-        double minInnerBandDbr = -20,
-        double minOuterbandDbr = -28,
-        double lowestPointDbr = -40,
-        const std::vector<bool>& puncturedSubchannels = std::vector<bool>{});
+        MHz_u centerFrequency,
+        MHz_u channelWidth,
+        Watt_u txPower,
+        MHz_u guardBandwidth,
+        dBr_u minInnerBand = -20,
+        dBr_u minOuterband = -28,
+        dBr_u lowestPoint = -40,
+        const std::vector<bool>& puncturedSubchannels = {});
+
+    /**
+     * Create a transmit power spectral density corresponding to OFDM
+     * High Efficiency (HE) (802.11ax) made of one or more frequency segment(s).
+     * Channel width may vary between 20, 40, 80, and 160 MHz.
+     *
+     * \param centerFrequencies center frequency per segment
+     * \param channelWidth total allocated channel width over all segments
+     * \param txPower transmit power to allocate
+     * \param guardBandwidth width of the guard band
+     * \param minInnerBand the minimum relative power in the inner band
+     * \param minOuterband the minimum relative power in the outer band
+     * \param lowestPoint maximum relative power of the outermost subcarriers of the guard band
+     * \param puncturedSubchannels bitmap indicating whether a 20 MHz subchannel is punctured or not
+     * \return a pointer to a newly allocated SpectrumValue representing the HE OFDM Transmit Power
+     * Spectral Density in W/Hz for each Band
+     */
+    static Ptr<SpectrumValue> CreateHeOfdmTxPowerSpectralDensity(
+        const std::vector<MHz_u>& centerFrequencies,
+        MHz_u channelWidth,
+        Watt_u txPower,
+        MHz_u guardBandwidth,
+        dBr_u minInnerBand = -20,
+        dBr_u minOuterband = -28,
+        dBr_u lowestPoint = -40,
+        const std::vector<bool>& puncturedSubchannels = {});
 
     /**
      * Create a transmit power spectral density corresponding to the OFDMA part
      * of HE TB PPDUs for a given RU.
      * An ideal (i.e. rectangular) spectral mask is considered for the time being.
      *
-     * \param centerFrequency center frequency (MHz)
-     * \param channelWidth channel width (MHz)
-     * \param txPowerW  transmit power (W) to allocate
-     * \param guardBandwidth width of the guard band (MHz)
+     * \param centerFrequencies center frequency per segment
+     * \param channelWidth total allocated channel width over all segments
+     * \param txPower transmit power to allocate
+     * \param guardBandwidth width of the guard band
      * \param ru the RU band used by the STA
      * \return a pointer to a newly allocated SpectrumValue representing the HE OFDM Transmit Power
      * Spectral Density on the RU used by the STA in W/Hz for each Band
      */
     static Ptr<SpectrumValue> CreateHeMuOfdmTxPowerSpectralDensity(
-        uint32_t centerFrequency,
-        uint16_t channelWidth,
-        double txPowerW,
-        uint16_t guardBandwidth,
-        const WifiSpectrumBandIndices& ru);
-
-    /**
-     * Create a power spectral density corresponding to the noise
-     *
-     * \param centerFrequency center frequency (MHz)
-     * \param channelWidth channel width (MHz)
-     * \param carrierSpacing carrier spacing (Hz)
-     * \param noiseFigure the noise figure in dB w.r.t. a reference temperature of 290K
-     * \param guardBandwidth width of the guard band (MHz)
-     * \return a pointer to a newly allocated SpectrumValue representing the noise Power Spectral
-     * Density in W/Hz for each Band
-     */
-    static Ptr<SpectrumValue> CreateNoisePowerSpectralDensity(uint32_t centerFrequency,
-                                                              uint16_t channelWidth,
-                                                              uint32_t carrierSpacing,
-                                                              double noiseFigure,
-                                                              uint16_t guardBandwidth);
-
-    /**
-     * Create a thermal noise power spectral density
-     *
-     * \param noiseFigure the noise figure
-     * \param spectrumModel the spectrum model
-     * \return a pointer to a newly allocated SpectrumValue representing the noise Power Spectral
-     * Density in W/Hz corresponding to thermal noise, for each Band
-     */
-    static Ptr<SpectrumValue> CreateNoisePowerSpectralDensity(double noiseFigure,
-                                                              Ptr<SpectrumModel> spectrumModel);
+        const std::vector<MHz_u>& centerFrequencies,
+        MHz_u channelWidth,
+        Watt_u txPower,
+        MHz_u guardBandwidth,
+        const std::vector<WifiSpectrumBandIndices>& ru);
 
     /**
      * Create a transmit power spectral density corresponding to OFDM
@@ -262,36 +249,34 @@
      *
      * \param c spectrumValue to allocate according to transmit power spectral density mask (in W/Hz
      * for each band)
-     * \param allocatedSubBands vector of start and stop subcarrier indexes of the allocated sub
-     * bands
+     * \param allocatedSubBandsPerSegment vector of start and stop subcarrier indexes of the
+     * allocated sub bands, for each segment
      * \param maskBand start and stop subcarrier indexes of transmit mask (in case signal doesn't
      * cover whole SpectrumModel)
-     * \param txPowerPerBandW power allocated to each subcarrier in the allocated sub bands
+     * \param txPowerPerBand power allocated to each subcarrier in the allocated sub bands
      * \param nGuardBands size (in number of subcarriers) of the guard band (left and right)
      * \param innerSlopeWidth size (in number of subcarriers) of the inner band (i.e. slope going
      * from 0 dBr to -20 dBr in the figure above)
-     * \param minInnerBandDbr the minimum relative power in the inner band (i.e., -20 dBr in the
+     * \param minInnerBand the minimum relative power in the inner band (i.e., -20 dBr in the
      * figure above)
-     * \param minOuterbandDbr the minimum relative power in the outer band (i.e., -28 dBr in the
+     * \param minOuterband the minimum relative power in the outer band (i.e., -28 dBr in the
      * figure above)
-     * \param lowestPointDbr maximum relative power of the outermost subcarriers of the guard band
-     * (in dBr)
+     * \param lowestPoint maximum relative power of the outermost subcarriers of the guard band
      * \param puncturedSubBands vector of start and stop subcarrier indexes of the punctured sub
-     * bands
+     * bands, for each segment
      * \param puncturedSlopeWidth size (in number of subcarriers) of the punctured band slope
      */
     static void CreateSpectrumMaskForOfdm(
         Ptr<SpectrumValue> c,
-        const std::vector<WifiSpectrumBandIndices>& allocatedSubBands,
+        const std::vector<std::vector<WifiSpectrumBandIndices>>& allocatedSubBandsPerSegment,
         const WifiSpectrumBandIndices& maskBand,
-        double txPowerPerBandW,
+        Watt_u txPowerPerBand,
         uint32_t nGuardBands,
         uint32_t innerSlopeWidth,
-        double minInnerBandDbr,
-        double minOuterbandDbr,
-        double lowestPointDbr,
-        const std::vector<WifiSpectrumBandIndices>& puncturedSubBands =
-            std::vector<WifiSpectrumBandIndices>{},
+        dBr_u minInnerBand,
+        dBr_u minOuterband,
+        dBr_u lowestPoint,
+        const std::vector<std::vector<WifiSpectrumBandIndices>>& puncturedSubBands = {},
         uint32_t puncturedSlopeWidth = 0);
 
     /**
@@ -299,40 +284,31 @@
      * so that the total transmitted power corresponds to the input value.
      *
      * \param c spectrumValue to normalize (in W/Hz for each band)
-     * \param txPowerW total transmit power (W) to allocate
-     */
-    static void NormalizeSpectrumMask(Ptr<SpectrumValue> c, double txPowerW);
-
-    /**
-     * Convert from dBm to Watts.
-     * Taken from wifi-utils since the original method couldn't be called from here
-     * due to resulting circular dependencies of spectrum and wifi modules.
-     *
-     * \param dbm the power in dBm
-     *
-     * \return the equivalent Watts for the given dBm
+     * \param txPower total transmit power to allocate
      */
-    static double DbmToW(double dbm);
+    static void NormalizeSpectrumMask(Ptr<SpectrumValue> c, Watt_u txPower);
 
     /**
      * Calculate the power of the specified band composed of uniformly-sized sub-bands.
      *
      * \param psd received Power Spectral Density in W/Hz
-     * \param band a pair of start and stop indexes that defines the band
+     * \param segments a vector of pair of start and stop indexes that defines each segment of the
+     * band
      *
-     * \return band power in W
+     * \return band power
      */
-    static double GetBandPowerW(Ptr<SpectrumValue> psd, const WifiSpectrumBandIndices& band);
+    static Watt_u GetBandPowerW(Ptr<SpectrumValue> psd,
+                                const std::vector<WifiSpectrumBandIndices>& segments);
 };
 
 /**
  * \ingroup spectrum
- * Struct defining a frequency range between minFrequency (MHz) and maxFrequency (MHz).
+ * Struct defining a frequency range between minFrequency and maxFrequency.
  */
 struct FrequencyRange
 {
-    uint16_t minFrequency{0}; ///< the minimum frequency in MHz
-    uint16_t maxFrequency{0}; ///< the maximum frequency in MHz
+    MHz_u minFrequency{0}; ///< the minimum frequency
+    MHz_u maxFrequency{0}; ///< the maximum frequency
 };
 
 /**
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-standards.cc ns-3.43/src/wifi/model/wifi-standards.cc
--- ns-3.42/src/wifi/model/wifi-standards.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-standards.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-standards.h ns-3.43/src/wifi/model/wifi-standards.h
--- ns-3.42/src/wifi/model/wifi-standards.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-standards.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -21,6 +10,8 @@
 #define WIFI_STANDARD_H
 
 #include "wifi-phy-band.h"
+#include "wifi-types.h"
+#include "wifi-units.h"
 
 #include "ns3/abort.h"
 
@@ -90,17 +81,6 @@
 extern const std::map<WifiStandard, std::list<WifiPhyBand>> wifiStandards;
 
 /**
- * \ingroup wifi
- * \brief Enumeration of frequency channel types
- */
-enum FrequencyChannelType : uint8_t
-{
-    WIFI_PHY_DSSS_CHANNEL = 0,
-    WIFI_PHY_OFDM_CHANNEL,
-    WIFI_PHY_80211p_CHANNEL
-};
-
-/**
  * Get the type of the frequency channel for the given standard
  *
  * \param standard the standard
@@ -112,11 +92,11 @@
     switch (standard)
     {
     case WIFI_STANDARD_80211b:
-        return WIFI_PHY_DSSS_CHANNEL;
+        return FrequencyChannelType::DSSS;
     case WIFI_STANDARD_80211p:
-        return WIFI_PHY_80211p_CHANNEL;
+        return FrequencyChannelType::CH_80211P;
     default:
-        return WIFI_PHY_OFDM_CHANNEL;
+        return FrequencyChannelType::OFDM;
     }
 }
 
@@ -125,9 +105,9 @@
  *
  * \param standard the given standard
  * \param band the given PHY band
- * \return the default channel width (MHz) for the given standard
+ * \return the default channel width for the given standard
  */
-inline uint16_t
+inline MHz_u
 GetDefaultChannelWidth(WifiStandard standard, WifiPhyBand band)
 {
     switch (standard)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-tx-current-model.cc ns-3.43/src/wifi/model/wifi-tx-current-model.cc
--- ns-3.42/src/wifi/model/wifi-tx-current-model.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-tx-current-model.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' degli Studi di Napoli "Federico II"
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stefano.avallone@unina.it>
  */
@@ -65,12 +54,12 @@
                           "The supply voltage (in Volts).",
                           DoubleValue(3.0),
                           MakeDoubleAccessor(&LinearWifiTxCurrentModel::m_voltage),
-                          MakeDoubleChecker<double>())
+                          MakeDoubleChecker<volt_u>())
             .AddAttribute("IdleCurrent",
                           "The current in the IDLE state (in Ampere).",
                           DoubleValue(0.273333),
                           MakeDoubleAccessor(&LinearWifiTxCurrentModel::m_idleCurrent),
-                          MakeDoubleChecker<double>());
+                          MakeDoubleChecker<ampere_u>());
     return tid;
 }
 
@@ -84,11 +73,11 @@
     NS_LOG_FUNCTION(this);
 }
 
-double
-LinearWifiTxCurrentModel::CalcTxCurrent(double txPowerDbm) const
+ampere_u
+LinearWifiTxCurrentModel::CalcTxCurrent(dBm_u txPower) const
 {
-    NS_LOG_FUNCTION(this << txPowerDbm);
-    return DbmToW(txPowerDbm) / (m_voltage * m_eta) + m_idleCurrent;
+    NS_LOG_FUNCTION(this << txPower);
+    return DbmToW(txPower) / (m_voltage * m_eta) + m_idleCurrent;
 }
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-tx-current-model.h ns-3.43/src/wifi/model/wifi-tx-current-model.h
--- ns-3.42/src/wifi/model/wifi-tx-current-model.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-tx-current-model.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universita' degli Studi di Napoli "Federico II"
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stefano.avallone@unina.it>
  */
@@ -20,6 +9,8 @@
 #ifndef WIFI_TX_CURRENT_MODEL_H
 #define WIFI_TX_CURRENT_MODEL_H
 
+#include "wifi-units.h"
+
 #include "ns3/object.h"
 
 namespace ns3
@@ -44,10 +35,10 @@
     ~WifiTxCurrentModel() override;
 
     /**
-     * \param txPowerDbm the nominal TX power in dBm
-     * \returns the transmit current (in Ampere)
+     * \param txPower the nominal TX power
+     * \returns the transmit current
      */
-    virtual double CalcTxCurrent(double txPowerDbm) const = 0;
+    virtual ampere_u CalcTxCurrent(dBm_u txPower) const = 0;
 };
 
 /**
@@ -93,12 +84,12 @@
     LinearWifiTxCurrentModel();
     ~LinearWifiTxCurrentModel() override;
 
-    double CalcTxCurrent(double txPowerDbm) const override;
+    ampere_u CalcTxCurrent(dBm_u txPower) const override;
 
   private:
-    double m_eta;         ///< ETA
-    double m_voltage;     ///< voltage in Volts
-    double m_idleCurrent; ///< idle current in Amperes
+    double m_eta;           ///< ETA
+    volt_u m_voltage;       ///< voltage
+    ampere_u m_idleCurrent; ///< idle current
 };
 
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-tx-parameters.cc ns-3.43/src/wifi/model/wifi-tx-parameters.cc
--- ns-3.42/src/wifi/model/wifi-tx-parameters.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-tx-parameters.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-tx-parameters.h ns-3.43/src/wifi/model/wifi-tx-parameters.h
--- ns-3.42/src/wifi/model/wifi-tx-parameters.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-tx-parameters.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-tx-timer.cc ns-3.43/src/wifi/model/wifi-tx-timer.cc
--- ns-3.42/src/wifi/model/wifi-tx-timer.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-tx-timer.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-tx-timer.h ns-3.43/src/wifi/model/wifi-tx-timer.h
--- ns-3.42/src/wifi/model/wifi-tx-timer.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-tx-timer.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-tx-vector.cc ns-3.43/src/wifi/model/wifi-tx-vector.cc
--- ns-3.42/src/wifi/model/wifi-tx-vector.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-tx-vector.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Ghada Badawy <gbadawy@gmail.com>
@@ -37,7 +26,7 @@
     : m_txPowerLevel(1),
       m_preamble(WIFI_PREAMBLE_LONG),
       m_channelWidth(20),
-      m_guardInterval(800),
+      m_guardInterval(NanoSeconds(800)),
       m_nTx(1),
       m_nss(1),
       m_ness(0),
@@ -58,11 +47,11 @@
 WifiTxVector::WifiTxVector(WifiMode mode,
                            uint8_t powerLevel,
                            WifiPreamble preamble,
-                           uint16_t guardInterval,
+                           Time guardInterval,
                            uint8_t nTx,
                            uint8_t nss,
                            uint8_t ness,
-                           uint16_t channelWidth,
+                           MHz_u channelWidth,
                            bool aggregation,
                            bool stbc,
                            bool ldpc,
@@ -181,13 +170,13 @@
     return m_preamble;
 }
 
-uint16_t
+MHz_u
 WifiTxVector::GetChannelWidth() const
 {
     return m_channelWidth;
 }
 
-uint16_t
+Time
 WifiTxVector::GetGuardInterval() const
 {
     return m_guardInterval;
@@ -309,13 +298,13 @@
 }
 
 void
-WifiTxVector::SetChannelWidth(uint16_t channelWidth)
+WifiTxVector::SetChannelWidth(MHz_u channelWidth)
 {
     m_channelWidth = channelWidth;
 }
 
 void
-WifiTxVector::SetGuardInterval(uint16_t guardInterval)
+WifiTxVector::SetGuardInterval(Time guardInterval)
 {
     m_guardInterval = guardInterval;
 }
@@ -452,7 +441,7 @@
     {
         return false;
     }
-    std::string modeName = m_mode.GetUniqueName();
+    const auto& modeName = m_mode.GetUniqueName();
     if (m_channelWidth == 20)
     {
         if (m_nss != 3 && m_nss != 6)
@@ -670,8 +659,9 @@
     NS_ABORT_MSG_IF(
         m_channelWidth < 80,
         "Preamble puncturing only possible for transmission bandwidth of 80 MHz or larger");
+    [[maybe_unused]] const std::size_t num20MhzSubchannels = m_channelWidth / 20;
     NS_ABORT_MSG_IF(!inactiveSubchannels.empty() &&
-                        inactiveSubchannels.size() != (m_channelWidth / 20),
+                        inactiveSubchannels.size() != num20MhzSubchannels,
                     "The size of the inactive subchannnels bitmap should be equal to the number of "
                     "20 MHz subchannels");
     m_inactiveSubchannels = inactiveSubchannels;
@@ -828,7 +818,8 @@
         const auto index =
             (ruBw < 20) ? ((ruIndex - 1) / rusPerSubchannel.size()) : ((ruIndex - 1) * (ruBw / 20));
         const auto numSubchannelsForRu = (ruBw < 20) ? 1 : (ruBw / 20);
-        NS_ABORT_IF(index >= (m_channelWidth / 20));
+        [[maybe_unused]] const std::size_t num20MhzSubchannels = m_channelWidth / 20;
+        NS_ABORT_IF(index >= num20MhzSubchannels);
         auto ruAlloc = HeRu::GetEqualizedRuAllocation(ruType, false);
         if (ruAllocations.at(index) != HeRu::EMPTY_242_TONE_RU)
         {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-tx-vector.h ns-3.43/src/wifi/model/wifi-tx-vector.h
--- ns-3.42/src/wifi/model/wifi-tx-vector.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-tx-vector.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Ghada Badawy <gbadawy@gmail.com>
@@ -26,6 +15,7 @@
 #include "wifi-phy-common.h"
 
 #include "ns3/he-ru.h"
+#include "ns3/nstime.h"
 
 #include <list>
 #include <optional>
@@ -125,7 +115,7 @@
      * \param nTx the number of TX antennas
      * \param nss the number of spatial STBC streams (NSS)
      * \param ness the number of extension spatial streams (NESS)
-     * \param channelWidth the channel width in MHz
+     * \param channelWidth the channel width
      * \param aggregation enable or disable MPDU aggregation
      * \param stbc enable or disable STBC
      * \param ldpc enable or disable LDPC (BCC is used otherwise)
@@ -136,11 +126,11 @@
     WifiTxVector(WifiMode mode,
                  uint8_t powerLevel,
                  WifiPreamble preamble,
-                 uint16_t guardInterval,
+                 Time guardInterval,
                  uint8_t nTx,
                  uint8_t nss,
                  uint8_t ness,
-                 uint16_t channelWidth,
+                 MHz_u channelWidth,
                  bool aggregation,
                  bool stbc = false,
                  bool ldpc = false,
@@ -209,25 +199,25 @@
      */
     void SetPreambleType(WifiPreamble preamble);
     /**
-     * \returns the channel width (in MHz)
+     * \returns the channel width
      */
-    uint16_t GetChannelWidth() const;
+    MHz_u GetChannelWidth() const;
     /**
-     * Sets the selected channelWidth (in MHz)
+     * Sets the selected channelWidth
      *
-     * \param channelWidth the channel width (in MHz)
+     * \param channelWidth the channel width
      */
-    void SetChannelWidth(uint16_t channelWidth);
+    void SetChannelWidth(MHz_u channelWidth);
     /**
      * \returns the guard interval duration (in nanoseconds)
      */
-    uint16_t GetGuardInterval() const;
+    Time GetGuardInterval() const;
     /**
      * Sets the guard interval duration (in nanoseconds)
      *
      * \param guardInterval the guard interval duration (in nanoseconds)
      */
-    void SetGuardInterval(uint16_t guardInterval);
+    void SetGuardInterval(Time guardInterval);
     /**
      * \returns the number of TX antennas
      */
@@ -565,8 +555,8 @@
                               It is the value that will be passed
                               to PMD_TXPWRLVL.request */
     WifiPreamble m_preamble;  /**< preamble */
-    uint16_t m_channelWidth;  /**< channel width in MHz */
-    uint16_t m_guardInterval; /**< guard interval duration in nanoseconds */
+    MHz_u m_channelWidth;     /**< channel width */
+    Time m_guardInterval;     /**< guard interval duration */
     uint8_t m_nTx;            /**< number of TX antennas */
     uint8_t m_nss;            /**< number of spatial streams */
     uint8_t m_ness;           /**< number of spatial streams in beamforming */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-types.h ns-3.43/src/wifi/model/wifi-types.h
--- ns-3.42/src/wifi/model/wifi-types.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/wifi-types.h	2024-10-09 16:41:10.132656800 -0700
@@ -0,0 +1,90 @@
+/*
+ * Copyright (c) 2023 DERONNE SOFTWARE ENGINEERING
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#ifndef WIFI_TYPES_H
+#define WIFI_TYPES_H
+
+#include "wifi-units.h"
+
+namespace ns3
+{
+
+/**
+ * \ingroup wifi
+ * Enumeration of the possible channel widths
+ */
+enum class WifiChannelWidthType : uint8_t
+{
+    UNKNOWN = 0,
+    CW_20MHZ,
+    CW_22MHZ,
+    CW_5MHZ,
+    CW_10MHZ,
+    CW_40MHZ,
+    CW_80MHZ,
+    CW_160MHZ,
+    CW_80_PLUS_80MHZ,
+    CW_2160MHZ,
+    MAX,
+};
+
+/**
+ * \ingroup wifi
+ * The type of an MPDU.
+ */
+enum MpduType
+{
+    /** The MPDU is not part of an A-MPDU */
+    NORMAL_MPDU,
+    /** The MPDU is a single MPDU */
+    SINGLE_MPDU,
+    /** The MPDU is the first aggregate in an A-MPDU with multiple MPDUs, but is not the last
+     * aggregate */
+    FIRST_MPDU_IN_AGGREGATE,
+    /** The MPDU is part of an A-MPDU with multiple MPDUs, but is neither the first nor the last
+     * aggregate */
+    MIDDLE_MPDU_IN_AGGREGATE,
+    /** The MPDU is the last aggregate in an A-MPDU with multiple MPDUs */
+    LAST_MPDU_IN_AGGREGATE
+};
+
+/// SignalNoiseDbm structure
+struct SignalNoiseDbm
+{
+    dBm_u signal; ///< signal strength
+    dBm_u noise;  ///< noise power
+};
+
+/// MpduInfo structure
+struct MpduInfo
+{
+    MpduType type;          ///< type of MPDU
+    uint32_t mpduRefNumber; ///< MPDU ref number
+};
+
+/// RxSignalInfo structure containing info on the received signal
+struct RxSignalInfo
+{
+    double snr; ///< SNR in linear scale
+    dBm_u rssi; ///< RSSI
+};
+
+/**
+ * \ingroup wifi
+ * \brief Enumeration of frequency channel types
+ */
+enum class FrequencyChannelType : uint8_t
+{
+    DSSS = 0,
+    OFDM,
+    CH_80211P
+};
+
+} // namespace ns3
+
+#endif /* WIFI_TYPES_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-units.h ns-3.43/src/wifi/model/wifi-units.h
--- ns-3.42/src/wifi/model/wifi-units.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/model/wifi-units.h	2024-10-09 16:41:10.132656800 -0700
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2024
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Authors: Jiwoong Lee <porce@berkeley.edu>
+ *          Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#ifndef WIFI_UNITS_H
+#define WIFI_UNITS_H
+
+#include <cstdint>
+
+/**
+ * \file
+ * \ingroup wifi
+ * Declaration of the SI units (as weak types aliases) used across wifi module
+ */
+
+namespace ns3
+{
+
+using mWatt_u = double;       //!< mWatt weak type
+using Watt_u = double;        //!< Watt weak type
+using dBW_u = double;         //!< dBW weak type
+using dBm_u = double;         //!< dBm weak type
+using dB_u = double;          //!< dB weak type
+using dBr_u = dB_u;           //!< dBr weak type
+using Hz_u = double;          //!< Hz weak type
+using MHz_u = double;         //!< MHz weak type
+using meter_u = double;       //!< meter weak type
+using ampere_u = double;      //!< ampere weak type
+using volt_u = double;        //!< volt weak type
+using degree_u = double;      //!< degree weak type (angle)
+using joule_u = double;       //!< joule weak type
+using dBm_per_Hz_u = double;  //!< dBm/Hz weak type
+using dBm_per_MHz_u = double; //!< dBm/MHz weak type
+
+} // namespace ns3
+
+#endif // WIFI_UNITS_H
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-utils.cc ns-3.43/src/wifi/model/wifi-utils.cc
--- ns-3.42/src/wifi/model/wifi-utils.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-utils.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -33,24 +22,25 @@
 const Time WIFI_TU = MicroSeconds(WIFI_TU_US);
 
 double
-DbToRatio(double dB)
+DbToRatio(dB_u val)
 {
-    return std::pow(10.0, 0.1 * dB);
+    return std::pow(10.0, 0.1 * val);
 }
 
-double
-DbmToW(double dBm)
+Watt_u
+DbmToW(dBm_u val)
 {
-    return std::pow(10.0, 0.1 * (dBm - 30.0));
+    return std::pow(10.0, 0.1 * (val - 30.0));
 }
 
-double
-WToDbm(double w)
+dBm_u
+WToDbm(Watt_u val)
 {
-    return 10.0 * std::log10(w) + 30.0;
+    NS_ASSERT(val > 0.);
+    return 10.0 * std::log10(val) + 30.0;
 }
 
-double
+dB_u
 RatioToDb(double ratio)
 {
     return 10.0 * std::log10(ratio);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/wifi-utils.h ns-3.43/src/wifi/model/wifi-utils.h
--- ns-3.42/src/wifi/model/wifi-utils.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/wifi-utils.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -21,6 +10,7 @@
 #define WIFI_UTILS_H
 
 #include "block-ack-type.h"
+#include "wifi-types.h"
 
 #include "ns3/fatal-error.h"
 #include "ns3/nstime.h"
@@ -77,27 +67,27 @@
 /**
  * Convert from dBm to Watts.
  *
- * \param dbm the power in dBm
+ * \param val the value in dBm
  *
  * \return the equivalent Watts for the given dBm
  */
-double DbmToW(double dbm);
+Watt_u DbmToW(dBm_u val);
 /**
  * Convert from dB to ratio.
  *
- * \param db the value in dB
+ * \param val the value in dB
  *
  * \return ratio in linear scale
  */
-double DbToRatio(double db);
+double DbToRatio(dB_u val);
 /**
  * Convert from Watts to dBm.
  *
- * \param w the power in Watts
+ * \param val the value in Watts
  *
  * \return the equivalent dBm for the given Watts
  */
-double WToDbm(double w);
+dBm_u WToDbm(Watt_u val);
 /**
  * Convert from ratio to dB.
  *
@@ -105,7 +95,7 @@
  *
  * \return the value in dB
  */
-double RatioToDb(double ratio);
+dB_u RatioToDb(double ratio);
 /**
  * Return the total Ack size (including FCS trailer).
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/yans-error-rate-model.cc ns-3.43/src/wifi/model/yans-error-rate-model.cc
--- ns-3.42/src/wifi/model/yans-error-rate-model.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/yans-error-rate-model.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/yans-error-rate-model.h ns-3.43/src/wifi/model/yans-error-rate-model.h
--- ns-3.42/src/wifi/model/yans-error-rate-model.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/yans-error-rate-model.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/yans-wifi-channel.cc ns-3.43/src/wifi/model/yans-wifi-channel.cc
--- ns-3.42/src/wifi/model/yans-wifi-channel.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/yans-wifi-channel.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage, <mathieu.lacage@sophia.inria.fr>
  */
@@ -87,9 +76,9 @@
 }
 
 void
-YansWifiChannel::Send(Ptr<YansWifiPhy> sender, Ptr<const WifiPpdu> ppdu, double txPowerDbm) const
+YansWifiChannel::Send(Ptr<YansWifiPhy> sender, Ptr<const WifiPpdu> ppdu, dBm_u txPower) const
 {
-    NS_LOG_FUNCTION(this << sender << ppdu << txPowerDbm);
+    NS_LOG_FUNCTION(this << sender << ppdu << txPower);
     Ptr<MobilityModel> senderMobility = sender->GetMobility();
     NS_ASSERT(senderMobility);
     for (auto i = m_phyList.begin(); i != m_phyList.end(); i++)
@@ -102,14 +91,14 @@
                 continue;
             }
 
-            Ptr<MobilityModel> receiverMobility = (*i)->GetMobility()->GetObject<MobilityModel>();
-            Time delay = m_delay->GetDelay(senderMobility, receiverMobility);
-            double rxPowerDbm = m_loss->CalcRxPower(txPowerDbm, senderMobility, receiverMobility);
+            auto receiverMobility = (*i)->GetMobility()->GetObject<MobilityModel>();
+            const auto delay = m_delay->GetDelay(senderMobility, receiverMobility);
+            const auto rxPower = m_loss->CalcRxPower(txPower, senderMobility, receiverMobility);
             NS_LOG_DEBUG("propagation: txPower="
-                         << txPowerDbm << "dbm, rxPower=" << rxPowerDbm << "dbm, "
+                         << txPower << "dBm, rxPower=" << rxPower << "dBm, "
                          << "distance=" << senderMobility->GetDistanceFrom(receiverMobility)
                          << "m, delay=" << delay);
-            Ptr<NetDevice> dstNetDevice = (*i)->GetDevice();
+            auto dstNetDevice = (*i)->GetDevice();
             uint32_t dstNode;
             if (!dstNetDevice)
             {
@@ -125,28 +114,28 @@
                                            &YansWifiChannel::Receive,
                                            (*i),
                                            ppdu,
-                                           rxPowerDbm);
+                                           rxPower);
         }
     }
 }
 
 void
-YansWifiChannel::Receive(Ptr<YansWifiPhy> phy, Ptr<const WifiPpdu> ppdu, double rxPowerDbm)
+YansWifiChannel::Receive(Ptr<YansWifiPhy> phy, Ptr<const WifiPpdu> ppdu, dBm_u rxPower)
 {
-    NS_LOG_FUNCTION(phy << ppdu << rxPowerDbm);
-    const auto totalRxPowerDbm = rxPowerDbm + phy->GetRxGain();
-    phy->TraceSignalArrival(ppdu, totalRxPowerDbm, ppdu->GetTxDuration());
+    NS_LOG_FUNCTION(phy << ppdu << rxPower);
+    const auto totalRxPower = rxPower + phy->GetRxGain();
+    phy->TraceSignalArrival(ppdu, totalRxPower, ppdu->GetTxDuration());
     // Do no further processing if signal is too weak
     // Current implementation assumes constant RX power over the PPDU duration
     // Compare received TX power per MHz to normalized RX sensitivity
-    uint16_t txWidth = ppdu->GetTxChannelWidth();
-    if (totalRxPowerDbm < phy->GetRxSensitivity() + RatioToDb(txWidth / 20.0))
+    const auto txWidth = ppdu->GetTxChannelWidth();
+    if (totalRxPower < phy->GetRxSensitivity() + RatioToDb(txWidth / 20.0))
     {
-        NS_LOG_INFO("Received signal too weak to process: " << rxPowerDbm << " dBm");
+        NS_LOG_INFO("Received signal too weak to process: " << rxPower << " dBm");
         return;
     }
     RxPowerWattPerChannelBand rxPowerW;
-    rxPowerW.insert({{{0, 0}, {0, 0}}, DbmToW(totalRxPowerDbm)}); // dummy band for YANS
+    rxPowerW.insert({{{{0, 0}}, {{0, 0}}}, (DbmToW(totalRxPower))}); // dummy band for YANS
     phy->StartReceivePreamble(ppdu, rxPowerW, ppdu->GetTxDuration());
 }
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/yans-wifi-channel.h ns-3.43/src/wifi/model/yans-wifi-channel.h
--- ns-3.42/src/wifi/model/yans-wifi-channel.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/yans-wifi-channel.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006,2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage, <mathieu.lacage@sophia.inria.fr>
  */
@@ -20,6 +9,8 @@
 #ifndef YANS_WIFI_CHANNEL_H
 #define YANS_WIFI_CHANNEL_H
 
+#include "wifi-units.h"
+
 #include "ns3/channel.h"
 
 namespace ns3
@@ -76,14 +67,14 @@
     /**
      * \param sender the PHY object from which the packet is originating.
      * \param ppdu the PPDU to send
-     * \param txPowerDbm the TX power associated to the packet, in dBm
+     * \param txPower the TX power associated to the packet
      *
      * This method should not be invoked by normal users. It is
      * currently invoked only from YansWifiPhy::StartTx.  The channel
      * attempts to deliver the PPDU to all other YansWifiPhy objects
      * on the channel (except for the sender).
      */
-    void Send(Ptr<YansWifiPhy> sender, Ptr<const WifiPpdu> ppdu, double txPowerDbm) const;
+    void Send(Ptr<YansWifiPhy> sender, Ptr<const WifiPpdu> ppdu, dBm_u txPower) const;
 
     /**
      * Assign a fixed random variable stream number to the random variables
@@ -109,9 +100,9 @@
      *
      * \param receiver the device to which the packet is destined
      * \param ppdu the PPDU being sent
-     * \param txPowerDbm the TX power associated to the packet being sent (dBm)
+     * \param txPower the TX power associated to the packet being sent
      */
-    static void Receive(Ptr<YansWifiPhy> receiver, Ptr<const WifiPpdu> ppdu, double txPowerDbm);
+    static void Receive(Ptr<YansWifiPhy> receiver, Ptr<const WifiPpdu> ppdu, dBm_u txPower);
 
     PhyList m_phyList;                  //!< List of YansWifiPhys connected to this YansWifiChannel
     Ptr<PropagationLossModel> m_loss;   //!< Propagation loss model
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/yans-wifi-phy.cc ns-3.43/src/wifi/model/yans-wifi-phy.cc
--- ns-3.42/src/wifi/model/yans-wifi-phy.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/yans-wifi-phy.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Ghada Badawy <gbadawy@gmail.com>
@@ -58,7 +47,7 @@
 {
     WifiPhy::SetInterferenceHelper(helper);
     // add dummy band for Yans
-    m_interference->AddBand({{0, 0}, {0, 0}});
+    m_interference->AddBand({{{0, 0}}, {{0, 0}}});
 }
 
 YansWifiPhy::~YansWifiPhy()
@@ -93,7 +82,7 @@
 {
     NS_LOG_FUNCTION(this << ppdu);
     NS_LOG_DEBUG("Start transmission: signal power before antenna gain="
-                 << GetPowerDbm(ppdu->GetTxVector().GetTxPowerLevel()) << "dBm");
+                 << GetPower(ppdu->GetTxVector().GetTxPowerLevel()) << "dBm");
     m_signalTransmissionCb(ppdu, ppdu->GetTxVector());
     m_channel->Send(this, ppdu, GetTxPowerForTransmission(ppdu) + GetTxGain());
 }
@@ -105,14 +94,14 @@
     m_signalArrivalCb(ppdu, rxPowerDbm, ppdu->GetTxDuration());
 }
 
-uint16_t
-YansWifiPhy::GetGuardBandwidth(uint16_t currentChannelWidth) const
+MHz_u
+YansWifiPhy::GetGuardBandwidth(MHz_u currentChannelWidth) const
 {
     NS_ABORT_MSG("Guard bandwidth not relevant for Yans");
     return 0;
 }
 
-std::tuple<double, double, double>
+std::tuple<dBr_u, dBr_u, dBr_u>
 YansWifiPhy::GetTxMaskRejectionParams() const
 {
     NS_ABORT_MSG("Tx mask rejection params not relevant for Yans");
@@ -120,9 +109,9 @@
 }
 
 WifiSpectrumBandInfo
-YansWifiPhy::GetBand(uint16_t /*bandWidth*/, uint8_t /*bandIndex*/)
+YansWifiPhy::GetBand(MHz_u /*bandWidth*/, uint8_t /*bandIndex*/)
 {
-    return {{0, 0}, {0, 0}};
+    return {{{0, 0}}, {{0, 0}}};
 }
 
 FrequencyRange
@@ -137,4 +126,12 @@
     return {0, 0};
 }
 
+void
+YansWifiPhy::FinalizeChannelSwitch()
+{
+    NS_LOG_FUNCTION(this);
+    NS_ABORT_MSG_IF(GetOperatingChannel().GetNSegments() > 1,
+                    "operating channel made of non-contiguous segments cannot be used with Yans");
+}
+
 } // namespace ns3
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/model/yans-wifi-phy.h ns-3.43/src/wifi/model/yans-wifi-phy.h
--- ns-3.42/src/wifi/model/yans-wifi-phy.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/model/yans-wifi-phy.h	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Ghada Badawy <gbadawy@gmail.com>
@@ -59,9 +48,9 @@
     void SetInterferenceHelper(const Ptr<InterferenceHelper> helper) override;
     void StartTx(Ptr<const WifiPpdu> ppdu) override;
     Ptr<Channel> GetChannel() const override;
-    uint16_t GetGuardBandwidth(uint16_t currentChannelWidth) const override;
-    std::tuple<double, double, double> GetTxMaskRejectionParams() const override;
-    WifiSpectrumBandInfo GetBand(uint16_t bandWidth, uint8_t bandIndex = 0) override;
+    MHz_u GetGuardBandwidth(MHz_u currentChannelWidth) const override;
+    std::tuple<dBr_u, dBr_u, dBr_u> GetTxMaskRejectionParams() const override;
+    WifiSpectrumBandInfo GetBand(MHz_u bandWidth, uint8_t bandIndex = 0) override;
     FrequencyRange GetCurrentFrequencyRange() const override;
     WifiSpectrumBandFrequencies ConvertIndicesToFrequencies(
         const WifiSpectrumBandIndices& indices) const override;
@@ -98,6 +87,8 @@
     void DoDispose() override;
 
   private:
+    void FinalizeChannelSwitch() override;
+
     Ptr<YansWifiChannel> m_channel; //!< YansWifiChannel that this YansWifiPhy is connected to
 
     TracedCallback<Ptr<const WifiPpdu>, double, Time>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/80211b.c ns-3.43/src/wifi/test/80211b.c
--- ns-3.42/src/wifi/test/80211b.c	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/80211b.c	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2010 The Boeing Company
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Gary Pei <guangyu.pei@boeing.com>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/80211b.plt ns-3.43/src/wifi/test/80211b.plt
--- ns-3.42/src/wifi/test/80211b.plt	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/80211b.plt	2024-10-09 16:41:10.132656800 -0700
@@ -1,17 +1,6 @@
 # Copyright (c) 2010 The Boeing Company
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gary Pei <guangyu.pei@boeing.com>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/block-ack-test-suite.cc ns-3.43/src/wifi/test/block-ack-test-suite.cc
--- ns-3.42/src/wifi/test/block-ack-test-suite.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/block-ack-test-suite.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009, 2010 MIRKO BANCHI
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mirko Banchi <mk.banchi@gmail.com>
  */
@@ -23,8 +12,10 @@
 #include "ns3/config.h"
 #include "ns3/ctrl-headers.h"
 #include "ns3/double.h"
+#include "ns3/frame-exchange-manager.h"
 #include "ns3/mac-rx-middle.h"
 #include "ns3/mobility-helper.h"
+#include "ns3/multi-model-spectrum-channel.h"
 #include "ns3/originator-block-ack-agreement.h"
 #include "ns3/packet-socket-client.h"
 #include "ns3/packet-socket-helper.h"
@@ -34,17 +25,23 @@
 #include "ns3/qos-txop.h"
 #include "ns3/qos-utils.h"
 #include "ns3/recipient-block-ack-agreement.h"
+#include "ns3/spectrum-wifi-helper.h"
 #include "ns3/string.h"
 #include "ns3/test.h"
+#include "ns3/wifi-default-ack-manager.h"
 #include "ns3/wifi-mac-header.h"
+#include "ns3/wifi-mac-queue.h"
 #include "ns3/wifi-mpdu.h"
 #include "ns3/wifi-net-device.h"
+#include "ns3/wifi-phy.h"
 #include "ns3/yans-wifi-helper.h"
 
 #include <list>
 
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE("WifiBlockAckTest");
+
 /**
  * \ingroup wifi-test
  * \ingroup tests
@@ -2014,6 +2011,239 @@
  * \ingroup wifi-test
  * \ingroup tests
  *
+ * \brief Test for Block Ack Policy with non-null BA threshold and TX window blocked.
+ *
+ * An EHT device establishes a Block Ack agreement (for TID 0) with the AP and uses a Block Ack
+ * threshold of 0.125 (i.e., Block Ack is requested if there are at least 64 * 0.125 = 8 MPDUs
+ * to be acknowledged, where 64 is the Block Ack buffer size). An application installed on the
+ * non-AP node generates 70 packets, hence an A-MPDU containing the first 64 MPDUs is transmitted.
+ * The first 5 MPDUs in that A-MPDU are corrupted. We check that:
+ *
+ * - the first A-MPDU contains MPDUs with sequence numbers from 0 to 63
+ * - the second A-MPDU contains the 5 retransmitted MPDUs (with sequence numbers from 0 to 4) only,
+ *   because the TX window is blocked
+ * - the third A-MPDU contains the remaining 6 MPDUs (with sequence numbers from 64 to 69)
+ * - 3 A-MPDUs and 3 BlockAck frames are transmitted during the simulation
+ * - the MAC queue is empty at the end of simulation (meaning that all MPDUs were acknowledged)
+ */
+class OrigBlockAckWindowStalled : public TestCase
+{
+  public:
+    /**
+     * \param mld whether the non-AP device is a multi-link device
+     */
+    OrigBlockAckWindowStalled(bool mld);
+
+    /**
+     * Callback invoked when a FEM passes PSDUs to the PHY.
+     *
+     * \param psduMap the PSDU map
+     * \param txVector the TX vector
+     * \param txPowerW the tx power in Watts
+     */
+    void Transmit(WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW);
+
+  private:
+    void DoSetup() override;
+    void DoRun() override;
+
+    const uint8_t m_nLinks;            ///< number of links
+    const double m_baThreshold{0.125}; ///< BA threshold used by ack manager
+    const std::size_t m_nPkts{70};     ///< number of generated packets
+    Ptr<ListErrorModel> m_errorModel;  ///< error rate model to corrupt packets
+    Ptr<WifiNetDevice> m_staDevice;    ///< station WifiNetDevice
+    std::size_t m_qosCount{0};         ///< counter for transmitted QoS data frames
+    std::size_t m_baCount{0};          ///< counter for transmitted BlockAck frames
+};
+
+OrigBlockAckWindowStalled::OrigBlockAckWindowStalled(bool mld)
+    : TestCase("Test case for originator Block Ack window stalled"),
+      m_nLinks(mld ? 2 : 1)
+{
+}
+
+void
+OrigBlockAckWindowStalled::Transmit(WifiConstPsduMap psduMap,
+                                    WifiTxVector txVector,
+                                    double txPowerW)
+{
+    for (const auto& [aid, psdu] : psduMap)
+    {
+        std::stringstream ss;
+        ss << " #MPDUs " << psdu->GetNMpdus();
+        for (const auto& mpdu : *PeekPointer(psdu))
+        {
+            ss << "\n" << *mpdu;
+        }
+
+        if (const auto& hdr = (*psdu->begin())->GetHeader(); hdr.IsQosData())
+        {
+            // check sequence numbers in the transmitted A-MPDU
+            uint16_t startSeqN{0};
+            std::size_t count{0};
+
+            switch (++m_qosCount)
+            {
+            case 1:
+                startSeqN = 0;
+                count = 64;
+                break;
+            case 2:
+                startSeqN = 0;
+                count = 5;
+                break;
+            case 3:
+                startSeqN = 64;
+                count = 6;
+                break;
+            default:;
+            }
+
+            NS_TEST_EXPECT_MSG_EQ(psdu->GetNMpdus(),
+                                  count,
+                                  "Unexpected number of MPDUs in A-MPDU #" << m_qosCount);
+
+            for (const auto& mpdu : *PeekPointer(psdu))
+            {
+                NS_TEST_EXPECT_MSG_GT_OR_EQ(mpdu->GetHeader().GetSequenceNumber(),
+                                            startSeqN,
+                                            "Unexpected SeqN in A-MPDU #" << m_qosCount);
+                NS_TEST_EXPECT_MSG_LT(mpdu->GetHeader().GetSequenceNumber(),
+                                      startSeqN + count,
+                                      "Unexpected SeqN in A-MPDU #" << m_qosCount);
+            }
+
+            // reset UIDs to corrupt
+            m_errorModel->SetList({});
+
+            // corrupt the first 5 MPDUs of the second QoS data frame
+            if (m_qosCount == 1)
+            {
+                auto mpduIt = psdu->begin();
+                std::list<uint64_t> uids;
+                ss << "\nCORRUPTED";
+                for (std::size_t i = 0; i < 5; ++i, ++mpduIt)
+                {
+                    uids.push_back((*mpduIt)->GetPacket()->GetUid());
+                    ss << " " << (*mpduIt)->GetHeader().GetSequenceNumber();
+                }
+                m_errorModel->SetList(uids);
+            }
+        }
+        else if (hdr.IsBlockAck())
+        {
+            ++m_baCount;
+        }
+
+        NS_LOG_INFO(ss.str());
+    }
+    NS_LOG_INFO("TXVECTOR = " << txVector << "\n");
+}
+
+void
+OrigBlockAckWindowStalled::DoSetup()
+{
+    NodeContainer wifiStaNode(1);
+    NodeContainer wifiApNode(1);
+
+    auto channel = CreateObject<MultiModelSpectrumChannel>();
+    SpectrumWifiPhyHelper phy(m_nLinks);
+    phy.Set(0, "ChannelSettings", StringValue("{36, 0, BAND_5GHZ, 0}"));
+    if (m_nLinks > 1)
+    {
+        phy.Set(1, "ChannelSettings", StringValue("{100, 0, BAND_5GHZ, 0}"));
+    }
+    phy.SetChannel(channel);
+
+    WifiHelper wifi;
+    wifi.SetStandard(WIFI_STANDARD_80211be);
+    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
+                                 "DataMode",
+                                 StringValue("EhtMcs7"),
+                                 "ControlMode",
+                                 StringValue("EhtMcs0"));
+
+    WifiMacHelper mac;
+    mac.SetAckManager("ns3::WifiDefaultAckManager", "BaThreshold", DoubleValue(m_baThreshold));
+    mac.SetType("ns3::StaWifiMac", "MpduBufferSize", UintegerValue(64));
+
+    auto staDevices = wifi.Install(phy, mac, wifiStaNode);
+
+    mac.SetType("ns3::ApWifiMac");
+
+    auto apDevices = wifi.Install(phy, mac, wifiApNode);
+
+    Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
+    positionAlloc->Add(Vector(0.0, 0.0, 0.0));
+    positionAlloc->Add(Vector(1.0, 0.0, 0.0));
+
+    MobilityHelper mobility;
+    mobility.SetPositionAllocator(positionAlloc);
+    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+    mobility.Install(wifiApNode);
+    mobility.Install(wifiStaNode);
+
+    auto apDevice = DynamicCast<WifiNetDevice>(apDevices.Get(0));
+    m_staDevice = DynamicCast<WifiNetDevice>(staDevices.Get(0));
+
+    Config::ConnectWithoutContext(
+        "/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phys/*/PhyTxPsduBegin",
+        MakeCallback(&OrigBlockAckWindowStalled::Transmit, this));
+
+    // install post reception error model on AP
+    m_errorModel = CreateObject<ListErrorModel>();
+    apDevice->GetPhy(0)->SetPostReceptionErrorModel(m_errorModel);
+    if (m_nLinks > 1)
+    {
+        apDevice->GetPhy(1)->SetPostReceptionErrorModel(m_errorModel);
+    }
+
+    PacketSocketAddress socket;
+    socket.SetSingleDevice(m_staDevice->GetIfIndex());
+    socket.SetPhysicalAddress(apDevice->GetAddress());
+    socket.SetProtocol(1);
+
+    // give packet socket powers to nodes.
+    PacketSocketHelper packetSocket;
+    packetSocket.Install(wifiStaNode);
+    packetSocket.Install(wifiApNode);
+
+    auto client = CreateObject<PacketSocketClient>();
+    client->SetAttribute("PacketSize", UintegerValue(100));
+    client->SetAttribute("MaxPackets", UintegerValue(m_nPkts));
+    client->SetAttribute("Interval", TimeValue(Time{0}));
+    client->SetRemote(socket);
+    wifiStaNode.Get(0)->AddApplication(client);
+    client->SetStartTime(Seconds(0.5));
+    client->SetStopTime(Seconds(3.0));
+
+    auto server = CreateObject<PacketSocketServer>();
+    server->SetLocal(socket);
+    wifiApNode.Get(0)->AddApplication(server);
+    server->SetStartTime(Seconds(0.0));
+    server->SetStopTime(Seconds(4.0));
+}
+
+void
+OrigBlockAckWindowStalled::DoRun()
+{
+    Simulator::Stop(Seconds(3));
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(m_qosCount, 3, "Unexpected number of transmitted QoS data frames");
+    NS_TEST_EXPECT_MSG_EQ(m_baCount, 3, "Unexpected number of transmitted BlockAck frames");
+
+    NS_TEST_EXPECT_MSG_EQ(m_staDevice->GetMac()->GetTxopQueue(AC_BE)->IsEmpty(),
+                          true,
+                          "Expected no packet in STA queue");
+
+    Simulator::Destroy();
+}
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
  * \brief Block Ack Test Suite
  */
 class BlockAckTestSuite : public TestSuite
@@ -2034,6 +2264,8 @@
     AddTestCase(new MultiStaCtrlBAckResponseHeaderTest, TestCase::Duration::QUICK);
     AddTestCase(new BlockAckAggregationDisabledTest(false), TestCase::Duration::QUICK);
     AddTestCase(new BlockAckAggregationDisabledTest(true), TestCase::Duration::QUICK);
+    AddTestCase(new OrigBlockAckWindowStalled(false), TestCase::Duration::QUICK);
+    AddTestCase(new OrigBlockAckWindowStalled(true), TestCase::Duration::QUICK);
 }
 
 static BlockAckTestSuite g_blockAckTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/channel-access-manager-test.cc ns-3.43/src/wifi/test/channel-access-manager-test.cc
--- ns-3.42/src/wifi/test/channel-access-manager-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/channel-access-manager-test.cc	2024-10-09 16:41:10.132656800 -0700
@@ -1,39 +1,43 @@
 /*
  * Copyright (c) 2005,2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
 
 #include "ns3/adhoc-wifi-mac.h"
+#include "ns3/ap-wifi-mac.h"
 #include "ns3/channel-access-manager.h"
+#include "ns3/config.h"
 #include "ns3/frame-exchange-manager.h"
 #include "ns3/interference-helper.h"
+#include "ns3/mgt-action-headers.h"
+#include "ns3/mobility-helper.h"
 #include "ns3/multi-model-spectrum-channel.h"
+#include "ns3/packet-socket-client.h"
+#include "ns3/packet-socket-helper.h"
+#include "ns3/packet-socket-server.h"
 #include "ns3/pointer.h"
 #include "ns3/qos-txop.h"
+#include "ns3/rng-seed-manager.h"
 #include "ns3/simulator.h"
+#include "ns3/spectrum-wifi-helper.h"
 #include "ns3/spectrum-wifi-phy.h"
+#include "ns3/sta-wifi-mac.h"
 #include "ns3/string.h"
 #include "ns3/test.h"
+#include "ns3/wifi-net-device.h"
+#include "ns3/wifi-spectrum-phy-interface.h"
 
+#include <iomanip>
 #include <list>
 #include <numeric>
 
 using namespace ns3;
 
+NS_LOG_COMPONENT_DEFINE("WifiChannelAccessManagerTest");
+
 template <typename TxopType>
 class ChannelAccessManagerTest;
 
@@ -193,10 +197,10 @@
      *
      * \param dcf the channel access function that gained channel access. It is
      *            the DCF on non-QoS stations and an EDCA on QoS stations.
-     * \param allowedWidth the maximum allowed TX width in MHz
+     * \param allowedWidth the maximum allowed TX width
      * \return true if a frame exchange sequence was started, false otherwise
      */
-    bool StartTransmission(Ptr<Txop> dcf, uint16_t allowedWidth) override
+    bool StartTransmission(Ptr<Txop> dcf, MHz_u allowedWidth) override
     {
         dcf->NotifyChannelAccessed(0);
         return true;
@@ -258,13 +262,13 @@
      * \param sifs the SIFS
      * \param eifsNoDifsNoSifs the EIFS no DIFS no SIFS
      * \param ackTimeoutValue the Ack timeout value
-     * \param chWidth the channel width in MHz
+     * \param chWidth the channel width
      */
     void StartTest(uint64_t slotTime,
                    uint64_t sifs,
                    uint64_t eifsNoDifsNoSifs,
                    uint32_t ackTimeoutValue = 20,
-                   uint16_t chWidth = 20);
+                   MHz_u chWidth = 20);
     /**
      * Add Txop function
      * \param aifsn the AIFSN
@@ -611,7 +615,7 @@
                                               uint64_t sifs,
                                               uint64_t eifsNoDifsNoSifs,
                                               uint32_t ackTimeoutValue,
-                                              uint16_t chWidth)
+                                              MHz_u chWidth)
 {
     m_ChannelAccessManager = CreateObject<ChannelAccessManagerStub>();
     m_feManager = CreateObject<FrameExchangeManagerStub<TxopType>>(this);
@@ -1350,7 +1354,7 @@
      * \param chWidth the operating channel width
      * \param busyChannel the busy channel type
      */
-    void RunOne(uint16_t chWidth, WifiChannelListType busyChannel);
+    void RunOne(MHz_u chWidth, WifiChannelListType busyChannel);
 
     Ptr<ChannelAccessManager> m_cam; //!< channel access manager
     Ptr<SpectrumWifiPhy> m_phy;      //!< PHY object
@@ -1362,7 +1366,7 @@
 }
 
 void
-LargestIdlePrimaryChannelTest::RunOne(uint16_t chWidth, WifiChannelListType busyChannel)
+LargestIdlePrimaryChannelTest::RunOne(MHz_u chWidth, WifiChannelListType busyChannel)
 {
     /**
      *                 <  Interval1  >< Interval2 >
@@ -1397,9 +1401,9 @@
     // During any interval ending within CCA_BUSY period, the idle channel is the
     // primary channel contiguous to the busy secondary channel, if the busy channel
     // is a secondary channel, or there is no idle channel, otherwise.
-    uint16_t idleWidth = (busyChannel == WifiChannelListType::WIFI_CHANLIST_PRIMARY)
-                             ? 0
-                             : ((1 << (busyChannel - 1)) * 20);
+    MHz_u idleWidth = (busyChannel == WifiChannelListType::WIFI_CHANLIST_PRIMARY)
+                          ? 0
+                          : ((1 << (busyChannel - 1)) * 20);
 
     Time checkTime1 = start + ccaBusyStartDelay + ccaBusyDuration / 2;
     Simulator::Schedule(checkTime1 - start, [=, this]() {
@@ -1491,7 +1495,7 @@
     uint8_t channel = 0;
     std::list<WifiChannelListType> busyChannels;
 
-    for (uint16_t chWidth : {20, 40, 80, 160})
+    for (MHz_u chWidth : {20, 40, 80, 160})
     {
         busyChannels.push_back(static_cast<WifiChannelListType>(channel));
 
@@ -1533,6 +1537,481 @@
  * \ingroup wifi-test
  * \ingroup tests
  *
+ * \brief Test the GenerateBackoffIfTxopWithoutTx and ProactiveBackoff attributes of the
+ *        ChannelAccessManager. The backoff values generated by the VO AC of the AP are checked.
+ *
+ * The GenerateBackoffIfTxopWithoutTx test checks the generation of backoff values when the
+ * attribute is set to true. A QoS data frame is queued at the AP but the queue is blocked so
+ * 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 │              └───┘                                                            └───┘
+ *   └─────┘
+ *
+ * The ProactiveBackoff test checks the generation of backoff values when the attribute is set
+ * to true. A noise is generated to trigger the generation of a new backoff value, provided
+ * that the backoff counter is zero.
+ *
+ *
+ * Backoff       Backoff                Backoff                     Backoff
+ * value #0      value #1               value #2                    value #3
+ *  |             |           ┌─────┐    |                           |
+ *  |             |    ┌───┐  │Assoc│    |                           |
+ *  |             |    │ACK│  │Resp │    |SIFS| noise | AIFS+backoff | noise |
+ * ─────────────┬─────┬┴───┴──┴─────┴┬───┬──────────────────────────────────────────────────
+ *              │Assoc│              │ACK│
+ *              │ Req │              └───┘
+ *              └─────┘
+ */
+class BackoffGenerationTest : public TestCase
+{
+  public:
+    /**
+     * Tested attributes
+     */
+    enum TestType : uint8_t
+    {
+        GEN_BACKOFF_IF_TXOP_NO_TX = 0,
+        PROACTIVE_BACKOFF
+    };
+
+    /**
+     * Constructor
+     *
+     * \param type the test type
+     */
+    BackoffGenerationTest(TestType type);
+
+  private:
+    void DoSetup() override;
+    void DoRun() override;
+
+    /**
+     * Callback invoked when a FEM passes PSDUs to the PHY.
+     *
+     * \param psduMap the PSDU map
+     * \param txVector the TX vector
+     * \param txPowerW the tx power in Watts
+     */
+    void Transmit(WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW);
+
+    /**
+     * Callback invoked when a new backoff value is generated by the given AC on the station.
+     *
+     * \param ac the AC index
+     * \param backoff the generated backoff value
+     * \param linkId the ID of the link for which the backoff value has been generated
+     */
+    void BackoffGenerated(AcIndex ac, uint32_t backoff, uint8_t linkId);
+
+    /**
+     * Indicate that a new backoff value has not been generated as expected.
+     */
+    void MissedBackoff();
+
+    /**
+     * Generate interference to make CCA busy.
+     */
+    void GenerateInterference();
+
+    Ptr<ApWifiMac> m_apMac;                ///< AP wifi MAC
+    Ptr<StaWifiMac> m_staMac;              ///< MAC of the non-AP STA
+    bool m_generateBackoffIfTxopWithoutTx; ///< whether the GenerateBackoffIfTxopWithoutTx
+                                           ///< attribute is set to true
+    bool m_proactiveBackoff;              ///< whether the ProactiveBackoff attribute is set to true
+    static constexpr uint8_t m_tid{6};    ///< TID of generated packet
+    std::size_t m_nGenBackoff{0};         ///< number of generated backoff values
+    std::size_t m_nExpectedGenBackoff{0}; ///< expected total number of generated backoff values
+    EventId m_nextBackoffGen;             ///< timer elapsing when next backoff value is expected
+                                          ///< to be generated
+    Time m_assocReqStartTxTime{0};        ///< Association Request start TX time
+    Time m_assocReqPpduHdrDuration{0};    ///< Association Request PPDU header TX duration
+    std::size_t m_nAcks{0};               ///< number of transmitted Ack frames
+    const Time m_interferenceDuration{MicroSeconds(10)}; ///< interference duration
+    Ptr<PacketSocketClient> m_client; ///< client to be installed on the AP after association
+};
+
+BackoffGenerationTest::BackoffGenerationTest(TestType type)
+    : TestCase("Check attributes impacting the generation of backoff values"),
+      m_generateBackoffIfTxopWithoutTx(type == GEN_BACKOFF_IF_TXOP_NO_TX),
+      m_proactiveBackoff(type == PROACTIVE_BACKOFF)
+{
+    if (m_proactiveBackoff)
+    {
+        m_nExpectedGenBackoff = 4;
+    }
+}
+
+void
+BackoffGenerationTest::DoSetup()
+{
+    RngSeedManager::SetSeed(1);
+    RngSeedManager::SetRun(1);
+    int64_t streamNumber = 10;
+
+    Config::SetDefault("ns3::ChannelAccessManager::GenerateBackoffIfTxopWithoutTx",
+                       BooleanValue(m_generateBackoffIfTxopWithoutTx));
+    Config::SetDefault("ns3::ChannelAccessManager::ProactiveBackoff",
+                       BooleanValue(m_proactiveBackoff));
+
+    auto apNode = CreateObject<Node>();
+    auto staNode = CreateObject<Node>();
+
+    WifiHelper wifi;
+    wifi.SetStandard(WIFI_STANDARD_80211be);
+    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
+                                 "DataMode",
+                                 StringValue("EhtMcs0"),
+                                 "ControlMode",
+                                 StringValue("HtMcs0"));
+
+    // MLDs are configured with three links
+    SpectrumWifiPhyHelper phyHelper;
+    phyHelper.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+    phyHelper.Set("ChannelSettings", StringValue("{36, 0, BAND_5GHZ, 0}"));
+    phyHelper.AddChannel(CreateObject<MultiModelSpectrumChannel>());
+
+    WifiMacHelper mac;
+    mac.SetType("ns3::ApWifiMac",
+                "Ssid",
+                SsidValue(Ssid("ns-3-ssid")),
+                "BeaconGeneration",
+                BooleanValue(true));
+
+    auto apDevice = DynamicCast<WifiNetDevice>(wifi.Install(phyHelper, mac, apNode).Get(0));
+
+    mac.SetType("ns3::StaWifiMac",
+                "Ssid",
+                SsidValue(Ssid("ns-3-ssid")),
+                "ActiveProbing",
+                BooleanValue(false));
+
+    auto staDevice = DynamicCast<WifiNetDevice>(wifi.Install(phyHelper, mac, staNode).Get(0));
+
+    m_apMac = DynamicCast<ApWifiMac>(apDevice->GetMac());
+    m_staMac = DynamicCast<StaWifiMac>(staDevice->GetMac());
+
+    // Trace PSDUs passed to the PHY
+    apDevice->GetPhy(SINGLE_LINK_OP_ID)
+        ->TraceConnectWithoutContext("PhyTxPsduBegin",
+                                     MakeCallback(&BackoffGenerationTest::Transmit, this));
+    staDevice->GetPhy(SINGLE_LINK_OP_ID)
+        ->TraceConnectWithoutContext("PhyTxPsduBegin",
+                                     MakeCallback(&BackoffGenerationTest::Transmit, this));
+
+    // Trace backoff generation
+    m_apMac->GetQosTxop(AC_VO)->TraceConnectWithoutContext(
+        "BackoffTrace",
+        MakeCallback(&BackoffGenerationTest::BackoffGenerated, this).Bind(AC_VO));
+
+    // Assign fixed streams to random variables in use
+    streamNumber += WifiHelper::AssignStreams(NetDeviceContainer(apDevice), streamNumber);
+    streamNumber += WifiHelper::AssignStreams(NetDeviceContainer(staDevice), streamNumber);
+
+    Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
+    positionAlloc->Add(Vector(0.0, 0.0, 0.0));
+    positionAlloc->Add(Vector(1.0, 0.0, 0.0));
+
+    MobilityHelper mobility;
+    mobility.SetPositionAllocator(positionAlloc);
+    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+    mobility.Install(apNode);
+    mobility.Install(staNode);
+
+    // // install packet socket on all nodes
+    PacketSocketHelper packetSocket;
+    packetSocket.Install(apNode);
+    packetSocket.Install(staNode);
+
+    // install a packet socket server on the non-AP station
+    PacketSocketAddress srvAddr;
+    srvAddr.SetSingleDevice(staDevice->GetIfIndex());
+    srvAddr.SetProtocol(1);
+
+    auto server = CreateObject<PacketSocketServer>();
+    server->SetLocal(srvAddr);
+    server->SetStartTime(Seconds(0));
+    server->SetStopTime(Seconds(1));
+    staNode->AddApplication(server);
+
+    // Prepare a packet socket client that generates one packet at the AP. This client will be
+    // installed as soon as association is completed
+    PacketSocketAddress remoteAddr;
+    remoteAddr.SetSingleDevice(apDevice->GetIfIndex());
+    remoteAddr.SetPhysicalAddress(staDevice->GetAddress());
+    remoteAddr.SetProtocol(1);
+
+    m_client = CreateObject<PacketSocketClient>();
+    m_client->SetAttribute("PacketSize", UintegerValue(1000));
+    m_client->SetAttribute("MaxPackets", UintegerValue(1));
+    m_client->SetAttribute("Interval", TimeValue(Time{0}));
+    m_client->SetAttribute("Priority", UintegerValue(m_tid)); // AC VO
+    m_client->SetRemote(remoteAddr);
+    m_client->SetStartTime(Seconds(0));
+    m_client->SetStopTime(Seconds(1));
+
+    // Block VO queue so that the AP does not send QoS data frames
+    m_apMac->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                 AC_VO,
+                                                 {WIFI_QOSDATA_QUEUE},
+                                                 m_staMac->GetAddress(),
+                                                 m_apMac->GetAddress(),
+                                                 {m_tid},
+                                                 {SINGLE_LINK_OP_ID});
+}
+
+void
+BackoffGenerationTest::DoRun()
+{
+    Simulator::Stop(Seconds(1));
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(m_nExpectedGenBackoff,
+                          m_nGenBackoff,
+                          "Unexpected total number of generated backoff values");
+
+    Simulator::Destroy();
+}
+
+void
+BackoffGenerationTest::Transmit(WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW)
+{
+    auto txDuration =
+        WifiPhy::CalculateTxDuration(psduMap,
+                                     txVector,
+                                     m_apMac->GetWifiPhy(SINGLE_LINK_OP_ID)->GetPhyBand());
+
+    for (const auto& [aid, psdu] : psduMap)
+    {
+        std::stringstream ss;
+        ss << std::setprecision(10) << psdu->GetHeader(0).GetTypeString();
+        if (psdu->GetHeader(0).IsAction())
+        {
+            ss << " ";
+            WifiActionHeader actionHdr;
+            psdu->GetPayload(0)->PeekHeader(actionHdr);
+            actionHdr.Print(ss);
+        }
+        ss << " #MPDUs " << psdu->GetNMpdus() << " duration/ID " << psdu->GetHeader(0).GetDuration()
+           << " RA = " << psdu->GetAddr1() << " TA = " << psdu->GetAddr2()
+           << " ADDR3 = " << psdu->GetHeader(0).GetAddr3()
+           << " ToDS = " << psdu->GetHeader(0).IsToDs()
+           << " FromDS = " << psdu->GetHeader(0).IsFromDs();
+        if (psdu->GetHeader(0).IsAssocReq())
+        {
+            m_assocReqStartTxTime = Simulator::Now();
+            m_assocReqPpduHdrDuration = WifiPhy::CalculatePhyPreambleAndHeaderDuration(txVector);
+        }
+        else if (psdu->GetHeader(0).IsAck())
+        {
+            m_nAcks++;
+            if (m_nAcks == 2)
+            {
+                // generate a packet destined to the non-AP station (this packet is held because
+                // the queue is blocked) as soon as association is completed
+                Simulator::Schedule(txDuration,
+                                    &Node::AddApplication,
+                                    m_apMac->GetDevice()->GetNode(),
+                                    m_client);
+            }
+        }
+        else if (psdu->GetHeader(0).IsQosData())
+        {
+            ss << " seqNo = {";
+            for (auto& mpdu : *PeekPointer(psdu))
+            {
+                ss << mpdu->GetHeader().GetSequenceNumber() << ",";
+            }
+            ss << "} TID = " << +psdu->GetHeader(0).GetQosTid();
+
+            // after sending the QoS data frame, we expect one more backoff value to be generated
+            // (at the end of the TXOP)
+            m_nExpectedGenBackoff = m_nGenBackoff + 1;
+        }
+        NS_LOG_INFO(ss.str());
+    }
+    NS_LOG_INFO("TX duration = " << txDuration.As(Time::MS) << "  TXVECTOR = " << txVector << "\n");
+}
+
+void
+BackoffGenerationTest::BackoffGenerated(AcIndex ac, uint32_t backoff, uint8_t linkId)
+{
+    NS_LOG_INFO("Backoff value " << backoff << " generated by AP on link " << +linkId << " for "
+                                 << ac << "\n");
+
+    // number of backoff values to generate when the GenerateBackoffIfTxopWithoutTx attribute is
+    // set to true (can be any value >= 3)
+    const std::size_t nValues = 5;
+
+    switch (m_nGenBackoff)
+    {
+    case 0:
+        NS_TEST_EXPECT_MSG_EQ(Simulator::Now().IsZero(),
+                              true,
+                              "First backoff value should be generated at initialization time");
+        m_nGenBackoff++;
+        return;
+    case 1:
+        if (m_generateBackoffIfTxopWithoutTx)
+        {
+            NS_TEST_EXPECT_MSG_EQ(m_apMac->IsAssociated(m_staMac->GetAddress()).has_value(),
+                                  true,
+                                  "Second backoff value should be generated after association");
+        }
+        if (m_proactiveBackoff)
+        {
+            NS_TEST_ASSERT_MSG_GT(
+                Simulator::Now(),
+                m_assocReqStartTxTime,
+                "Second backoff value should be generated after AssocReq TX start time");
+            NS_TEST_EXPECT_MSG_LT(Simulator::Now(),
+                                  m_assocReqStartTxTime + m_assocReqPpduHdrDuration,
+                                  "Second backoff value should be generated right after AssocReq "
+                                  "PPDU payload starts");
+        }
+        break;
+    case 2:
+        if (m_proactiveBackoff)
+        {
+            NS_TEST_EXPECT_MSG_EQ(m_apMac->IsAssociated(m_staMac->GetAddress()).has_value(),
+                                  true,
+                                  "Third backoff value should be generated after association");
+            // after a SIFS:
+            Simulator::Schedule(m_apMac->GetWifiPhy(linkId)->GetSifs(), [=, this]() {
+                // generate interference (lasting 10 us)
+                GenerateInterference();
+
+                if (backoff == 0)
+                {
+                    // backoff value is 0, thus a new backoff value is generated due to the
+                    // interference
+                    NS_TEST_EXPECT_MSG_EQ(m_nGenBackoff,
+                                          4,
+                                          "Unexpected number of generated backoff values");
+                }
+                else
+                {
+                    // interference does not cause the generation of a new backoff value because
+                    // the backoff counter is non-zero.
+                    // At the end of the interference:
+                    Simulator::Schedule(m_interferenceDuration, [=, this]() {
+                        auto voEdcaf = m_apMac->GetQosTxop(AC_VO);
+                        // update backoff (backoff info is only updated when some event occurs)
+                        m_apMac->GetChannelAccessManager(linkId)->NeedBackoffUponAccess(voEdcaf,
+                                                                                        true,
+                                                                                        true);
+                        auto delay =
+                            m_apMac->GetChannelAccessManager(linkId)->GetBackoffEndFor(voEdcaf) -
+                            Simulator::Now() + NanoSeconds(1);
+
+                        // right after the backoff counts down to zero:
+                        Simulator::Schedule(delay, [=, this]() {
+                            // check that the number of generated backoff values is still 3
+                            NS_TEST_EXPECT_MSG_EQ(m_nGenBackoff,
+                                                  3,
+                                                  "Unexpected number of generated backoff values");
+                            GenerateInterference();
+                            // check that a new backoff value is generated due to the interference
+                            NS_TEST_EXPECT_MSG_EQ(m_nGenBackoff,
+                                                  4,
+                                                  "Unexpected number of generated backoff values");
+                        });
+                    });
+                }
+            });
+        }
+        break;
+    case nValues:
+        // Unblock VO queue so that the AP can send QoS data frames
+        m_apMac->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                       AC_VO,
+                                                       {WIFI_QOSDATA_QUEUE},
+                                                       m_staMac->GetAddress(),
+                                                       m_apMac->GetAddress(),
+                                                       {m_tid},
+                                                       {SINGLE_LINK_OP_ID});
+        break;
+    }
+
+    if (m_generateBackoffIfTxopWithoutTx)
+    {
+        Time delay; // expected time until the generation of the next backoff value
+        const auto offset =
+            NanoSeconds(1); // offset between expected time and the time when check is made
+
+        if (m_nGenBackoff == 1)
+        {
+            // we have to wait an AIFS before invoking backoff
+            delay = m_apMac->GetWifiPhy(linkId)->GetSifs() +
+                    m_apMac->GetQosTxop(AC_VO)->GetAifsn(linkId) *
+                        m_apMac->GetWifiPhy(linkId)->GetSlot();
+        }
+        else if (m_nGenBackoff <= nValues)
+        {
+            NS_TEST_EXPECT_MSG_EQ(m_nextBackoffGen.IsPending(),
+                                  true,
+                                  "Expected a timer to be running");
+            NS_TEST_EXPECT_MSG_EQ(Simulator::GetDelayLeft(m_nextBackoffGen),
+                                  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)
+        {
+            // add the time corresponding to the generated number of slots
+            delay += backoff * m_apMac->GetWifiPhy(linkId)->GetSlot();
+
+            m_nextBackoffGen =
+                Simulator::Schedule(delay + offset, &BackoffGenerationTest::MissedBackoff, this);
+        }
+    }
+
+    m_nGenBackoff++;
+}
+
+void
+BackoffGenerationTest::MissedBackoff()
+{
+    NS_TEST_EXPECT_MSG_EQ(true,
+                          false,
+                          "Expected a new backoff value to be generated at time "
+                              << Simulator::Now().As(Time::S));
+}
+
+void
+BackoffGenerationTest::GenerateInterference()
+{
+    NS_LOG_FUNCTION(this);
+    auto phy = DynamicCast<SpectrumWifiPhy>(m_apMac->GetWifiPhy(SINGLE_LINK_OP_ID));
+    auto psd = Create<SpectrumValue>(phy->GetCurrentInterface()->GetRxSpectrumModel());
+    *psd = DbmToW(20) / 80e6; // PSD spread across 80 MHz to generate some noise
+
+    auto spectrumSignalParams = Create<SpectrumSignalParameters>();
+    spectrumSignalParams->duration = m_interferenceDuration;
+    spectrumSignalParams->txPhy = phy->GetCurrentInterface();
+    spectrumSignalParams->txAntenna = phy->GetAntenna();
+    spectrumSignalParams->psd = psd;
+
+    phy->StartRx(spectrumSignalParams, phy->GetCurrentInterface());
+}
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
  * \brief Txop Test Suite
  */
 class TxopTestSuite : public TestSuite
@@ -1585,6 +2064,10 @@
     : TestSuite("wifi-channel-access-manager", Type::UNIT)
 {
     AddTestCase(new LargestIdlePrimaryChannelTest, TestCase::Duration::QUICK);
+    AddTestCase(new BackoffGenerationTest(BackoffGenerationTest::GEN_BACKOFF_IF_TXOP_NO_TX),
+                TestCase::Duration::QUICK);
+    AddTestCase(new BackoffGenerationTest(BackoffGenerationTest::PROACTIVE_BACKOFF),
+                TestCase::Duration::QUICK);
 }
 
 static ChannelAccessManagerTestSuite g_camTestSuite;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/examples-to-run.py ns-3.43/src/wifi/test/examples-to-run.py
--- ns-3.42/src/wifi/test/examples-to-run.py	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/examples-to-run.py	2024-10-09 16:41:10.136656800 -0700
@@ -2139,27 +2139,27 @@
         "False",
     ),
     (
-        "wifi-test-interference-helper --enableCapture=0 --txPowerA=5 --txPowerB=15 --delay=10 --txModeA=OfdmRate6Mbps --txModeB=OfdmRate6Mbps --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=0",
+        "wifi-test-interference-helper --enableCapture=0 --txPowerA=5 --txPowerB=15 --delay=10us --txModeA=OfdmRate6Mbps --txModeB=OfdmRate6Mbps --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=0",
         "True",
         "True",
     ),
     (
-        "wifi-test-interference-helper --enableCapture=0 --txPowerA=5 --txPowerB=15  --delay=17 --standard=WIFI_PHY_STANDARD_80211ac --preamble=WIFI_PREAMBLE_VHT_SU --txModeA=VhtMcs0 --txModeB=VhtMcs0 --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=0",
+        "wifi-test-interference-helper --enableCapture=0 --txPowerA=5 --txPowerB=15  --delay=17us --standard=WIFI_PHY_STANDARD_80211ac --preamble=WIFI_PREAMBLE_VHT_SU --txModeA=VhtMcs0 --txModeB=VhtMcs0 --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=0",
         "True",
         "True",
     ),
     (
-        "wifi-test-interference-helper --enableCapture=0 --txPowerA=5 --txPowerB=15  --delay=20 --standard=WIFI_PHY_STANDARD_80211ac --preamble=WIFI_PREAMBLE_VHT_SU --txModeA=VhtMcs0 --txModeB=VhtMcs0 --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=0",
+        "wifi-test-interference-helper --enableCapture=0 --txPowerA=5 --txPowerB=15  --delay=20us --standard=WIFI_PHY_STANDARD_80211ac --preamble=WIFI_PREAMBLE_VHT_SU --txModeA=VhtMcs0 --txModeB=VhtMcs0 --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=0",
         "True",
         "True",
     ),
     (
-        "wifi-test-interference-helper --enableCapture=0 --txPowerA=5 --txPowerB=15  --delay=27 --standard=WIFI_PHY_STANDARD_80211ac --preamble=WIFI_PREAMBLE_VHT_SU --txModeA=VhtMcs0 --txModeB=VhtMcs0 --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=0",
+        "wifi-test-interference-helper --enableCapture=0 --txPowerA=5 --txPowerB=15  --delay=27us --standard=WIFI_PHY_STANDARD_80211ac --preamble=WIFI_PREAMBLE_VHT_SU --txModeA=VhtMcs0 --txModeB=VhtMcs0 --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=0",
         "True",
         "True",
     ),
     (
-        "wifi-test-interference-helper --enableCapture=1 --txPowerA=5 --txPowerB=15 --delay=10 --txModeA=OfdmRate6Mbps --txModeB=OfdmRate6Mbps --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=1",
+        "wifi-test-interference-helper --enableCapture=1 --txPowerA=5 --txPowerB=15 --delay=10us --txModeA=OfdmRate6Mbps --txModeB=OfdmRate6Mbps --checkResults=1 --expectRxASuccessful=0 --expectRxBSuccessful=1",
         "True",
         "False",
     ),
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/inter-bss-test-suite.cc ns-3.43/src/wifi/test/inter-bss-test-suite.cc
--- ns-3.42/src/wifi/test/inter-bss-test-suite.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/inter-bss-test-suite.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Sébastien Deronne <sebastien.deronne@gmail.com>
  *          Scott Carpenter <scarpenter44@windstream.net>
@@ -98,24 +87,24 @@
 
     /**
      * Allocate the node positions
-     * \param d1 distance d1 (in meters)
-     * \param d2 distance d2 (in meters)
-     * \param d3 distance d3 (in meters)
-     * \param d4 distance d4 (in meters)
-     * \param d5 distance d5 (in meters)
+     * \param d1 distance d1
+     * \param d2 distance d2
+     * \param d3 distance d3
+     * \param d4 distance d4
+     * \param d5 distance d5
      * \return the node positions
      */
-    Ptr<ListPositionAllocator> AllocatePositions(double d1,
-                                                 double d2,
-                                                 double d3,
-                                                 double d4,
-                                                 double d5);
+    Ptr<ListPositionAllocator> AllocatePositions(meter_u d1,
+                                                 meter_u d2,
+                                                 meter_u d3,
+                                                 meter_u d4,
+                                                 meter_u d5);
 
     /**
-     * Set the expected transmit power in dBm
-     * \param txPowerDbm the transmit power in dBm
+     * Set the expected transmit power
+     * \param txPower the transmit power
      */
-    void SetExpectedTxPower(double txPowerDbm);
+    void SetExpectedTxPower(dBm_u txPower);
 
     /**
      * Setup the simulation
@@ -202,10 +191,10 @@
     NetDeviceContainer m_staDevices; ///< STA devices
     NetDeviceContainer m_apDevices;  ///< AP devices
 
-    double m_txPowerDbm;         ///< configured transmit power in dBm
-    double m_obssPdLevelDbm;     ///< OBSS-PD level in dBm
-    double m_obssRxPowerDbm;     ///< forced RX power in dBm for OBSS
-    double m_expectedTxPowerDbm; ///< expected transmit power in dBm
+    dBm_u m_txPower;         ///< configured transmit power
+    dBm_u m_obssPdLevel;     ///< OBSS-PD level
+    dBm_u m_obssRxPower;     ///< forced RX power for OBSS
+    dBm_u m_expectedTxPower; ///< expected transmit power
 
     uint8_t m_bssColor1; ///< color for BSS 1
     uint8_t m_bssColor2; ///< color for BSS 2
@@ -227,10 +216,10 @@
       m_payloadSize1(1000),
       m_payloadSize2(1500),
       m_payloadSize3(2000),
-      m_txPowerDbm(15),
-      m_obssPdLevelDbm(-72),
-      m_obssRxPowerDbm(-82),
-      m_expectedTxPowerDbm(15),
+      m_txPower(15),
+      m_obssPdLevel(-72),
+      m_obssRxPower(-82),
+      m_expectedTxPower(15),
       m_bssColor1(1),
       m_bssColor2(2),
       m_bssColor3(3),
@@ -244,11 +233,11 @@
 }
 
 Ptr<ListPositionAllocator>
-TestInterBssConstantObssPdAlgo::AllocatePositions(double d1,
-                                                  double d2,
-                                                  double d3,
-                                                  double d4,
-                                                  double d5)
+TestInterBssConstantObssPdAlgo::AllocatePositions(meter_u d1,
+                                                  meter_u d2,
+                                                  meter_u d3,
+                                                  meter_u d4,
+                                                  meter_u d5)
 {
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
     positionAlloc->Add(Vector(0.0, 0.0, 0.0));                    // AP1
@@ -271,7 +260,7 @@
     Ptr<WifiNetDevice> sta_device3 = DynamicCast<WifiNetDevice>(m_staDevices.Get(2));
 
     bool expectFilter = (m_bssColor1 != 0) && (m_bssColor2 != 0);
-    bool expectPhyReset = expectFilter && (m_obssPdLevelDbm >= m_obssRxPowerDbm);
+    bool expectPhyReset = expectFilter && (m_obssPdLevel >= m_obssRxPower);
     std::vector<WifiPhyRxfailureReason> dropReasons;
     WifiPhyState stateDuringPayloadNeighboringBss =
         expectFilter ? WifiPhyState::CCA_BUSY : WifiPhyState::RX;
@@ -435,7 +424,7 @@
     {
         // 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));
+        const auto expectedTxPower = std::min(m_txPower, 21 - (m_obssPdLevel + 82));
         Simulator::Schedule(Seconds(2.1) + MicroSeconds(41),
                             &TestInterBssConstantObssPdAlgo::SetExpectedTxPower,
                             this,
@@ -484,7 +473,7 @@
     Simulator::Schedule(Seconds(2.2),
                         &TestInterBssConstantObssPdAlgo::SetExpectedTxPower,
                         this,
-                        m_txPowerDbm);
+                        m_txPower);
     Simulator::Schedule(Seconds(2.2),
                         &TestInterBssConstantObssPdAlgo::SendOnePacket,
                         this,
@@ -503,7 +492,7 @@
     {
         // 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));
+        const auto expectedTxPower = std::min(m_txPower, 21 - (m_obssPdLevel + 82));
         Simulator::Schedule(Seconds(2.2) + MicroSeconds(89),
                             &TestInterBssConstantObssPdAlgo::SetExpectedTxPower,
                             this,
@@ -552,7 +541,7 @@
     Simulator::Schedule(Seconds(2.3),
                         &TestInterBssConstantObssPdAlgo::SetExpectedTxPower,
                         this,
-                        m_txPowerDbm);
+                        m_txPower);
     // AP2 sends another packet 0.1s later. Power restriction should not be applied.
     Simulator::Schedule(Seconds(2.3),
                         &TestInterBssConstantObssPdAlgo::SendOnePacket,
@@ -606,7 +595,7 @@
     {
         // 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));
+        const auto expectedTxPower = std::min(m_txPower, 21 - (m_obssPdLevel + 82));
         Simulator::Schedule(Seconds(2.5) + MicroSeconds(338),
                             &TestInterBssConstantObssPdAlgo::SetExpectedTxPower,
                             this,
@@ -628,7 +617,7 @@
     m_numAp1PacketsReceived = 0;
     m_numAp2PacketsReceived = 0;
     ClearDropReasons();
-    m_expectedTxPowerDbm = m_txPowerDbm;
+    m_expectedTxPower = m_txPower;
 }
 
 void
@@ -679,28 +668,28 @@
     if ((idx == 0) && ((pktSize == m_payloadSize1) || (pktSize == (m_payloadSize1 / 10))))
     {
         m_numSta1PacketsSent++;
-        NS_TEST_EXPECT_MSG_EQ(TestDoubleIsEqual(WToDbm(txPowerW), m_expectedTxPowerDbm, 1e-12),
+        NS_TEST_EXPECT_MSG_EQ(TestDoubleIsEqual(WToDbm(txPowerW), m_expectedTxPower, 1e-12),
                               true,
                               "Tx power is not correct!");
     }
     else if ((idx == 1) && ((pktSize == m_payloadSize2) || (pktSize == (m_payloadSize2 / 10))))
     {
         m_numSta2PacketsSent++;
-        NS_TEST_EXPECT_MSG_EQ(TestDoubleIsEqual(WToDbm(txPowerW), m_expectedTxPowerDbm, 1e-12),
+        NS_TEST_EXPECT_MSG_EQ(TestDoubleIsEqual(WToDbm(txPowerW), m_expectedTxPower, 1e-12),
                               true,
                               "Tx power is not correct!");
     }
     else if ((idx == 3) && ((pktSize == m_payloadSize1) || (pktSize == (m_payloadSize1 / 10))))
     {
         m_numAp1PacketsSent++;
-        NS_TEST_EXPECT_MSG_EQ(TestDoubleIsEqual(WToDbm(txPowerW), m_expectedTxPowerDbm, 1e-12),
+        NS_TEST_EXPECT_MSG_EQ(TestDoubleIsEqual(WToDbm(txPowerW), m_expectedTxPower, 1e-12),
                               true,
                               "Tx power is not correct!");
     }
     else if ((idx == 4) && ((pktSize == m_payloadSize2) || (pktSize == (m_payloadSize2 / 10))))
     {
         m_numAp2PacketsSent++;
-        NS_TEST_EXPECT_MSG_EQ(TestDoubleIsEqual(WToDbm(txPowerW), m_expectedTxPowerDbm, 1e-12),
+        NS_TEST_EXPECT_MSG_EQ(TestDoubleIsEqual(WToDbm(txPowerW), m_expectedTxPower, 1e-12),
                               true,
                               "Tx power is not correct!");
     }
@@ -764,9 +753,9 @@
 }
 
 void
-TestInterBssConstantObssPdAlgo::SetExpectedTxPower(double txPowerDbm)
+TestInterBssConstantObssPdAlgo::SetExpectedTxPower(dBm_u txPower)
 {
-    m_expectedTxPowerDbm = txPowerDbm;
+    m_expectedTxPower = txPower;
 }
 
 void
@@ -843,8 +832,8 @@
     wifiApNodes.Create(3);
 
     Ptr<MatrixPropagationLossModel> lossModel = CreateObject<MatrixPropagationLossModel>();
-    lossModel->SetDefaultLoss(
-        m_txPowerDbm - m_obssRxPowerDbm); // Force received RSSI to be equal to m_obssRxPowerDbm
+    lossModel->SetDefaultLoss(m_txPower -
+                              m_obssRxPower); // Force received RSSI to be equal to m_obssRxPower
 
     SpectrumWifiPhyHelper phy;
     phy.DisablePreambleDetectionModel();
@@ -853,8 +842,8 @@
     channel->SetPropagationDelayModel(CreateObject<ConstantSpeedPropagationDelayModel>());
     channel->AddPropagationLossModel(lossModel);
     phy.SetChannel(channel);
-    phy.Set("TxPowerStart", DoubleValue(m_txPowerDbm));
-    phy.Set("TxPowerEnd", DoubleValue(m_txPowerDbm));
+    phy.Set("TxPowerStart", DoubleValue(m_txPower));
+    phy.Set("TxPowerEnd", DoubleValue(m_txPower));
     phy.Set("ChannelSettings", StringValue("{36, 20, BAND_5GHZ, 0}"));
 
     WifiHelper wifi;
@@ -867,7 +856,7 @@
 
     wifi.SetObssPdAlgorithm("ns3::ConstantObssPdAlgorithm",
                             "ObssPdLevel",
-                            DoubleValue(m_obssPdLevelDbm));
+                            DoubleValue(m_obssPdLevel));
 
     WifiMacHelper mac;
     Ssid ssid = Ssid("ns-3-ssid");
@@ -875,13 +864,13 @@
     m_staDevices = wifi.Install(phy, mac, wifiStaNodes);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(m_staDevices, streamNumber);
+    WifiHelper::AssignStreams(m_staDevices, streamNumber);
 
     mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid));
     m_apDevices = wifi.Install(phy, mac, wifiApNodes);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(m_apDevices, streamNumber);
+    WifiHelper::AssignStreams(m_apDevices, streamNumber);
 
     for (uint32_t i = 0; i < m_apDevices.GetN(); i++)
     {
@@ -915,13 +904,16 @@
 
     lossModel->SetLoss(wifiStaNodes.Get(0)->GetObject<MobilityModel>(),
                        wifiApNodes.Get(0)->GetObject<MobilityModel>(),
-                       m_txPowerDbm + 30); // Low attenuation for IBSS transmissions
+                       m_txPower +
+                           static_cast<dB_u>(30.0)); // Low attenuation for IBSS transmissions
     lossModel->SetLoss(wifiStaNodes.Get(1)->GetObject<MobilityModel>(),
                        wifiApNodes.Get(1)->GetObject<MobilityModel>(),
-                       m_txPowerDbm + 30); // Low attenuation for IBSS transmissions
+                       m_txPower +
+                           static_cast<dB_u>(30.0)); // Low attenuation for IBSS transmissions
     lossModel->SetLoss(wifiStaNodes.Get(2)->GetObject<MobilityModel>(),
                        wifiApNodes.Get(2)->GetObject<MobilityModel>(),
-                       m_txPowerDbm + 30); // Low attenuation for IBSS transmissions
+                       m_txPower +
+                           static_cast<dB_u>(30.0)); // Low attenuation for IBSS transmissions
 
     Config::Connect("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/PhyTxBegin",
                     MakeCallback(&TestInterBssConstantObssPdAlgo::NotifyPhyTxBegin, this));
@@ -941,42 +933,42 @@
 void
 TestInterBssConstantObssPdAlgo::DoRun()
 {
-    // Test case 1: CCA CS Threshold = m_obssRxPowerDbm < m_obssPdLevelDbm
-    m_obssPdLevelDbm = -72;
-    m_obssRxPowerDbm = -82;
+    // Test case 1: CCA CS Threshold = m_obssRxPower < m_obssPdLevel
+    m_obssPdLevel = -72;
+    m_obssRxPower = -82;
     m_bssColor1 = 1;
     m_bssColor2 = 2;
     m_bssColor3 = 3;
     RunOne();
 
-    // Test case 2: CCA CS Threshold < m_obssPdLevelDbm < m_obssRxPowerDbm
-    m_obssPdLevelDbm = -72;
-    m_obssRxPowerDbm = -62;
+    // Test case 2: CCA CS Threshold < m_obssPdLevel < m_obssRxPower
+    m_obssPdLevel = -72;
+    m_obssRxPower = -62;
     m_bssColor1 = 1;
     m_bssColor2 = 2;
     m_bssColor3 = 3;
     RunOne();
 
-    // Test case 3: CCA CS Threshold < m_obssPdLevelDbm = m_obssRxPowerDbm
-    m_obssPdLevelDbm = -72;
-    m_obssRxPowerDbm = -72;
+    // Test case 3: CCA CS Threshold < m_obssPdLevel = m_obssRxPower
+    m_obssPdLevel = -72;
+    m_obssRxPower = -72;
     m_bssColor1 = 1;
     m_bssColor2 = 2;
     m_bssColor3 = 3;
     RunOne();
 
-    // Test case 4: CCA CS Threshold = m_obssRxPowerDbm < m_obssPdLevelDbm with BSS color 2 and 3
+    // Test case 4: CCA CS Threshold = m_obssRxPower < m_obssPdLevel with BSS color 2 and 3
     // set to 0
-    m_obssPdLevelDbm = -72;
-    m_obssRxPowerDbm = -82;
+    m_obssPdLevel = -72;
+    m_obssRxPower = -82;
     m_bssColor1 = 1;
     m_bssColor2 = 0;
     m_bssColor3 = 0;
     RunOne();
 
-    // Test case 5: CCA CS Threshold = m_obssRxPowerDbm < m_obssPdLevelDbm with BSS color 1 set to 0
-    m_obssPdLevelDbm = -72;
-    m_obssRxPowerDbm = -82;
+    // Test case 5: CCA CS Threshold = m_obssRxPower < m_obssPdLevel with BSS color 1 set to 0
+    m_obssPdLevel = -72;
+    m_obssRxPower = -82;
     m_bssColor1 = 0;
     m_bssColor2 = 2;
     m_bssColor3 = 3;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/power-rate-adaptation-test.cc ns-3.43/src/wifi/test/power-rate-adaptation-test.cc
--- ns-3.42/src/wifi/test/power-rate-adaptation-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/power-rate-adaptation-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2014 Universidad de la República - Uruguay
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Matías Richart <mrichart@fing.edu.uy>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/power-save-test.cc ns-3.43/src/wifi/test/power-save-test.cc
--- ns-3.42/src/wifi/test/power-save-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/power-save-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Davide Magrin <davide@magr.in>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/spectrum-wifi-phy-test.cc ns-3.43/src/wifi/test/spectrum-wifi-phy-test.cc
--- ns-3.42/src/wifi/test/spectrum-wifi-phy-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/spectrum-wifi-phy-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2015 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/boolean.h"
@@ -23,12 +12,14 @@
 #include "ns3/mobility-helper.h"
 #include "ns3/multi-model-spectrum-channel.h"
 #include "ns3/nist-error-rate-model.h"
+#include "ns3/non-communicating-net-device.h"
 #include "ns3/ofdm-ppdu.h"
 #include "ns3/pointer.h"
 #include "ns3/spectrum-wifi-helper.h"
 #include "ns3/spectrum-wifi-phy.h"
 #include "ns3/string.h"
 #include "ns3/test.h"
+#include "ns3/waveform-generator.h"
 #include "ns3/wifi-mac-header.h"
 #include "ns3/wifi-net-device.h"
 #include "ns3/wifi-phy-listener.h"
@@ -48,9 +39,8 @@
 NS_LOG_COMPONENT_DEFINE("SpectrumWifiPhyTest");
 
 static const uint8_t CHANNEL_NUMBER = 36;
-static const uint16_t CHANNEL_WIDTH = 20; // MHz
-static const uint16_t GUARD_WIDTH =
-    CHANNEL_WIDTH; // MHz (expanded to channel width to model spectrum mask)
+static const MHz_u CHANNEL_WIDTH = 20;
+static const MHz_u GUARD_WIDTH = CHANNEL_WIDTH; // expanded to channel width to model spectrum mask
 
 /**
  * Extended SpectrumWifiPhy class for the purpose of the tests.
@@ -91,6 +81,25 @@
             return rxing.second;
         });
     }
+
+    /**
+     * Indicate whether a given band is tracked by the interference helper
+     *
+     * \param startStopFreqs the start and stop frequencies per segment of the band
+     *
+     * \return true if the specified band is tracked by the interference helper, false otherwise
+     */
+    bool IsBandTracked(const std::vector<WifiSpectrumBandFrequencies>& startStopFreqs) const
+    {
+        for (const auto& [band, nis] : m_niChanges)
+        {
+            if (band.frequencies == startStopFreqs)
+            {
+                return true;
+            }
+        }
+        return false;
+    }
 };
 
 NS_OBJECT_ENSURE_REGISTERED(ExtInterferenceHelper);
@@ -119,17 +128,17 @@
     Ptr<SpectrumWifiPhy> m_phy; ///< Phy
     /**
      * Make signal function
-     * \param txPowerWatts the transmit power in watts
+     * \param txPower the transmit power
      * \param channel the operating channel of the PHY used for the transmission
      * \returns Ptr<SpectrumSignalParameters>
      */
-    Ptr<SpectrumSignalParameters> MakeSignal(double txPowerWatts,
+    Ptr<SpectrumSignalParameters> MakeSignal(Watt_u txPower,
                                              const WifiPhyOperatingChannel& channel);
     /**
      * Send signal function
-     * \param txPowerWatts the transmit power in watts
+     * \param txPower the transmit power
      */
-    void SendSignal(double txPowerWatts);
+    void SendSignal(Watt_u txPower);
     /**
      * Spectrum wifi receive success function
      * \param psdu the PSDU
@@ -168,35 +177,36 @@
 
 // Make a Wi-Fi signal to inject directly to the StartRx() method
 Ptr<SpectrumSignalParameters>
-SpectrumWifiPhyBasicTest::MakeSignal(double txPowerWatts, const WifiPhyOperatingChannel& channel)
+SpectrumWifiPhyBasicTest::MakeSignal(Watt_u txPower, const WifiPhyOperatingChannel& channel)
 {
-    WifiTxVector txVector = WifiTxVector(OfdmPhy::GetOfdmRate6Mbps(),
-                                         0,
-                                         WIFI_PREAMBLE_LONG,
-                                         800,
-                                         1,
-                                         1,
-                                         0,
-                                         CHANNEL_WIDTH,
-                                         false);
+    WifiTxVector txVector{OfdmPhy::GetOfdmRate6Mbps(),
+                          0,
+                          WIFI_PREAMBLE_LONG,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          CHANNEL_WIDTH,
+                          false};
 
-    Ptr<Packet> pkt = Create<Packet>(1000);
+    auto pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
 
     hdr.SetType(WIFI_MAC_QOSDATA);
     hdr.SetQosTid(0);
 
-    Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
-    Time txDuration = m_phy->CalculateTxDuration(psdu->GetSize(), txVector, m_phy->GetPhyBand());
+    auto psdu = Create<WifiPsdu>(pkt, hdr);
+    const auto txDuration =
+        m_phy->CalculateTxDuration(psdu->GetSize(), txVector, m_phy->GetPhyBand());
 
-    Ptr<WifiPpdu> ppdu = Create<OfdmPpdu>(psdu, txVector, channel, m_uid++);
+    auto ppdu = Create<OfdmPpdu>(psdu, txVector, channel, m_uid++);
 
-    Ptr<SpectrumValue> txPowerSpectrum = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(
+    auto txPowerSpectrum = WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(
         channel.GetPrimaryChannelCenterFrequency(CHANNEL_WIDTH),
         CHANNEL_WIDTH,
-        txPowerWatts,
+        txPower,
         GUARD_WIDTH);
-    Ptr<WifiSpectrumSignalParameters> txParams = Create<WifiSpectrumSignalParameters>();
+    auto txParams = Create<WifiSpectrumSignalParameters>();
     txParams->psd = txPowerSpectrum;
     txParams->txPhy = nullptr;
     txParams->duration = txDuration;
@@ -207,9 +217,9 @@
 
 // Make a Wi-Fi signal to inject directly to the StartRx() method
 void
-SpectrumWifiPhyBasicTest::SendSignal(double txPowerWatts)
+SpectrumWifiPhyBasicTest::SendSignal(Watt_u txPower)
 {
-    m_phy->StartRx(MakeSignal(txPowerWatts, m_phy->GetOperatingChannel()), nullptr);
+    m_phy->StartRx(MakeSignal(txPower, m_phy->GetOperatingChannel()), nullptr);
 }
 
 void
@@ -238,13 +248,13 @@
 void
 SpectrumWifiPhyBasicTest::DoSetup()
 {
-    Ptr<MultiModelSpectrumChannel> spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
-    Ptr<Node> node = CreateObject<Node>();
-    Ptr<WifiNetDevice> dev = CreateObject<WifiNetDevice>();
+    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+    auto node = CreateObject<Node>();
+    auto dev = CreateObject<WifiNetDevice>();
     m_phy = CreateObject<SpectrumWifiPhy>();
-    Ptr<InterferenceHelper> interferenceHelper = CreateObject<InterferenceHelper>();
+    auto interferenceHelper = CreateObject<InterferenceHelper>();
     m_phy->SetInterferenceHelper(interferenceHelper);
-    Ptr<ErrorRateModel> error = CreateObject<NistErrorRateModel>();
+    auto error = CreateObject<NistErrorRateModel>();
     m_phy->SetErrorRateModel(error);
     m_phy->SetDevice(dev);
     m_phy->AddChannel(spectrumChannel);
@@ -269,21 +279,21 @@
 void
 SpectrumWifiPhyBasicTest::DoRun()
 {
-    double txPowerWatts = 0.010;
+    Watt_u txPower{0.01};
     // Send packets spaced 1 second apart; all should be received
-    Simulator::Schedule(Seconds(1), &SpectrumWifiPhyBasicTest::SendSignal, this, txPowerWatts);
-    Simulator::Schedule(Seconds(2), &SpectrumWifiPhyBasicTest::SendSignal, this, txPowerWatts);
-    Simulator::Schedule(Seconds(3), &SpectrumWifiPhyBasicTest::SendSignal, this, txPowerWatts);
+    Simulator::Schedule(Seconds(1), &SpectrumWifiPhyBasicTest::SendSignal, this, txPower);
+    Simulator::Schedule(Seconds(2), &SpectrumWifiPhyBasicTest::SendSignal, this, txPower);
+    Simulator::Schedule(Seconds(3), &SpectrumWifiPhyBasicTest::SendSignal, this, txPower);
     // Send packets spaced 1 microsecond second apart; none should be received (PHY header reception
     // failure)
     Simulator::Schedule(MicroSeconds(4000000),
                         &SpectrumWifiPhyBasicTest::SendSignal,
                         this,
-                        txPowerWatts);
+                        txPower);
     Simulator::Schedule(MicroSeconds(4000001),
                         &SpectrumWifiPhyBasicTest::SendSignal,
                         this,
-                        txPowerWatts);
+                        txPower);
     Simulator::Run();
     Simulator::Destroy();
 
@@ -323,9 +333,9 @@
         ++m_notifyRxEndError;
     }
 
-    void NotifyTxStart(Time duration, double txPowerDbm) override
+    void NotifyTxStart(Time duration, dBm_u txPower) override
     {
-        NS_LOG_FUNCTION(this << duration << txPowerDbm);
+        NS_LOG_FUNCTION(this << duration << txPower);
     }
 
     void NotifyCcaBusyStart(Time duration,
@@ -382,8 +392,8 @@
     uint32_t m_notifyRxEndOk{0};           ///< notify receive end OK
     uint32_t m_notifyRxEndError{0};        ///< notify receive end error
     uint32_t m_notifyMaybeCcaBusyStart{0}; ///< notify maybe CCA busy start
-    Time m_ccaBusyStart{0};                ///< CCA_BUSY start time
-    Time m_ccaBusyEnd{0};                  ///< CCA_BUSY end time
+    Time m_ccaBusyStart{};                 ///< CCA_BUSY start time
+    Time m_ccaBusyEnd{};                   ///< CCA_BUSY end time
 };
 
 /**
@@ -396,7 +406,6 @@
 {
   public:
     SpectrumWifiPhyListenerTest();
-    ~SpectrumWifiPhyListenerTest() override;
 
   private:
     void DoSetup() override;
@@ -409,10 +418,6 @@
 {
 }
 
-SpectrumWifiPhyListenerTest::~SpectrumWifiPhyListenerTest()
-{
-}
-
 void
 SpectrumWifiPhyListenerTest::DoSetup()
 {
@@ -424,8 +429,8 @@
 void
 SpectrumWifiPhyListenerTest::DoRun()
 {
-    double txPowerWatts = 0.010;
-    Simulator::Schedule(Seconds(1), &SpectrumWifiPhyListenerTest::SendSignal, this, txPowerWatts);
+    Watt_u txPower{0.01};
+    Simulator::Schedule(Seconds(1), &SpectrumWifiPhyListenerTest::SendSignal, this, txPower);
     Simulator::Run();
 
     NS_TEST_ASSERT_MSG_EQ(m_count, 1, "Didn't receive right number of packets");
@@ -484,10 +489,8 @@
     Ptr<ExtSpectrumWifiPhy> m_txPhy; ///< TX PHY
     Ptr<ExtSpectrumWifiPhy> m_rxPhy; ///< RX PHY
 
-    uint16_t m_txChannelWidth; ///< TX channel width (MHz)
-    uint16_t m_rxChannelWidth; ///< RX channel width (MHz)
-
-    std::set<WifiSpectrumBandIndices> m_ruBands; ///< spectrum bands associated to all the RUs
+    MHz_u m_txChannelWidth; ///< TX channel width
+    MHz_u m_rxChannelWidth; ///< RX channel width
 };
 
 SpectrumWifiPhyFilterTest::SpectrumWifiPhyFilterTest()
@@ -505,23 +508,23 @@
 void
 SpectrumWifiPhyFilterTest::SendPpdu()
 {
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_SU,
-                                         800,
-                                         1,
-                                         1,
-                                         0,
-                                         m_txChannelWidth,
-                                         false,
-                                         false);
-    Ptr<Packet> pkt = Create<Packet>(1000);
+    WifiTxVector txVector{HePhy::GetHeMcs0(),
+                          0,
+                          WIFI_PREAMBLE_HE_SU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          m_txChannelWidth,
+                          false,
+                          false};
+    auto pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
     hdr.SetQosTid(0);
     hdr.SetAddr1(Mac48Address("00:00:00:00:00:01"));
     hdr.SetSequenceNumber(1);
-    Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
+    auto psdu = Create<WifiPsdu>(pkt, hdr);
     m_txPhy->Send(WifiConstPsduMap({std::make_pair(SU_STA_ID, psdu)}), txVector);
 }
 
@@ -534,24 +537,29 @@
 void
 SpectrumWifiPhyFilterTest::RxCallback(Ptr<const Packet> p, RxPowerWattPerChannelBand rxPowersW)
 {
-    for (const auto& pair : rxPowersW)
+    for (const auto& [band, powerW] : rxPowersW)
     {
-        NS_LOG_INFO("band: (" << pair.first << ") -> powerW=" << pair.second << " ("
-                              << WToDbm(pair.second) << " dBm)");
+        NS_LOG_INFO(
+            "band: (" << band << ") -> powerW=" << powerW
+                      << (powerW > 0.0 ? " (" + std::to_string(WToDbm(powerW)) + " dBm)" : ""));
     }
 
     size_t numBands = rxPowersW.size();
-    size_t expectedNumBands = std::max(1, (m_rxChannelWidth / 20));
+    auto expectedNumBands = std::max<std::size_t>(1, m_rxChannelWidth / 20);
     expectedNumBands += (m_rxChannelWidth / 40);
     expectedNumBands += (m_rxChannelWidth / 80);
     expectedNumBands += (m_rxChannelWidth / 160);
-    expectedNumBands += m_ruBands.size();
+    expectedNumBands += m_rxPhy
+                            ->GetHeRuBands(m_rxPhy->GetCurrentInterface(),
+                                           m_rxPhy->GetGuardBandwidth(
+                                               m_rxPhy->GetCurrentInterface()->GetChannelWidth()))
+                            .size();
 
     NS_TEST_ASSERT_MSG_EQ(numBands,
                           expectedNumBands,
                           "Total number of bands handled by the receiver is incorrect");
 
-    uint16_t channelWidth = std::min(m_txChannelWidth, m_rxChannelWidth);
+    MHz_u channelWidth = std::min(m_txChannelWidth, m_rxChannelWidth);
     auto band = m_rxPhy->GetBand(channelWidth, 0);
     auto it = rxPowersW.find(band);
     NS_LOG_INFO("powerW total band: " << it->second << " (" << WToDbm(it->second) << " dBm)");
@@ -579,8 +587,9 @@
         it = rxPowersW.find(band);
         NS_LOG_INFO("powerW in primary 20 MHz channel: " << it->second << " (" << WToDbm(it->second)
                                                          << " dBm)");
-        int rxPowerPrimaryChannel20 = static_cast<int>(WToDbm(it->second) + 0.5);
-        int expectedRxPowerPrimaryChannel20 = 16 - static_cast<int>(RatioToDb(channelWidth / 20));
+        const auto rxPowerPrimaryChannel20 = static_cast<int>(WToDbm(it->second) + 0.5);
+        const auto expectedRxPowerPrimaryChannel20 =
+            16 - static_cast<int>(RatioToDb(channelWidth / 20));
         NS_TEST_ASSERT_MSG_EQ(rxPowerPrimaryChannel20,
                               expectedRxPowerPrimaryChannel20,
                               "Received power in the primary 20 MHz band is not correct");
@@ -593,40 +602,39 @@
     // WifiHelper::EnableLogComponents();
     // LogComponentEnable("SpectrumWifiPhyTest", LOG_LEVEL_ALL);
 
-    Ptr<MultiModelSpectrumChannel> spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
-    Ptr<FriisPropagationLossModel> lossModel = CreateObject<FriisPropagationLossModel>();
+    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+    auto lossModel = CreateObject<FriisPropagationLossModel>();
     lossModel->SetFrequency(5.180e9);
     spectrumChannel->AddPropagationLossModel(lossModel);
-    Ptr<ConstantSpeedPropagationDelayModel> delayModel =
-        CreateObject<ConstantSpeedPropagationDelayModel>();
+    auto delayModel = CreateObject<ConstantSpeedPropagationDelayModel>();
     spectrumChannel->SetPropagationDelayModel(delayModel);
 
-    Ptr<Node> txNode = CreateObject<Node>();
-    Ptr<WifiNetDevice> txDev = CreateObject<WifiNetDevice>();
+    auto txNode = CreateObject<Node>();
+    auto txDev = CreateObject<WifiNetDevice>();
     m_txPhy = CreateObject<ExtSpectrumWifiPhy>();
-    Ptr<InterferenceHelper> txInterferenceHelper = CreateObject<InterferenceHelper>();
+    auto txInterferenceHelper = CreateObject<InterferenceHelper>();
     m_txPhy->SetInterferenceHelper(txInterferenceHelper);
-    Ptr<ErrorRateModel> txErrorModel = CreateObject<NistErrorRateModel>();
+    auto txErrorModel = CreateObject<NistErrorRateModel>();
     m_txPhy->SetErrorRateModel(txErrorModel);
     m_txPhy->SetDevice(txDev);
     m_txPhy->AddChannel(spectrumChannel);
     m_txPhy->ConfigureStandard(WIFI_STANDARD_80211ax);
-    Ptr<ConstantPositionMobilityModel> apMobility = CreateObject<ConstantPositionMobilityModel>();
+    auto apMobility = CreateObject<ConstantPositionMobilityModel>();
     m_txPhy->SetMobility(apMobility);
     txDev->SetPhy(m_txPhy);
     txNode->AggregateObject(apMobility);
     txNode->AddDevice(txDev);
 
-    Ptr<Node> rxNode = CreateObject<Node>();
-    Ptr<WifiNetDevice> rxDev = CreateObject<WifiNetDevice>();
+    auto rxNode = CreateObject<Node>();
+    auto rxDev = CreateObject<WifiNetDevice>();
     m_rxPhy = CreateObject<ExtSpectrumWifiPhy>();
-    Ptr<InterferenceHelper> rxInterferenceHelper = CreateObject<InterferenceHelper>();
+    auto rxInterferenceHelper = CreateObject<InterferenceHelper>();
     m_rxPhy->SetInterferenceHelper(rxInterferenceHelper);
-    Ptr<ErrorRateModel> rxErrorModel = CreateObject<NistErrorRateModel>();
+    auto rxErrorModel = CreateObject<NistErrorRateModel>();
     m_rxPhy->SetErrorRateModel(rxErrorModel);
     m_rxPhy->AddChannel(spectrumChannel);
     m_rxPhy->ConfigureStandard(WIFI_STANDARD_80211ax);
-    Ptr<ConstantPositionMobilityModel> sta1Mobility = CreateObject<ConstantPositionMobilityModel>();
+    auto sta1Mobility = CreateObject<ConstantPositionMobilityModel>();
     m_rxPhy->SetMobility(sta1Mobility);
     rxDev->SetPhy(m_rxPhy);
     rxNode->AggregateObject(sta1Mobility);
@@ -647,8 +655,8 @@
 void
 SpectrumWifiPhyFilterTest::RunOne()
 {
-    uint16_t txFrequency;
-    switch (m_txChannelWidth)
+    MHz_u txFrequency;
+    switch (static_cast<uint16_t>(m_txChannelWidth))
     {
     case 20:
     default:
@@ -664,16 +672,17 @@
         txFrequency = 5250;
         break;
     }
-    auto txChannelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                        txFrequency,
-                                                                        m_txChannelWidth,
-                                                                        WIFI_STANDARD_80211ax,
-                                                                        WIFI_PHY_BAND_5GHZ));
+    auto txChannelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                           txFrequency,
+                                                           m_txChannelWidth,
+                                                           WIFI_STANDARD_80211ax,
+                                                           WIFI_PHY_BAND_5GHZ)
+                            ->number;
     m_txPhy->SetOperatingChannel(
         WifiPhy::ChannelTuple{txChannelNum, m_txChannelWidth, WIFI_PHY_BAND_5GHZ, 0});
 
-    uint16_t rxFrequency;
-    switch (m_rxChannelWidth)
+    MHz_u rxFrequency;
+    switch (static_cast<uint16_t>(m_rxChannelWidth))
     {
     case 20:
     default:
@@ -689,41 +698,15 @@
         rxFrequency = 5250;
         break;
     }
-    auto rxChannelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                        rxFrequency,
-                                                                        m_rxChannelWidth,
-                                                                        WIFI_STANDARD_80211ax,
-                                                                        WIFI_PHY_BAND_5GHZ));
+    auto rxChannelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                           rxFrequency,
+                                                           m_rxChannelWidth,
+                                                           WIFI_STANDARD_80211ax,
+                                                           WIFI_PHY_BAND_5GHZ)
+                            ->number;
     m_rxPhy->SetOperatingChannel(
         WifiPhy::ChannelTuple{rxChannelNum, m_rxChannelWidth, WIFI_PHY_BAND_5GHZ, 0});
 
-    m_ruBands.clear();
-    for (uint16_t bw = 160; bw >= 20; bw = bw / 2)
-    {
-        for (uint16_t i = 0; i < (m_rxChannelWidth / bw); ++i)
-        {
-            for (unsigned int type = 0; type < 7; type++)
-            {
-                auto ruType = static_cast<HeRu::RuType>(type);
-                for (std::size_t index = 1; index <= HeRu::GetNRus(bw, ruType); index++)
-                {
-                    HeRu::SubcarrierGroup subcarrierGroup =
-                        HeRu::GetSubcarrierGroup(bw, ruType, index);
-                    HeRu::SubcarrierRange subcarrierRange =
-                        std::make_pair(subcarrierGroup.front().first,
-                                       subcarrierGroup.back().second);
-                    const auto band =
-                        HePhy::ConvertHeRuSubcarriers(bw,
-                                                      m_rxPhy->GetGuardBandwidth(m_rxChannelWidth),
-                                                      m_rxPhy->GetSubcarrierSpacing(),
-                                                      subcarrierRange,
-                                                      i);
-                    m_ruBands.insert(band);
-                }
-            }
-        }
-    }
-
     Simulator::Schedule(Seconds(1), &SpectrumWifiPhyFilterTest::SendPpdu, this);
 
     Simulator::Run();
@@ -803,6 +786,799 @@
  * \ingroup wifi-test
  * \ingroup tests
  *
+ * \brief Spectrum Wifi Phy Bands Calculations Test
+ *
+ * This test verifies SpectrumWifiPhy::GetBand produces the expected results, for both contiguous
+ * (160 MHz) and non-contiguous (80+80MHz) operating channel
+ */
+class SpectrumWifiPhyGetBandTest : public TestCase
+{
+  public:
+    SpectrumWifiPhyGetBandTest();
+
+  private:
+    void DoSetup() override;
+    void DoTeardown() override;
+    void DoRun() override;
+
+    /**
+     * Run one function
+     * \param channelNumberPerSegment the channel number for each segment of the operating channel
+     * \param bandWidth the width of the band to test
+     * \param bandIndex the index of the band to test
+     * \param expectedIndices the expected start and stop indices returned by
+     * SpectrumWifiPhy::GetBand \param expectedFrequencies the expected start and stop frequencies
+     * returned by SpectrumWifiPhy::GetBand
+     */
+    void RunOne(const std::vector<uint8_t>& channelNumberPerSegment,
+                MHz_u bandWidth,
+                uint8_t bandIndex,
+                const std::vector<WifiSpectrumBandIndices>& expectedIndices,
+                const std::vector<WifiSpectrumBandFrequencies>& expectedFrequencies);
+
+    Ptr<SpectrumWifiPhy> m_phy; ///< PHY
+};
+
+SpectrumWifiPhyGetBandTest::SpectrumWifiPhyGetBandTest()
+    : TestCase("SpectrumWifiPhy test bands calculations")
+{
+}
+
+void
+SpectrumWifiPhyGetBandTest::DoSetup()
+{
+    // WifiHelper::EnableLogComponents();
+    // LogComponentEnable("SpectrumWifiPhyTest", LOG_LEVEL_ALL);
+
+    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+    auto lossModel = CreateObject<FriisPropagationLossModel>();
+    lossModel->SetFrequency(5.180e9);
+    spectrumChannel->AddPropagationLossModel(lossModel);
+    auto delayModel = CreateObject<ConstantSpeedPropagationDelayModel>();
+    spectrumChannel->SetPropagationDelayModel(delayModel);
+
+    auto node = CreateObject<Node>();
+    auto dev = CreateObject<WifiNetDevice>();
+    m_phy = CreateObject<SpectrumWifiPhy>();
+    auto interferenceHelper = CreateObject<InterferenceHelper>();
+    m_phy->SetInterferenceHelper(interferenceHelper);
+    auto errorModel = CreateObject<NistErrorRateModel>();
+    m_phy->SetErrorRateModel(errorModel);
+    m_phy->SetDevice(dev);
+    m_phy->AddChannel(spectrumChannel);
+    m_phy->ConfigureStandard(WIFI_STANDARD_80211ax);
+    dev->SetPhy(m_phy);
+    node->AddDevice(dev);
+}
+
+void
+SpectrumWifiPhyGetBandTest::DoTeardown()
+{
+    m_phy->Dispose();
+    m_phy = nullptr;
+}
+
+void
+SpectrumWifiPhyGetBandTest::RunOne(
+    const std::vector<uint8_t>& channelNumberPerSegment,
+    MHz_u bandWidth,
+    uint8_t bandIndex,
+    const std::vector<WifiSpectrumBandIndices>& expectedIndices,
+    const std::vector<WifiSpectrumBandFrequencies>& expectedFrequencies)
+{
+    WifiPhy::ChannelSegments channelSegments;
+    for (auto channelNumber : channelNumberPerSegment)
+    {
+        const auto& channelInfo = WifiPhyOperatingChannel::FindFirst(channelNumber,
+                                                                     0,
+                                                                     0,
+                                                                     WIFI_STANDARD_80211ax,
+                                                                     WIFI_PHY_BAND_5GHZ);
+        channelSegments.emplace_back(channelInfo->number, channelInfo->width, channelInfo->band, 0);
+    }
+    m_phy->SetOperatingChannel(channelSegments);
+
+    const auto& bandInfo = m_phy->GetBand(bandWidth, bandIndex);
+    NS_ASSERT(expectedIndices.size() == expectedFrequencies.size());
+    NS_ASSERT(expectedIndices.size() == bandInfo.indices.size());
+    NS_ASSERT(expectedFrequencies.size() == bandInfo.frequencies.size());
+    for (std::size_t i = 0; i < expectedIndices.size(); ++i)
+    {
+        NS_ASSERT(bandInfo.indices.at(i).first == expectedIndices.at(i).first);
+        NS_TEST_ASSERT_MSG_EQ(bandInfo.indices.at(i).first,
+                              expectedIndices.at(i).first,
+                              "Incorrect start indice for segment " << i);
+        NS_TEST_ASSERT_MSG_EQ(bandInfo.indices.at(i).second,
+                              expectedIndices.at(i).second,
+                              "Incorrect stop indice for segment " << i);
+        NS_TEST_ASSERT_MSG_EQ(bandInfo.frequencies.at(i).first,
+                              expectedFrequencies.at(i).first,
+                              "Incorrect start frequency for segment " << i);
+        NS_TEST_ASSERT_MSG_EQ(bandInfo.frequencies.at(i).second,
+                              expectedFrequencies.at(i).second,
+                              "Incorrect stop frequency for segment " << i);
+    }
+}
+
+void
+SpectrumWifiPhyGetBandTest::DoRun()
+{
+    const uint32_t indicesPer20MhzBand = 256; // based on 802.11ax carrier spacing
+    const MHz_u channelWidth = 160;           // we consider the largest channel width
+    const uint8_t channelNumberContiguous160Mhz =
+        50; // channel number of the first 160 MHz band in 5 GHz band
+    const std::vector<uint8_t> channelNumberPerSegment = {42,
+                                                          106}; // channel numbers used for 80+80MHz
+    // separation between segment at channel number 42 and segment at channel number 106
+    const MHz_u separationWidth = 240;
+    for (bool contiguous160Mhz : {true /* 160 MHz */, false /* 80+80MHz */})
+    {
+        MHz_u guardWidth = contiguous160Mhz ? channelWidth : (channelWidth / 2);
+        uint32_t guardStopIndice = (indicesPer20MhzBand * (guardWidth / 20)) - 1;
+        std::vector<WifiSpectrumBandIndices> previousExpectedIndices{};
+        std::vector<WifiSpectrumBandFrequencies> previousExpectedFrequencies{};
+        for (auto bandWidth : {20, 40, 80, 160})
+        {
+            const uint32_t expectedStartIndice = guardStopIndice + 1;
+            const uint32_t expectedStopIndice =
+                expectedStartIndice + (indicesPer20MhzBand * (bandWidth / 20)) - 1;
+            std::vector<WifiSpectrumBandIndices> expectedIndices{
+                {expectedStartIndice, expectedStopIndice}};
+            const Hz_u expectedStartFrequency = 5170 * 1e6;
+            const Hz_u expectedStopFrequency = (5170 + bandWidth) * 1e6;
+            std::vector<WifiSpectrumBandFrequencies> expectedFrequencies{
+                {expectedStartFrequency, expectedStopFrequency}};
+            const std::size_t numBands = (channelWidth / bandWidth);
+            for (std::size_t i = 0; i < numBands; ++i)
+            {
+                if ((bandWidth != channelWidth) && (i >= (numBands / 2)))
+                {
+                    // skip DC
+                    expectedIndices.at(0).first++;
+                }
+                if ((bandWidth == channelWidth) && !contiguous160Mhz)
+                {
+                    // For contiguous 160 MHz, band is made of the two 80 MHz segments (previous run
+                    // in the loop)
+                    expectedIndices = previousExpectedIndices;
+                    expectedFrequencies = previousExpectedFrequencies;
+                }
+                else if ((i == (numBands / 2)) && !contiguous160Mhz)
+                {
+                    expectedIndices.at(0).first += (indicesPer20MhzBand * (separationWidth / 20));
+                    expectedIndices.at(0).second += (indicesPer20MhzBand * (separationWidth / 20));
+                    expectedFrequencies.at(0).first += (separationWidth * 1e6);
+                    expectedFrequencies.at(0).second += (separationWidth * 1e6);
+                }
+                RunOne(contiguous160Mhz ? std::vector<uint8_t>{channelNumberContiguous160Mhz}
+                                        : channelNumberPerSegment,
+                       bandWidth,
+                       i,
+                       expectedIndices,
+                       expectedFrequencies);
+                if (!contiguous160Mhz && (bandWidth == (channelWidth / 2)))
+                {
+                    previousExpectedIndices.emplace_back(expectedIndices.front());
+                    previousExpectedFrequencies.emplace_back(expectedFrequencies.front());
+                }
+                expectedIndices.at(0).first = expectedIndices.at(0).second + 1;
+                expectedIndices.at(0).second =
+                    expectedIndices.at(0).first + (indicesPer20MhzBand * (bandWidth / 20)) - 1;
+                expectedFrequencies.at(0).first += (bandWidth * 1e6);
+                expectedFrequencies.at(0).second += (bandWidth * 1e6);
+            }
+        }
+    }
+
+    Simulator::Destroy();
+}
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test tracked bands in interference helper upon channel switching
+ *
+ * The test is verifying that the correct bands are tracked by the interference helper upon channel
+ * switching. It focuses on 80 and 160 MHz bands while considering 160 MHz operating channels, for
+ * both contiguous and non-contiguous cases.
+ */
+class SpectrumWifiPhyTrackedBandsTest : public TestCase
+{
+  public:
+    SpectrumWifiPhyTrackedBandsTest();
+
+  private:
+    void DoSetup() override;
+    void DoTeardown() override;
+    void DoRun() override;
+
+    /**
+     * Switch channel function
+     *
+     * \param channelNumberPerSegment the channel number for each segment of the operating channel
+     * to switch to
+     */
+    void SwitchChannel(const std::vector<uint8_t>& channelNumberPerSegment);
+
+    /**
+     * Verify the bands tracked by the interference helper
+     *
+     * \param expectedTrackedBands the bands that are expected to be tracked by the interference
+     * helper
+     * \param expectedUntrackedBands the bands that are expected to be untracked by the
+     * interference helper
+     */
+    void VerifyTrackedBands(
+        const std::vector<std::vector<WifiSpectrumBandFrequencies>>& expectedTrackedBands,
+        const std::vector<std::vector<WifiSpectrumBandFrequencies>>& expectedUntrackedBands);
+
+    /**
+     * Run one function
+     * \param channelNumberPerSegmentBeforeSwitching the channel number for each segment of the
+     * operating channel to switch from \param channelNumberPerSegmentAfterSwitching the channel
+     * number for each segment of the operating channel to switch to \param expectedTrackedBands the
+     * bands that are expected to be tracked by the interference helper \param expectedUntrackedBand
+     * the bands that are expected to be untracked by the interference helper
+     */
+    void RunOne(const std::vector<uint8_t>& channelNumberPerSegmentBeforeSwitching,
+                const std::vector<uint8_t>& channelNumberPerSegmentAfterSwitching,
+                const std::vector<std::vector<WifiSpectrumBandFrequencies>>& expectedTrackedBands,
+                const std::vector<std::vector<WifiSpectrumBandFrequencies>>& expectedUntrackedBand);
+
+    Ptr<ExtSpectrumWifiPhy> m_phy; ///< PHY
+};
+
+SpectrumWifiPhyTrackedBandsTest::SpectrumWifiPhyTrackedBandsTest()
+    : TestCase("SpectrumWifiPhy test channel switching for non-contiguous operating channels")
+{
+}
+
+void
+SpectrumWifiPhyTrackedBandsTest::DoSetup()
+{
+    // WifiHelper::EnableLogComponents();
+    // LogComponentEnable("SpectrumWifiPhyTest", LOG_LEVEL_ALL);
+
+    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+    auto lossModel = CreateObject<FriisPropagationLossModel>();
+    lossModel->SetFrequency(5.180e9);
+    spectrumChannel->AddPropagationLossModel(lossModel);
+    auto delayModel = CreateObject<ConstantSpeedPropagationDelayModel>();
+    spectrumChannel->SetPropagationDelayModel(delayModel);
+
+    auto node = CreateObject<Node>();
+    auto dev = CreateObject<WifiNetDevice>();
+    m_phy = CreateObject<ExtSpectrumWifiPhy>();
+    auto interferenceHelper = CreateObject<ExtInterferenceHelper>();
+    m_phy->SetInterferenceHelper(interferenceHelper);
+    auto errorModel = CreateObject<NistErrorRateModel>();
+    m_phy->SetErrorRateModel(errorModel);
+    m_phy->SetDevice(dev);
+    m_phy->AddChannel(spectrumChannel);
+    m_phy->ConfigureStandard(WIFI_STANDARD_80211ax);
+    dev->SetPhy(m_phy);
+    node->AddDevice(dev);
+}
+
+void
+SpectrumWifiPhyTrackedBandsTest::DoTeardown()
+{
+    m_phy->Dispose();
+    m_phy = nullptr;
+}
+
+void
+SpectrumWifiPhyTrackedBandsTest::SwitchChannel(const std::vector<uint8_t>& channelNumberPerSegment)
+{
+    NS_LOG_FUNCTION(this);
+    WifiPhy::ChannelSegments channelSegments;
+    for (auto channelNumber : channelNumberPerSegment)
+    {
+        const auto& channelInfo = WifiPhyOperatingChannel::FindFirst(channelNumber,
+                                                                     0,
+                                                                     0,
+                                                                     WIFI_STANDARD_80211ax,
+                                                                     WIFI_PHY_BAND_5GHZ);
+        channelSegments.emplace_back(channelInfo->number, channelInfo->width, channelInfo->band, 0);
+    }
+    m_phy->SetOperatingChannel(channelSegments);
+}
+
+void
+SpectrumWifiPhyTrackedBandsTest::VerifyTrackedBands(
+    const std::vector<std::vector<WifiSpectrumBandFrequencies>>& expectedTrackedBands,
+    const std::vector<std::vector<WifiSpectrumBandFrequencies>>& expectedUntrackedBands)
+{
+    NS_LOG_FUNCTION(this);
+    PointerValue ptr;
+    m_phy->GetAttribute("InterferenceHelper", ptr);
+    auto interferenceHelper = DynamicCast<ExtInterferenceHelper>(ptr.Get<ExtInterferenceHelper>());
+    NS_ASSERT(interferenceHelper);
+    auto printBand = [](const std::vector<WifiSpectrumBandFrequencies>& v) {
+        std::stringstream ss;
+        for (const auto& [start, stop] : v)
+        {
+            ss << "[" << start << "-" << stop << "] ";
+        }
+        return ss.str();
+    };
+    for (const auto& expectedTrackedBand : expectedTrackedBands)
+    {
+        auto bandTracked = interferenceHelper->IsBandTracked(expectedTrackedBand);
+        NS_TEST_ASSERT_MSG_EQ(bandTracked,
+                              true,
+                              "Band " << printBand(expectedTrackedBand) << " is not tracked");
+    }
+    for (const auto& expectedUntrackedBand : expectedUntrackedBands)
+    {
+        auto bandTracked = interferenceHelper->IsBandTracked(expectedUntrackedBand);
+        NS_TEST_ASSERT_MSG_EQ(bandTracked,
+                              false,
+                              "Band " << printBand(expectedUntrackedBand)
+                                      << " is unexpectedly tracked");
+    }
+}
+
+void
+SpectrumWifiPhyTrackedBandsTest::RunOne(
+    const std::vector<uint8_t>& channelNumberPerSegmentBeforeSwitching,
+    const std::vector<uint8_t>& channelNumberPerSegmentAfterSwitching,
+    const std::vector<std::vector<WifiSpectrumBandFrequencies>>& expectedTrackedBands,
+    const std::vector<std::vector<WifiSpectrumBandFrequencies>>& expectedUntrackedBands)
+{
+    NS_LOG_FUNCTION(this);
+
+    Simulator::Schedule(Seconds(0),
+                        &SpectrumWifiPhyTrackedBandsTest::SwitchChannel,
+                        this,
+                        channelNumberPerSegmentBeforeSwitching);
+
+    Simulator::Schedule(Seconds(1),
+                        &SpectrumWifiPhyTrackedBandsTest::SwitchChannel,
+                        this,
+                        channelNumberPerSegmentAfterSwitching);
+
+    Simulator::Schedule(Seconds(2),
+                        &SpectrumWifiPhyTrackedBandsTest::VerifyTrackedBands,
+                        this,
+                        expectedTrackedBands,
+                        expectedUntrackedBands);
+
+    Simulator::Run();
+}
+
+void
+SpectrumWifiPhyTrackedBandsTest::DoRun()
+{
+    // switch from 160 MHz to 80+80 MHz
+    RunOne({50},
+           {42, 106},
+           {{{5170 * 1e6, 5250 * 1e6}} /* first 80 MHz segment */,
+            {{5490 * 1e6, 5570 * 1e6}} /* second 80 MHz segment */,
+            {{5170 * 1e6, 5250 * 1e6},
+             {5490 * 1e6, 5570 * 1e6}} /* non-contiguous 160 MHz band made of the two segments */},
+           {{{5170 * 1e6, 5330 * 1e6}} /* full 160 MHz band should have been removed */});
+
+    // switch from 80+80 MHz to 160 MHz
+    RunOne({42, 106},
+           {50},
+           {{{5170 * 1e6, 5330 * 1e6}} /* full 160 MHz band */,
+            {{5170 * 1e6, 5250 * 1e6}} /* first 80 MHz segment is part of the 160 MHz channel*/},
+           {{{5490 * 1e6, 5570 * 1e6}} /* second 80 MHz segment should have been removed */,
+            {{5170 * 1e6, 5250 * 1e6},
+             {5490 * 1e6, 5570 * 1e6}} /* non-contiguous 160 MHz band should have been removed */});
+
+    // switch from 80+80 MHz to 80+80 MHz with segment swap
+    RunOne({42, 106},
+           {106, 42},
+           {{{5490 * 1e6, 5570 * 1e6}} /* first 80 MHz segment */,
+            {{5490 * 1e6, 5570 * 1e6}} /* second 80 MHz segment */,
+            {{5170 * 1e6, 5250 * 1e6},
+             {5490 * 1e6, 5570 * 1e6}} /* non-contiguous 160 MHz band made of the two segments */},
+           {});
+
+    // switch from 80+80 MHz to another 80+80 MHz with one common segment
+    RunOne({42, 106},
+           {106, 138},
+           {{{5490 * 1e6, 5570 * 1e6}} /* first 80 MHz segment */,
+            {{5650 * 1e6, 5730 * 1e6}} /* second 80 MHz segment */,
+            {{5490 * 1e6, 5570 * 1e6},
+             {5650 * 1e6, 5730 * 1e6}} /* non-contiguous 160 MHz band made of the two segments */},
+           {{{5170 * 1e6, 5250 * 1e6}} /* 80 MHz segment at channel 42 should have been removed */,
+            {{5170 * 1e6, 5250 * 1e6},
+             {5490 * 1e6,
+              5570 * 1e6}} /* previous non-contiguous 160 MHz band should have been removed */});
+
+    // switch from 80+80 MHz to another 80+80 MHz with no common segment
+    RunOne(
+        {42, 106},
+        {122, 155},
+        {{{5570 * 1e6, 5650 * 1e6}} /* first 80 MHz segment */,
+         {{5735 * 1e6, 5815 * 1e6}} /* second 80 MHz segment */,
+         {{5570 * 1e6, 5650 * 1e6},
+          {5735 * 1e6, 5815 * 1e6}} /* non-contiguous 160 MHz band made of the two segments */},
+        {{{5170 * 1e6, 5250 * 1e6}} /* previous first 80 MHz segment should have been removed */,
+         {{5490 * 1e6, 5570 * 1e6}} /* previous second 80 MHz segment should have been removed */,
+         {{5170 * 1e6, 5250 * 1e6},
+          {5490 * 1e6,
+           5570 * 1e6}} /* previous non-contiguous 160 MHz band should have been removed */});
+
+    Simulator::Destroy();
+}
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test 80+80MHz transmission
+ *
+ * The test verifies that two non-contiguous segments are handled by the spectrum PHY
+ * to transmit 160 MHz PPDUs when the operating channel is configured as 80+80MHz.
+ *
+ * The test first considers a contiguous 160 MHz segment and generate interference on the second
+ * 80 MHz band to verify reception fails in this scenario. Then, a similar interference
+ * is generated when a 80+80MHz operating channel is configured, where the first frequency segment
+ * occupies the first 80 MHz band of the previous 160 MHz operating channel. The reception should
+ * succeed in that scenario, which demonstrates the second 80 MHz band of the operating channel is
+ * no longer occupying that spectrum portion (the interference is hence is the gap between the two
+ * frequency segments). Finally, the test also generates interference on each of the frequency
+ * segments when the operating channel is 80+80MHz, to demonstrate the frequency segments are
+ * positioned as expected.
+ */
+class SpectrumWifiPhy80Plus80Test : public TestCase
+{
+  public:
+    SpectrumWifiPhy80Plus80Test();
+
+  private:
+    void DoSetup() override;
+    void DoTeardown() override;
+    void DoRun() override;
+
+    /**
+     * Run one function
+     * \param channelNumbers the channel number for each segment of the operating channel
+     * \param interferenceCenterFrequency the center frequency of the interference signal to
+     * generate
+     * \param interferenceBandWidth the band width of the interference signal to generate
+     * \param expectSuccess flag to indicate whether reception is expected to be successful
+     */
+    void RunOne(const std::vector<uint8_t>& channelNumbers,
+                MHz_u interferenceCenterFrequency,
+                MHz_u interferenceBandWidth,
+                bool expectSuccess);
+
+    /**
+     * Switch channel function
+     *
+     * \param channelNumbers the channel number for each segment of the operating channel
+     * to switch to
+     */
+    void SwitchChannel(const std::vector<uint8_t>& channelNumbers);
+
+    /**
+     * Send 160MHz PPDU function
+     */
+    void Send160MhzPpdu();
+
+    /**
+     * Generate interference function
+     * \param interferencePsd the PSD of the interference to be generated
+     * \param duration the duration of the interference
+     */
+    void GenerateInterference(Ptr<SpectrumValue> interferencePsd, Time duration);
+
+    /**
+     * Stop interference function
+     */
+    void StopInterference();
+
+    /**
+     * Receive success function for STA
+     * \param psdu the PSDU
+     * \param rxSignalInfo the info on the received signal (\see RxSignalInfo)
+     * \param txVector the transmit vector
+     * \param statusPerMpdu reception status per MPDU
+     */
+    void RxSuccessSta(Ptr<const WifiPsdu> psdu,
+                      RxSignalInfo rxSignalInfo,
+                      WifiTxVector txVector,
+                      std::vector<bool> statusPerMpdu);
+
+    /**
+     * Receive failure function for STA
+     * \param psdu the PSDU
+     */
+    void RxFailureSta(Ptr<const WifiPsdu> psdu);
+
+    /**
+     * Verify results
+     *
+     * \param expectSuccess flag to indicate whether reception is expected to be successful
+     */
+    void CheckResults(bool expectSuccess);
+
+    Ptr<SpectrumWifiPhy> m_phyAp;           ///< PHY of AP
+    Ptr<SpectrumWifiPhy> m_phySta;          ///< PHY of STA
+    Ptr<WaveformGenerator> m_phyInterferer; ///< PHY of interferer
+
+    uint32_t m_countRxSuccessSta; ///< count RX success for STA
+    uint32_t m_countRxFailureSta; ///< count RX failure for STA
+};
+
+SpectrumWifiPhy80Plus80Test::SpectrumWifiPhy80Plus80Test()
+    : TestCase("SpectrumWifiPhy test 80+80MHz transmission"),
+      m_countRxSuccessSta(0),
+      m_countRxFailureSta(0)
+{
+}
+
+void
+SpectrumWifiPhy80Plus80Test::SwitchChannel(const std::vector<uint8_t>& channelNumbers)
+{
+    NS_LOG_FUNCTION(this);
+    WifiPhy::ChannelSegments channelSegments;
+    for (auto channelNumber : channelNumbers)
+    {
+        const auto& channelInfo = WifiPhyOperatingChannel::FindFirst(channelNumber,
+                                                                     0,
+                                                                     0,
+                                                                     WIFI_STANDARD_80211ax,
+                                                                     WIFI_PHY_BAND_5GHZ);
+        channelSegments.emplace_back(channelInfo->number, channelInfo->width, channelInfo->band, 0);
+    }
+    m_phyAp->SetOperatingChannel(channelSegments);
+    m_phySta->SetOperatingChannel(channelSegments);
+}
+
+void
+SpectrumWifiPhy80Plus80Test::Send160MhzPpdu()
+{
+    NS_LOG_FUNCTION(this);
+
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_SU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          160,
+                          false,
+                          false,
+                          false};
+
+    auto pkt = Create<Packet>(1000);
+    WifiMacHeader hdr;
+    hdr.SetType(WIFI_MAC_QOSDATA);
+    auto psdu = Create<WifiPsdu>(pkt, hdr);
+
+    m_phyAp->Send(psdu, txVector);
+}
+
+void
+SpectrumWifiPhy80Plus80Test::GenerateInterference(Ptr<SpectrumValue> interferencePsd, Time duration)
+{
+    m_phyInterferer->SetTxPowerSpectralDensity(interferencePsd);
+    m_phyInterferer->SetPeriod(duration);
+    m_phyInterferer->Start();
+    Simulator::Schedule(duration, &SpectrumWifiPhy80Plus80Test::StopInterference, this);
+}
+
+void
+SpectrumWifiPhy80Plus80Test::StopInterference()
+{
+    m_phyInterferer->Stop();
+}
+
+void
+SpectrumWifiPhy80Plus80Test::RxSuccessSta(Ptr<const WifiPsdu> psdu,
+                                          RxSignalInfo rxSignalInfo,
+                                          WifiTxVector txVector,
+                                          std::vector<bool> /*statusPerMpdu*/)
+{
+    NS_LOG_FUNCTION(this << *psdu << rxSignalInfo << txVector);
+    m_countRxSuccessSta++;
+}
+
+void
+SpectrumWifiPhy80Plus80Test::RxFailureSta(Ptr<const WifiPsdu> psdu)
+{
+    NS_LOG_FUNCTION(this << *psdu);
+    m_countRxFailureSta++;
+}
+
+void
+SpectrumWifiPhy80Plus80Test::CheckResults(bool expectSuccess)
+{
+    NS_LOG_FUNCTION(this << expectSuccess);
+    NS_TEST_ASSERT_MSG_EQ(((m_countRxSuccessSta > 0) && (m_countRxFailureSta == 0)),
+                          expectSuccess,
+                          "Reception should be "
+                              << (expectSuccess ? "successful" : "unsuccessful"));
+}
+
+void
+SpectrumWifiPhy80Plus80Test::DoSetup()
+{
+    // WifiHelper::EnableLogComponents();
+    // LogComponentEnable("SpectrumWifiPhyTest", LOG_LEVEL_ALL);
+
+    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+    auto lossModel = CreateObject<FriisPropagationLossModel>();
+    spectrumChannel->AddPropagationLossModel(lossModel);
+    auto delayModel = CreateObject<ConstantSpeedPropagationDelayModel>();
+    spectrumChannel->SetPropagationDelayModel(delayModel);
+
+    auto apNode = CreateObject<Node>();
+    auto apDev = CreateObject<WifiNetDevice>();
+    m_phyAp = CreateObject<SpectrumWifiPhy>();
+    auto apInterferenceHelper = CreateObject<InterferenceHelper>();
+    m_phyAp->SetInterferenceHelper(apInterferenceHelper);
+    auto apErrorModel = CreateObject<NistErrorRateModel>();
+    m_phyAp->SetErrorRateModel(apErrorModel);
+    m_phyAp->SetDevice(apDev);
+    m_phyAp->AddChannel(spectrumChannel);
+    m_phyAp->ConfigureStandard(WIFI_STANDARD_80211ax);
+    auto apMobility = CreateObject<ConstantPositionMobilityModel>();
+    m_phyAp->SetMobility(apMobility);
+    apDev->SetPhy(m_phyAp);
+    apNode->AggregateObject(apMobility);
+    apNode->AddDevice(apDev);
+
+    auto staNode = CreateObject<Node>();
+    auto staDev = CreateObject<WifiNetDevice>();
+    m_phySta = CreateObject<SpectrumWifiPhy>();
+    auto staInterferenceHelper = CreateObject<InterferenceHelper>();
+    m_phySta->SetInterferenceHelper(staInterferenceHelper);
+    auto staErrorModel = CreateObject<NistErrorRateModel>();
+    m_phySta->SetErrorRateModel(staErrorModel);
+    m_phySta->SetDevice(staDev);
+    m_phySta->AddChannel(spectrumChannel);
+    m_phySta->ConfigureStandard(WIFI_STANDARD_80211ax);
+    m_phySta->SetReceiveOkCallback(MakeCallback(&SpectrumWifiPhy80Plus80Test::RxSuccessSta, this));
+    m_phySta->SetReceiveErrorCallback(
+        MakeCallback(&SpectrumWifiPhy80Plus80Test::RxFailureSta, this));
+    auto staMobility = CreateObject<ConstantPositionMobilityModel>();
+    m_phySta->SetMobility(staMobility);
+    staDev->SetPhy(m_phySta);
+    staNode->AggregateObject(staMobility);
+    staNode->AddDevice(staDev);
+
+    auto interfererNode = CreateObject<Node>();
+    auto interfererDev = CreateObject<NonCommunicatingNetDevice>();
+    m_phyInterferer = CreateObject<WaveformGenerator>();
+    m_phyInterferer->SetDevice(interfererDev);
+    m_phyInterferer->SetChannel(spectrumChannel);
+    m_phyInterferer->SetDutyCycle(1);
+    interfererNode->AddDevice(interfererDev);
+}
+
+void
+SpectrumWifiPhy80Plus80Test::DoTeardown()
+{
+    m_phyAp->Dispose();
+    m_phyAp = nullptr;
+    m_phySta->Dispose();
+    m_phySta = nullptr;
+    m_phyInterferer->Dispose();
+    m_phyInterferer = nullptr;
+}
+
+void
+SpectrumWifiPhy80Plus80Test::RunOne(const std::vector<uint8_t>& channelNumbers,
+                                    MHz_u interferenceCenterFrequency,
+                                    MHz_u interferenceBandWidth,
+                                    bool expectSuccess)
+{
+    // reset counters
+    m_countRxSuccessSta = 0;
+    m_countRxFailureSta = 0;
+
+    Simulator::Schedule(Seconds(0),
+                        &SpectrumWifiPhy80Plus80Test::SwitchChannel,
+                        this,
+                        channelNumbers);
+
+    // create info about interference to generate
+    BandInfo bandInfo{.fl = (interferenceCenterFrequency - (interferenceBandWidth / 2)) * 1e6,
+                      .fc = interferenceCenterFrequency * 1e6,
+                      .fh = (interferenceCenterFrequency + (interferenceBandWidth / 2)) * 1e6};
+    auto spectrumInterference = Create<SpectrumModel>(Bands{bandInfo});
+    auto interferencePsd = Create<SpectrumValue>(spectrumInterference);
+    Watt_u interferencePower{0.1};
+    *interferencePsd = interferencePower / (interferenceBandWidth * 20e6);
+
+    Simulator::Schedule(Seconds(1),
+                        &SpectrumWifiPhy80Plus80Test::GenerateInterference,
+                        this,
+                        interferencePsd,
+                        MilliSeconds(100));
+
+    Simulator::Schedule(Seconds(1), &SpectrumWifiPhy80Plus80Test::Send160MhzPpdu, this);
+
+    Simulator::Schedule(Seconds(2),
+                        &SpectrumWifiPhy80Plus80Test::CheckResults,
+                        this,
+                        expectSuccess);
+
+    Simulator::Run();
+}
+
+void
+SpectrumWifiPhy80Plus80Test::DoRun()
+{
+    // Test transmission over contiguous 160 MHz (channel 50) and interference generated in
+    // the second half of the channel width (channel 58, i.e. center frequency 5290 and bandwidth 80
+    // MHz). The reception should fail because the interference occupies half the channel width used
+    // for the transmission.
+    //                                       ┌──────────────────┐
+    // Interference                          │    channel 58    │
+    //                                       │ 5290 MHz, 80 MHz │
+    //                                       └──────────────────┘
+    //
+    //                   ┌──────────────────────────────────────┐
+    // Operating Channel │             channel 50               │
+    //                   │          5250 MHz, 160 MHz           │
+    //                   └──────────────────────────────────────┘
+    //
+    RunOne({50}, 5290, 80, false);
+
+    // Test transmission over non-contiguous 160 MHz (i.e. 80+80MHz) and same interference as in
+    // previous run. The reception should succeed because the interference is located between the
+    // two segments.
+    //                                       ┌──────────────────┐
+    // Interference                          │    channel 58    │
+    //                                       │ 5290 MHz, 80 MHz │
+    //                                       └──────────────────┘
+    //
+    //                   ┌──────────────────┐                             ┌──────────────────┐
+    // Operating Channel │    channel 42    │                             │   channel 106    │
+    //                   │80+80MHz segment 0│                             │80+80MHz segment 1│
+    //                   └──────────────────┘                             └──────────────────┘
+    //
+    RunOne({42, 106}, 5290, 80, true);
+
+    // Test transmission over non-contiguous 160 MHz (i.e. 80+80MHz) and interference generated on
+    // the first segment of the channel width (channel 42, i.e. center frequency 5210 and bandwidth
+    // 80 MHz). The reception should fail because the interference occupies half the channel width
+    // used for the transmission.
+    //                   ┌──────────────────┐
+    // Interference      │    channel 42    │
+    //                   │ 5210 MHz, 80 MHz │
+    //                   └──────────────────┘
+    //
+    //                   ┌──────────────────┐                             ┌──────────────────┐
+    // Operating Channel │    channel 42    │                             │   channel 106    │
+    //                   │80+80MHz segment 0│                             │80+80MHz segment 1│
+    //                   └──────────────────┘                             └──────────────────┘
+    //
+    RunOne({42, 106}, 5210, 80, false);
+
+    // Test transmission over non-contiguous 160 MHz (i.e. 80+80MHz) and interference generated on
+    // the second segment of the channel width (channel 42, i.e. center frequency 5210 and bandwidth
+    // 80 MHz). The reception should fail because the interference occupies half the channel width
+    // used for the transmission.
+    //                                                                    ┌──────────────────┐
+    // Interference                                                       │    channel 106    │
+    //                                                                    │ 5530 MHz, 80 MHz │
+    //                                                                    └──────────────────┘
+    //
+    //                   ┌──────────────────┐                             ┌──────────────────┐
+    // Operating Channel │    channel 42    │                             │   channel 106    │
+    //                   │80+80MHz segment 0│                             │80+80MHz segment 1│
+    //                   └──────────────────┘                             └──────────────────┘
+    //
+    RunOne({42, 106}, 5530, 80, false);
+
+    Simulator::Destroy();
+}
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
  * \brief Spectrum Wifi Phy Multiple Spectrum Test
  *
  * This test is testing the ability to plug multiple spectrum channels to the spectrum wifi PHY.
@@ -858,18 +1634,17 @@
     void SwitchChannel(Ptr<SpectrumWifiPhy> phy,
                        WifiPhyBand band,
                        uint8_t channelNumber,
-                       uint16_t channelWidth,
+                       MHz_u channelWidth,
                        std::optional<std::size_t> listenerIndex);
 
     /**
      * Send PPDU function
      *
      * \param phy the PHY to transmit the signal
-     * \param txPowerDbm the power in dBm to transmit the signal (this is also the received power
-     * since we do not have propagation loss to simplify)
-     * \param payloadSize the payload size in bytes
+     * \param txPower the power to transmit the signal (this is also the received power since we do
+     * not have propagation loss to simplify) \param payloadSize the payload size in bytes
      */
-    void SendPpdu(Ptr<SpectrumWifiPhy> phy, double txPowerDbm, uint32_t payloadSize);
+    void SendPpdu(Ptr<SpectrumWifiPhy> phy, dBm_u txPower, uint32_t payloadSize);
 
     /**
      * Callback triggered when a packet is received by a PHY
@@ -933,8 +1708,8 @@
      * \param expectedRxBytes the expected amount of received bytes
      * \param expectedFrequencyRangeActiveRfInterface the expected frequency range (in MHz) of the
      * active RF interface
-     * \param expectedConnectedPhysPerChannel the expected
-     * number of PHYs attached for each spectrum channel
+     * \param expectedConnectedPhysPerChannel the expected number of PHYs attached for each spectrum
+     * channel
      */
     void CheckResults(std::size_t index,
                       uint32_t expectedNumRx,
@@ -1005,7 +1780,7 @@
 SpectrumWifiPhyMultipleInterfacesTest::SwitchChannel(Ptr<SpectrumWifiPhy> phy,
                                                      WifiPhyBand band,
                                                      uint8_t channelNumber,
-                                                     uint16_t channelWidth,
+                                                     MHz_u channelWidth,
                                                      std::optional<std::size_t> listenerIndex)
 {
     NS_LOG_FUNCTION(this << phy << band << +channelNumber << channelWidth);
@@ -1026,14 +1801,22 @@
 
 void
 SpectrumWifiPhyMultipleInterfacesTest::SendPpdu(Ptr<SpectrumWifiPhy> phy,
-                                                double txPowerDbm,
+                                                dBm_u txPower,
                                                 uint32_t payloadSize)
 {
-    NS_LOG_FUNCTION(this << phy << txPowerDbm << payloadSize << phy->GetCurrentFrequencyRange()
+    NS_LOG_FUNCTION(this << phy << txPower << payloadSize << phy->GetCurrentFrequencyRange()
                          << phy->GetChannelWidth() << phy->GetChannelNumber());
 
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs11(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, false, false);
+    WifiTxVector txVector{HePhy::GetHeMcs11(),
+                          0,
+                          WIFI_PREAMBLE_HE_SU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          20,
+                          false,
+                          false};
     Ptr<Packet> pkt = Create<Packet>(payloadSize);
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
@@ -1046,8 +1829,8 @@
     m_lastTxEnd = m_lastTxStart + WifiPhy::CalculateTxDuration({std::make_pair(SU_STA_ID, psdu)},
                                                                txVector,
                                                                phy->GetPhyBand());
-    phy->SetTxPowerStart(txPowerDbm);
-    phy->SetTxPowerEnd(txPowerDbm);
+    phy->SetTxPowerStart(txPower);
+    phy->SetTxPowerEnd(txPower);
     phy->Send(WifiConstPsduMap({std::make_pair(SU_STA_ID, psdu)}), txVector);
 }
 
@@ -1276,20 +2059,12 @@
     for (std::size_t i = 0; i < interfaces.size(); ++i)
     {
         auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
-        [[maybe_unused]] const auto [channel, frequency, channelWidth, type, band] =
-            (*WifiPhyOperatingChannel::FindFirst(interfaces.at(i).number,
-                                                 0,
-                                                 0,
-                                                 WIFI_STANDARD_80211be,
-                                                 interfaces.at(i).band));
-
         auto delayModel = CreateObject<ConstantSpeedPropagationDelayModel>();
         spectrumChannel->SetPropagationDelayModel(delayModel);
         std::ostringstream oss;
         oss << "{" << +interfaces.at(i).number << ", 0, " << interfaces.at(i).bandName << ", 0}";
         phyHelper.Set(i, "ChannelSettings", StringValue(oss.str()));
         phyHelper.AddChannel(spectrumChannel, interfaces.at(i).range);
-
         m_spectrumChannels.emplace_back(spectrumChannel);
     }
 
@@ -1374,7 +2149,7 @@
 {
     NS_LOG_FUNCTION(this);
 
-    const auto ccaEdThresholdDbm = -62.0; ///< CCA-ED threshold in dBm
+    const dBm_u ccaEdThreshold = -62.0; ///< CCA-ED threshold
     const auto txAfterChannelSwitchDelay =
         MicroSeconds((m_chanSwitchScenario == ChannelSwitchScenario::BEFORE_TX)
                          ? 250
@@ -1537,7 +2312,7 @@
     }
 
     // verify CCA indication when switching to a channel with an ongoing transmission
-    for (const auto txPowerDbm : {-60.0 /* above CCA-ED */, -70.0 /* below CCA-ED */})
+    for (const dBm_u txPower : {-60.0 /* above CCA-ED */, -70.0 /* below CCA-ED */})
     {
         for (std::size_t i = 0; i < 4; ++i)
         {
@@ -1550,9 +2325,9 @@
                                                        20,
                                                        WIFI_STANDARD_80211ax,
                                                        txPpduPhy->GetPhyBand());
-                for (uint16_t bw = txPpduPhy->GetChannelWidth(); bw >= 20; bw /= 2)
+                for (auto bw = txPpduPhy->GetChannelWidth(); bw >= 20; bw /= 2)
                 {
-                    [[maybe_unused]] const auto [channel, frequency, channelWidth, type, band] =
+                    const auto& channelInfo =
                         (*WifiPhyOperatingChannel::FindFirst(0,
                                                              0,
                                                              bw,
@@ -1564,15 +2339,15 @@
                                         &SpectrumWifiPhyMultipleInterfacesTest::SendPpdu,
                                         this,
                                         txPpduPhy,
-                                        txPowerDbm,
+                                        txPower,
                                         1000);
                     Simulator::Schedule(delay + txOngoingAfterTxStartedDelay,
                                         &SpectrumWifiPhyMultipleInterfacesTest::SwitchChannel,
                                         this,
                                         m_rxPhys.at(j),
-                                        band,
-                                        channel,
-                                        channelWidth,
+                                        channelInfo.band,
+                                        channelInfo.number,
+                                        channelInfo.width,
                                         j);
                     for (std::size_t k = 0; k < 4; ++k)
                     {
@@ -1581,9 +2356,9 @@
                             continue;
                         }
                         const auto expectCcaBusyIndication =
-                            (k == i) ? (txPowerDbm >= ccaEdThresholdDbm)
+                            (k == i) ? (txPower >= ccaEdThreshold)
                                      : (m_trackSignalsInactiveInterfaces
-                                            ? ((txPowerDbm >= ccaEdThresholdDbm) ? (j == k) : false)
+                                            ? ((txPower >= ccaEdThreshold) ? (j == k) : false)
                                             : false);
                         Simulator::Schedule(
                             delay + checkResultsDelay,
@@ -2009,11 +2784,14 @@
 };
 
 SpectrumWifiPhyTestSuite::SpectrumWifiPhyTestSuite()
-    : TestSuite("wifi-spectrum-wifi-phy", Type::UNIT)
+    : TestSuite("wifi-spectrum-phy", Type::UNIT)
 {
     AddTestCase(new SpectrumWifiPhyBasicTest, TestCase::Duration::QUICK);
     AddTestCase(new SpectrumWifiPhyListenerTest, TestCase::Duration::QUICK);
     AddTestCase(new SpectrumWifiPhyFilterTest, TestCase::Duration::QUICK);
+    AddTestCase(new SpectrumWifiPhyGetBandTest, TestCase::Duration::QUICK);
+    AddTestCase(new SpectrumWifiPhyTrackedBandsTest, TestCase::Duration::QUICK);
+    AddTestCase(new SpectrumWifiPhy80Plus80Test, TestCase::Duration::QUICK);
     AddTestCase(new SpectrumWifiPhyMultipleInterfacesTest(
                     false,
                     SpectrumWifiPhyMultipleInterfacesTest::ChannelSwitchScenario::BEFORE_TX),
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/tx-duration-test.cc ns-3.43/src/wifi/test/tx-duration-test.cc
--- ns-3.42/src/wifi/test/tx-duration-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/tx-duration-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 CTTC
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Nicola Baldo <nbaldo@cttc.es>
  *          Sébastien Deronne <sebastien.deronne@gmail.com>
@@ -57,8 +46,8 @@
      *
      * @param size size of payload in octets (includes everything after the PHY header)
      * @param payloadMode the WifiMode used for the transmission
-     * @param channelWidth the channel width used for the transmission (in MHz)
-     * @param guardInterval the guard interval duration used for the transmission (in nanoseconds)
+     * @param channelWidth the channel width used for the transmission
+     * @param guardInterval the guard interval duration used for the transmission
      * @param preamble the WifiPreamble used for the transmission
      * @param knownDuration the known duration value of the transmission
      *
@@ -66,8 +55,8 @@
      */
     bool CheckPayloadDuration(uint32_t size,
                               WifiMode payloadMode,
-                              uint16_t channelWidth,
-                              uint16_t guardInterval,
+                              MHz_u channelWidth,
+                              Time guardInterval,
                               WifiPreamble preamble,
                               Time knownDuration);
 
@@ -77,8 +66,8 @@
      *
      * @param size size of payload in octets (includes everything after the PHY header)
      * @param payloadMode the WifiMode used for the transmission
-     * @param channelWidth the channel width used for the transmission (in MHz)
-     * @param guardInterval the guard interval duration used for the transmission (in nanoseconds)
+     * @param channelWidth the channel width used for the transmission
+     * @param guardInterval the guard interval duration used for the transmission
      * @param preamble the WifiPreamble used for the transmission
      * @param knownDuration the known duration value of the transmission
      *
@@ -86,8 +75,8 @@
      */
     bool CheckTxDuration(uint32_t size,
                          WifiMode payloadMode,
-                         uint16_t channelWidth,
-                         uint16_t guardInterval,
+                         MHz_u channelWidth,
+                         Time guardInterval,
                          WifiPreamble preamble,
                          Time knownDuration);
 
@@ -97,8 +86,8 @@
      *
      * @param sizes the list of PSDU sizes for each station in octets
      * @param userInfos the list of HE MU specific user transmission parameters
-     * @param channelWidth the channel width used for the transmission (in MHz)
-     * @param guardInterval the guard interval duration used for the transmission (in nanoseconds)
+     * @param channelWidth the channel width used for the transmission
+     * @param guardInterval the guard interval duration used for the transmission
      * @param preamble the WifiPreamble used for the transmission
      * @param knownDuration the known duration value of the transmission
      *
@@ -106,8 +95,8 @@
      */
     static bool CheckMuTxDuration(std::list<uint32_t> sizes,
                                   std::list<HeMuUserInfo> userInfos,
-                                  uint16_t channelWidth,
-                                  uint16_t guardInterval,
+                                  MHz_u channelWidth,
+                                  Time guardInterval,
                                   WifiPreamble preamble,
                                   Time knownDuration);
 
@@ -143,8 +132,8 @@
 bool
 TxDurationTest::CheckPayloadDuration(uint32_t size,
                                      WifiMode payloadMode,
-                                     uint16_t channelWidth,
-                                     uint16_t guardInterval,
+                                     MHz_u channelWidth,
+                                     Time guardInterval,
                                      WifiPreamble preamble,
                                      Time knownDuration)
 {
@@ -195,8 +184,8 @@
 bool
 TxDurationTest::CheckTxDuration(uint32_t size,
                                 WifiMode payloadMode,
-                                uint16_t channelWidth,
-                                uint16_t guardInterval,
+                                MHz_u channelWidth,
+                                Time guardInterval,
                                 WifiPreamble preamble,
                                 Time knownDuration)
 {
@@ -254,8 +243,8 @@
 bool
 TxDurationTest::CheckMuTxDuration(std::list<uint32_t> sizes,
                                   std::list<HeMuUserInfo> userInfos,
-                                  uint16_t channelWidth,
-                                  uint16_t guardInterval,
+                                  MHz_u channelWidth,
+                                  Time guardInterval,
                                   WifiPreamble preamble,
                                   Time knownDuration)
 {
@@ -265,7 +254,7 @@
                            std::begin(userInfos),
                            std::end(userInfos),
                            0,
-                           [](const uint16_t prevBw, const HeMuUserInfo& info) {
+                           [](const MHz_u prevBw, const HeMuUserInfo& info) {
                                return prevBw + HeRu::GetBandwidth(info.ru.GetRuType());
                            }),
         "Cannot accommodate all the RUs in the provided band"); // MU-MIMO (for which allocations
@@ -369,25 +358,25 @@
              CheckPayloadDuration(1023,
                                   DsssPhy::GetDsssRate11Mbps(),
                                   22,
-                                  800,
+                                  NanoSeconds(800),
                                   WIFI_PREAMBLE_LONG,
                                   MicroSeconds(744)) &&
              CheckPayloadDuration(1024,
                                   DsssPhy::GetDsssRate11Mbps(),
                                   22,
-                                  800,
+                                  NanoSeconds(800),
                                   WIFI_PREAMBLE_LONG,
                                   MicroSeconds(745)) &&
              CheckPayloadDuration(1025,
                                   DsssPhy::GetDsssRate11Mbps(),
                                   22,
-                                  800,
+                                  NanoSeconds(800),
                                   WIFI_PREAMBLE_LONG,
                                   MicroSeconds(746)) &&
              CheckPayloadDuration(1026,
                                   DsssPhy::GetDsssRate11Mbps(),
                                   22,
-                                  800,
+                                  NanoSeconds(800),
                                   WIFI_PREAMBLE_LONG,
                                   MicroSeconds(747));
 
@@ -401,193 +390,193 @@
              CheckTxDuration(1023,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(744 + 96)) &&
              CheckTxDuration(1024,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(745 + 96)) &&
              CheckTxDuration(1025,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(746 + 96)) &&
              CheckTxDuration(1026,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(747 + 96)) &&
              CheckTxDuration(1023,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(744 + 192)) &&
              CheckTxDuration(1024,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(745 + 192)) &&
              CheckTxDuration(1025,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(746 + 192)) &&
              CheckTxDuration(1026,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(747 + 192)) &&
              CheckTxDuration(1023,
                              DsssPhy::GetDsssRate5_5Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(1488 + 96)) &&
              CheckTxDuration(1024,
                              DsssPhy::GetDsssRate5_5Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(1490 + 96)) &&
              CheckTxDuration(1025,
                              DsssPhy::GetDsssRate5_5Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(1491 + 96)) &&
              CheckTxDuration(1026,
                              DsssPhy::GetDsssRate5_5Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(1493 + 96)) &&
              CheckTxDuration(1023,
                              DsssPhy::GetDsssRate5_5Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(1488 + 192)) &&
              CheckTxDuration(1024,
                              DsssPhy::GetDsssRate5_5Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(1490 + 192)) &&
              CheckTxDuration(1025,
                              DsssPhy::GetDsssRate5_5Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(1491 + 192)) &&
              CheckTxDuration(1026,
                              DsssPhy::GetDsssRate5_5Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(1493 + 192)) &&
              CheckTxDuration(1023,
                              DsssPhy::GetDsssRate2Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(4092 + 96)) &&
              CheckTxDuration(1024,
                              DsssPhy::GetDsssRate2Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(4096 + 96)) &&
              CheckTxDuration(1025,
                              DsssPhy::GetDsssRate2Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(4100 + 96)) &&
              CheckTxDuration(1026,
                              DsssPhy::GetDsssRate2Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(4104 + 96)) &&
              CheckTxDuration(1023,
                              DsssPhy::GetDsssRate2Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(4092 + 192)) &&
              CheckTxDuration(1024,
                              DsssPhy::GetDsssRate2Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(4096 + 192)) &&
              CheckTxDuration(1025,
                              DsssPhy::GetDsssRate2Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(4100 + 192)) &&
              CheckTxDuration(1026,
                              DsssPhy::GetDsssRate2Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(4104 + 192)) &&
              CheckTxDuration(1023,
                              DsssPhy::GetDsssRate1Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(8184 + 192)) &&
              CheckTxDuration(1024,
                              DsssPhy::GetDsssRate1Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(8192 + 192)) &&
              CheckTxDuration(1025,
                              DsssPhy::GetDsssRate1Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(8200 + 192)) &&
              CheckTxDuration(1026,
                              DsssPhy::GetDsssRate1Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_SHORT,
                              MicroSeconds(8208 + 192)) &&
              CheckTxDuration(1023,
                              DsssPhy::GetDsssRate1Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(8184 + 192)) &&
              CheckTxDuration(1024,
                              DsssPhy::GetDsssRate1Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(8192 + 192)) &&
              CheckTxDuration(1025,
                              DsssPhy::GetDsssRate1Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(8200 + 192)) &&
              CheckTxDuration(1026,
                              DsssPhy::GetDsssRate1Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(8208 + 192));
 
@@ -596,7 +585,7 @@
     retval = retval && CheckTxDuration(14,
                                        DsssPhy::GetDsssRate1Mbps(),
                                        22,
-                                       800,
+                                       NanoSeconds(800),
                                        WIFI_PREAMBLE_LONG,
                                        MicroSeconds(304));
 
@@ -605,19 +594,19 @@
              CheckTxDuration(1536,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(1310)) &&
              CheckTxDuration(76,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(248)) &&
              CheckTxDuration(14,
                              DsssPhy::GetDsssRate11Mbps(),
                              22,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(203));
 
@@ -629,19 +618,19 @@
              CheckTxDuration(1536,
                              OfdmPhy::GetOfdmRate54Mbps(),
                              20,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(248)) &&
              CheckTxDuration(76,
                              OfdmPhy::GetOfdmRate54Mbps(),
                              20,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(32)) &&
              CheckTxDuration(14,
                              OfdmPhy::GetOfdmRate54Mbps(),
                              20,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(24));
 
@@ -652,67 +641,116 @@
              CheckTxDuration(1536,
                              ErpOfdmPhy::GetErpOfdmRate54Mbps(),
                              20,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(254)) &&
              CheckTxDuration(76,
                              ErpOfdmPhy::GetErpOfdmRate54Mbps(),
                              20,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(38)) &&
              CheckTxDuration(14,
                              ErpOfdmPhy::GetErpOfdmRate54Mbps(),
                              20,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_LONG,
                              MicroSeconds(30));
 
     NS_TEST_EXPECT_MSG_EQ(retval, true, "an 802.11g duration failed");
 
     // 802.11n durations
-    retval =
-        retval &&
-        CheckTxDuration(1536,
-                        HtPhy::GetHtMcs7(),
-                        20,
-                        800,
-                        WIFI_PREAMBLE_HT_MF,
-                        MicroSeconds(228)) &&
-        CheckTxDuration(76, HtPhy::GetHtMcs7(), 20, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds(48)) &&
-        CheckTxDuration(14, HtPhy::GetHtMcs7(), 20, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds(40)) &&
-        CheckTxDuration(1536,
-                        HtPhy::GetHtMcs0(),
-                        20,
-                        400,
-                        WIFI_PREAMBLE_HT_MF,
-                        NanoSeconds(1742400)) &&
-        CheckTxDuration(76, HtPhy::GetHtMcs0(), 20, 400, WIFI_PREAMBLE_HT_MF, MicroSeconds(126)) &&
-        CheckTxDuration(14, HtPhy::GetHtMcs0(), 20, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds(57600)) &&
-        CheckTxDuration(1536,
-                        HtPhy::GetHtMcs6(),
-                        20,
-                        400,
-                        WIFI_PREAMBLE_HT_MF,
-                        NanoSeconds(226800)) &&
-        CheckTxDuration(76, HtPhy::GetHtMcs6(), 20, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds(46800)) &&
-        CheckTxDuration(14, HtPhy::GetHtMcs6(), 20, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds(39600)) &&
-        CheckTxDuration(1536,
-                        HtPhy::GetHtMcs7(),
-                        40,
-                        800,
-                        WIFI_PREAMBLE_HT_MF,
-                        MicroSeconds(128)) &&
-        CheckTxDuration(76, HtPhy::GetHtMcs7(), 40, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds(44)) &&
-        CheckTxDuration(14, HtPhy::GetHtMcs7(), 40, 800, WIFI_PREAMBLE_HT_MF, MicroSeconds(40)) &&
-        CheckTxDuration(1536,
-                        HtPhy::GetHtMcs7(),
-                        40,
-                        400,
-                        WIFI_PREAMBLE_HT_MF,
-                        NanoSeconds(118800)) &&
-        CheckTxDuration(76, HtPhy::GetHtMcs7(), 40, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds(43200)) &&
-        CheckTxDuration(14, HtPhy::GetHtMcs7(), 40, 400, WIFI_PREAMBLE_HT_MF, NanoSeconds(39600));
+    retval = retval &&
+             CheckTxDuration(1536,
+                             HtPhy::GetHtMcs7(),
+                             20,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HT_MF,
+                             MicroSeconds(228)) &&
+             CheckTxDuration(76,
+                             HtPhy::GetHtMcs7(),
+                             20,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HT_MF,
+                             MicroSeconds(48)) &&
+             CheckTxDuration(14,
+                             HtPhy::GetHtMcs7(),
+                             20,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HT_MF,
+                             MicroSeconds(40)) &&
+             CheckTxDuration(1536,
+                             HtPhy::GetHtMcs0(),
+                             20,
+                             NanoSeconds(400),
+                             WIFI_PREAMBLE_HT_MF,
+                             NanoSeconds(1742400)) &&
+             CheckTxDuration(76,
+                             HtPhy::GetHtMcs0(),
+                             20,
+                             NanoSeconds(400),
+                             WIFI_PREAMBLE_HT_MF,
+                             MicroSeconds(126)) &&
+             CheckTxDuration(14,
+                             HtPhy::GetHtMcs0(),
+                             20,
+                             NanoSeconds(400),
+                             WIFI_PREAMBLE_HT_MF,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(1536,
+                             HtPhy::GetHtMcs6(),
+                             20,
+                             NanoSeconds(400),
+                             WIFI_PREAMBLE_HT_MF,
+                             NanoSeconds(226800)) &&
+             CheckTxDuration(76,
+                             HtPhy::GetHtMcs6(),
+                             20,
+                             NanoSeconds(400),
+                             WIFI_PREAMBLE_HT_MF,
+                             NanoSeconds(46800)) &&
+             CheckTxDuration(14,
+                             HtPhy::GetHtMcs6(),
+                             20,
+                             NanoSeconds(400),
+                             WIFI_PREAMBLE_HT_MF,
+                             NanoSeconds(39600)) &&
+             CheckTxDuration(1536,
+                             HtPhy::GetHtMcs7(),
+                             40,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HT_MF,
+                             MicroSeconds(128)) &&
+             CheckTxDuration(76,
+                             HtPhy::GetHtMcs7(),
+                             40,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HT_MF,
+                             MicroSeconds(44)) &&
+             CheckTxDuration(14,
+                             HtPhy::GetHtMcs7(),
+                             40,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HT_MF,
+                             MicroSeconds(40)) &&
+             CheckTxDuration(1536,
+                             HtPhy::GetHtMcs7(),
+                             40,
+                             NanoSeconds(400),
+                             WIFI_PREAMBLE_HT_MF,
+                             NanoSeconds(118800)) &&
+             CheckTxDuration(76,
+                             HtPhy::GetHtMcs7(),
+                             40,
+                             NanoSeconds(400),
+                             WIFI_PREAMBLE_HT_MF,
+                             NanoSeconds(43200)) &&
+             CheckTxDuration(14,
+                             HtPhy::GetHtMcs7(),
+                             40,
+                             NanoSeconds(400),
+                             WIFI_PREAMBLE_HT_MF,
+                             NanoSeconds(39600));
 
     NS_TEST_EXPECT_MSG_EQ(retval, true, "an 802.11n duration failed");
 
@@ -721,521 +759,620 @@
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs8(),
                              20,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(196)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs8(),
                              20,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(48)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs8(),
                              20,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(40)) &&
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs8(),
                              20,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(180)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs8(),
                              20,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(46800)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs8(),
                              20,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(39600)) &&
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs9(),
                              40,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(108)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs9(),
                              40,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(40)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs9(),
                              40,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(40)) &&
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs9(),
                              40,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(100800)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs9(),
                              40,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(39600)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs9(),
                              40,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(39600)) &&
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs0(),
                              80,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(460)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs0(),
                              80,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(60)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs0(),
                              80,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(44)) &&
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs0(),
                              80,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(417600)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs0(),
                              80,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(57600)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs0(),
                              80,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(43200)) &&
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs9(),
                              80,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(68)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs9(),
                              80,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(40)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs9(),
                              80,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(40)) &&
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs9(),
                              80,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(64800)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs9(),
                              80,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(39600)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs9(),
                              80,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(39600)) &&
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs8(),
                              160,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(56)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs8(),
                              160,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(40)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs8(),
                              160,
-                             800,
+                             NanoSeconds(800),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(40)) &&
              CheckTxDuration(1536,
                              VhtPhy::GetVhtMcs8(),
                              160,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              MicroSeconds(54)) &&
              CheckTxDuration(76,
                              VhtPhy::GetVhtMcs8(),
                              160,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(39600)) &&
              CheckTxDuration(14,
                              VhtPhy::GetVhtMcs8(),
                              160,
-                             400,
+                             NanoSeconds(400),
                              WIFI_PREAMBLE_VHT_SU,
                              NanoSeconds(39600));
 
     NS_TEST_EXPECT_MSG_EQ(retval, true, "an 802.11ac duration failed");
 
     // 802.11ax SU durations
-    retval =
-        retval &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        20,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(1485600)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs0(),
-                        20,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(125600)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs0(), 20, 800, WIFI_PREAMBLE_HE_SU, NanoSeconds(71200)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        40,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(764800)) &&
-        CheckTxDuration(76, HePhy::GetHeMcs0(), 40, 800, WIFI_PREAMBLE_HE_SU, NanoSeconds(84800)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs0(), 40, 800, WIFI_PREAMBLE_HE_SU, NanoSeconds(57600)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        80,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(397600)) &&
-        CheckTxDuration(76, HePhy::GetHeMcs0(), 80, 800, WIFI_PREAMBLE_HE_SU, NanoSeconds(71200)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs0(), 80, 800, WIFI_PREAMBLE_HE_SU, NanoSeconds(57600)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        160,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(220800)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs0(),
-                        160,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs0(),
-                        160,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        20,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(1570400)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs0(),
-                        20,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(130400)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs0(),
-                        20,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(72800)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        40,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(807200)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs0(),
-                        40,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(87200)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs0(),
-                        40,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        80,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(418400)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs0(),
-                        80,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(72800)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs0(),
-                        80,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        160,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(231200)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs0(),
-                        160,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs0(),
-                        160,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        20,
-                        3200,
-                        WIFI_PREAMBLE_HE_SU,
-                        MicroSeconds(1740)) &&
-        CheckTxDuration(76, HePhy::GetHeMcs0(), 20, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(140)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs0(), 20, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(76)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        40,
-                        3200,
-                        WIFI_PREAMBLE_HE_SU,
-                        MicroSeconds(892)) &&
-        CheckTxDuration(76, HePhy::GetHeMcs0(), 40, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(92)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs0(), 40, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        80,
-                        3200,
-                        WIFI_PREAMBLE_HE_SU,
-                        MicroSeconds(460)) &&
-        CheckTxDuration(76, HePhy::GetHeMcs0(), 80, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(76)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs0(), 80, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs0(),
-                        160,
-                        3200,
-                        WIFI_PREAMBLE_HE_SU,
-                        MicroSeconds(252)) &&
-        CheckTxDuration(76, HePhy::GetHeMcs0(), 160, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs0(), 160, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        20,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(139200)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs11(),
-                        20,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs11(),
-                        20,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        40,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(98400)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs11(),
-                        40,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs11(),
-                        40,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        80,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(71200)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs11(),
-                        80,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs11(),
-                        80,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        160,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs11(),
-                        160,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs11(),
-                        160,
-                        800,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(57600)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        20,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(144800)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs11(),
-                        20,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs11(),
-                        20,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        40,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(101600)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs11(),
-                        40,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs11(),
-                        40,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        80,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(72800)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs11(),
-                        80,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs11(),
-                        80,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        160,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs11(),
-                        160,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(14,
-                        HePhy::GetHeMcs11(),
-                        160,
-                        1600,
-                        WIFI_PREAMBLE_HE_SU,
-                        NanoSeconds(58400)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        20,
-                        3200,
-                        WIFI_PREAMBLE_HE_SU,
-                        MicroSeconds(156)) &&
-        CheckTxDuration(76, HePhy::GetHeMcs11(), 20, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs11(), 20, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        40,
-                        3200,
-                        WIFI_PREAMBLE_HE_SU,
-                        MicroSeconds(108)) &&
-        CheckTxDuration(76, HePhy::GetHeMcs11(), 40, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs11(), 40, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        80,
-                        3200,
-                        WIFI_PREAMBLE_HE_SU,
-                        MicroSeconds(76)) &&
-        CheckTxDuration(76, HePhy::GetHeMcs11(), 80, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs11(), 80, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60)) &&
-        CheckTxDuration(1536,
-                        HePhy::GetHeMcs11(),
-                        160,
-                        3200,
-                        WIFI_PREAMBLE_HE_SU,
-                        MicroSeconds(60)) &&
-        CheckTxDuration(76,
-                        HePhy::GetHeMcs11(),
-                        160,
-                        3200,
-                        WIFI_PREAMBLE_HE_SU,
-                        MicroSeconds(60)) &&
-        CheckTxDuration(14, HePhy::GetHeMcs11(), 160, 3200, WIFI_PREAMBLE_HE_SU, MicroSeconds(60));
+    retval = retval &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             20,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(1485600)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             20,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(125600)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             20,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(71200)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             40,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(764800)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             40,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(84800)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             40,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             80,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(397600)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             80,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(71200)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             80,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             160,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(220800)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             160,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             160,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             20,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(1570400)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             20,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(130400)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             20,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(72800)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             40,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(807200)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             40,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(87200)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             40,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             80,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(418400)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             80,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(72800)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             80,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             160,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(231200)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             160,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             160,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             20,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(1740)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             20,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(140)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             20,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(76)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             40,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(892)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             40,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(92)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             40,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             80,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(460)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             80,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(76)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             80,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs0(),
+                             160,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(252)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs0(),
+                             160,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs0(),
+                             160,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             20,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(139200)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             20,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             20,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             40,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(98400)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             40,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             40,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             80,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(71200)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             80,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             80,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             160,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             160,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             160,
+                             NanoSeconds(800),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(57600)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             20,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(144800)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             20,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             20,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             40,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(101600)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             40,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             40,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             80,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(72800)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             80,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             80,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             160,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             160,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             160,
+                             NanoSeconds(1600),
+                             WIFI_PREAMBLE_HE_SU,
+                             NanoSeconds(58400)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             20,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(156)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             20,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             20,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             40,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(108)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             40,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             40,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             80,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(76)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             80,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             80,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(1536,
+                             HePhy::GetHeMcs11(),
+                             160,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(76,
+                             HePhy::GetHeMcs11(),
+                             160,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60)) &&
+             CheckTxDuration(14,
+                             HePhy::GetHeMcs11(),
+                             160,
+                             NanoSeconds(3200),
+                             WIFI_PREAMBLE_HE_SU,
+                             MicroSeconds(60));
 
     NS_TEST_EXPECT_MSG_EQ(retval, true, "an 802.11ax SU duration failed");
 
@@ -1246,7 +1383,7 @@
                  std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 0, 1},
                                          {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
                  40,
-                 800,
+                 NanoSeconds(800),
                  WIFI_PREAMBLE_HE_MU,
                  NanoSeconds(
                      1493600)) // equivalent to HE_SU for 20 MHz with 2 extra HE-SIG-B (i.e. 8 us)
@@ -1254,14 +1391,14 @@
                                   std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 1, 1},
                                                           {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
                                   40,
-                                  800,
+                                  NanoSeconds(800),
                                   WIFI_PREAMBLE_HE_MU,
                                   NanoSeconds(1493600)) // shouldn't change if first PSDU is shorter
              && CheckMuTxDuration(std::list<uint32_t>{1536, 76},
                                   std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 0, 1},
                                                           {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
                                   40,
-                                  800,
+                                  NanoSeconds(800),
                                   WIFI_PREAMBLE_HE_MU,
                                   NanoSeconds(1493600));
 
@@ -1273,21 +1410,21 @@
                                std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 0, 1},
                                                        {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
                                40,
-                               800,
+                               NanoSeconds(800),
                                WIFI_PREAMBLE_EHT_MU,
                                NanoSeconds(1493600)) // equivalent to 802.11ax MU
              && CheckMuTxDuration(std::list<uint32_t>{1536, 1536},
                                   std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 1, 1},
                                                           {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
                                   40,
-                                  800,
+                                  NanoSeconds(800),
                                   WIFI_PREAMBLE_EHT_MU,
                                   NanoSeconds(1493600)) // shouldn't change if first PSDU is shorter
              && CheckMuTxDuration(std::list<uint32_t>{1536, 76},
                                   std::list<HeMuUserInfo>{{{HeRu::RU_242_TONE, 1, true}, 0, 1},
                                                           {{HeRu::RU_242_TONE, 2, true}, 0, 1}},
                                   40,
-                                  800,
+                                  NanoSeconds(800),
                                   WIFI_PREAMBLE_EHT_MU,
                                   NanoSeconds(1493600));
 
@@ -1319,7 +1456,7 @@
      *
      * \param userInfos the HE MU specific per-user information to use for the test
      * \param sigBMode the mode to transmit HE-SIG-B for the test
-     * \param channelWidth the channel width in MHz to select for the test
+     * \param channelWidth the channel width to select for the test
      * \param expectedMuType the expected MU type (OFDMA or MU-MIMO)
      * \param expectedRuAllocation the expected RU_ALLOCATION
      * \param expectedNumUsersPerCc the expected number of users per content channel
@@ -1327,7 +1464,7 @@
      */
     HeSigBDurationTest(const std::list<HeMuUserInfo>& userInfos,
                        const WifiMode& sigBMode,
-                       uint16_t channelWidth,
+                       MHz_u channelWidth,
                        MuType expectedMuType,
                        const RuAllocation& expectedRuAllocation,
                        const std::pair<std::size_t, std::size_t>& expectedNumUsersPerCc,
@@ -1345,7 +1482,7 @@
 
     std::list<HeMuUserInfo> m_userInfos; ///< HE MU specific per-user information
     WifiMode m_sigBMode;                 ///< Mode used to transmit HE-SIG-B
-    uint16_t m_channelWidth;             ///< Channel width in MHz
+    MHz_u m_channelWidth;                ///< Channel width
     MuType m_expectedMuType;             ///< Expected MU type (OFDMA or MU-MIMO)
     RuAllocation m_expectedRuAllocation; ///< Expected RU_ALLOCATION
     std::pair<std::size_t, std::size_t>
@@ -1356,7 +1493,7 @@
 HeSigBDurationTest::HeSigBDurationTest(
     const std::list<HeMuUserInfo>& userInfos,
     const WifiMode& sigBMode,
-    uint16_t channelWidth,
+    MHz_u channelWidth,
     MuType expectedMuType,
     const RuAllocation& expectedRuAllocation,
     const std::pair<std::size_t, std::size_t>& expectedNumUsersPerCc,
@@ -1378,7 +1515,7 @@
     WifiTxVector txVector;
     txVector.SetPreambleType(WIFI_PREAMBLE_HE_MU);
     txVector.SetChannelWidth(m_channelWidth);
-    txVector.SetGuardInterval(3200);
+    txVector.SetGuardInterval(NanoSeconds(3200));
     txVector.SetStbc(false);
     txVector.SetNess(0);
     std::list<uint16_t> staIds;
@@ -1567,7 +1704,7 @@
     {
         phyEntity = Create<OfdmPhy>(variant.first);
         std::size_t ratio = variant.second;
-        uint16_t bw = 20 / ratio; // MHz
+        MHz_u bw = 20 / ratio;
         txVector.SetChannelWidth(bw);
         txVector.SetMode(OfdmPhy::GetOfdmRate(12000000 / ratio, bw));
         nonHtMode = OfdmPhy::GetOfdmRate(6000000 / ratio, bw);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-aggregation-test.cc ns-3.43/src/wifi/test/wifi-aggregation-test.cc
--- ns-3.42/src/wifi/test/wifi-aggregation-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-aggregation-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,22 +1,12 @@
 /*
  * Copyright (c) 2015
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
 
+#include "ns3/config.h"
 #include "ns3/eht-configuration.h"
 #include "ns3/fcfs-wifi-queue-scheduler.h"
 #include "ns3/he-configuration.h"
@@ -950,11 +940,19 @@
  * maximum A-MPDU size is set to 7500 bytes, hence the remaining packets are sent
  * in an A-MPDU containing two MPDUs, the first one including 4 MSDUs and the second
  * one including 3 MPDUs.
+ *
+ * It is also checked that the MAC header of every MPDU is notified to the FrameExchangeManager
+ * while the PSDU is being transmitted.
  */
 class PreservePacketsInAmpdus : public TestCase
 {
   public:
-    PreservePacketsInAmpdus();
+    /**
+     * Constructor.
+     *
+     * \param notifyMacHdrRxEnd whether notification of MAC header reception end is enabled
+     */
+    PreservePacketsInAmpdus(bool notifyMacHdrRxEnd);
     ~PreservePacketsInAmpdus() override;
 
     void DoRun() override;
@@ -963,6 +961,11 @@
     std::list<Ptr<const Packet>> m_packetList; ///< List of packets passed to the MAC
     std::vector<std::size_t> m_nMpdus;         ///< Number of MPDUs in PSDUs passed to the PHY
     std::vector<std::size_t> m_nMsdus;         ///< Number of MSDUs in MPDUs passed to the PHY
+    Ptr<const WifiPsdu> m_txPsdu;              ///< PSDU being transmitted
+    std::vector<Ptr<WifiMpdu>>::const_iterator
+        m_expectedMpdu;        ///< next MPDU expected to be received
+    std::size_t m_nMacHdrs{0}; ///< Number of notified MAC headers in QoS data frames
+    bool m_notifyMacHdrRxEnd;  ///< whether notification of MAC header reception end is enabled
 
     /**
      * Callback invoked when an MSDU is passed to the MAC
@@ -977,15 +980,27 @@
      */
     void NotifyPsduForwardedDown(WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW);
     /**
+     * Callback invoked when the reception of the MAC header of an MPDU is completed.
+     * \param mac the MAC to which the reception of the MAC header is notified
+     * \param macHdr the MAC header of the MPDU being received
+     * \param txVector the TXVECTOR used to transmit the PSDU
+     * \param psduDuration the remaining duration of the PSDU
+     */
+    void NotifyMacHeaderEndRx(Ptr<WifiMac> mac,
+                              const WifiMacHeader& macHdr,
+                              const WifiTxVector& txVector,
+                              Time psduDuration);
+    /**
      * Callback invoked when the receiver MAC forwards a packet up to the upper layer
      * \param p the packet
      */
     void NotifyMacForwardUp(Ptr<const Packet> p);
 };
 
-PreservePacketsInAmpdus::PreservePacketsInAmpdus()
+PreservePacketsInAmpdus::PreservePacketsInAmpdus(bool notifyMacHdrRxEnd)
     : TestCase("Test case to check that the Wifi Mac forwards up the same packets received at "
-               "sender side.")
+               "sender side."),
+      m_notifyMacHdrRxEnd(notifyMacHdrRxEnd)
 {
 }
 
@@ -1008,6 +1023,19 @@
                           true,
                           "No DL MU PPDU expected");
 
+    // m_txPsdu is reset when the MAC header of the last MPDU in the PSDU is notified. By
+    // checking that m_txPsdu is nullptr when starting the transmission of a PSDU, we ensure
+    // that MAC headers are notified to the FEM while receiving MPDUs.
+    if (m_notifyMacHdrRxEnd)
+    {
+        NS_TEST_EXPECT_MSG_EQ(m_txPsdu,
+                              nullptr,
+                              "Missing MAC header notification: m_txPsdu was not reset");
+    }
+
+    m_txPsdu = psduMap.at(SU_STA_ID);
+    m_expectedMpdu = m_txPsdu->begin();
+
     if (!psduMap[SU_STA_ID]->GetHeader(0).IsQosData())
     {
         return;
@@ -1024,6 +1052,46 @@
 }
 
 void
+PreservePacketsInAmpdus::NotifyMacHeaderEndRx(Ptr<WifiMac> mac,
+                                              const WifiMacHeader& macHdr,
+                                              const WifiTxVector& txVector,
+                                              Time psduDuration)
+{
+    NS_TEST_EXPECT_MSG_NE(m_txPsdu,
+                          nullptr,
+                          "Notified of MAC header RX end while no PSDU is being transmitted");
+    // check that the FEM stores the expected MAC header (in a nanosecond, to avoid issues
+    // with the ordering of the callbacks connected to the trace source)
+    auto expectedHdr = (*m_expectedMpdu)->GetHeader();
+    Simulator::Schedule(NanoSeconds(1), [=, this]() {
+        auto macHdr = mac->GetFrameExchangeManager()->GetReceivedMacHdr();
+        NS_TEST_ASSERT_MSG_EQ(macHdr.has_value(),
+                              true,
+                              "Expected the FEM to store the MAC header being received");
+        NS_TEST_EXPECT_MSG_EQ(macHdr->get().GetSequenceNumber(),
+                              expectedHdr.GetSequenceNumber(),
+                              "Wrong sequence number in the MAC header stored by the FEM");
+    });
+
+    if (expectedHdr.IsQosData())
+    {
+        m_nMacHdrs++;
+    }
+
+    if (++m_expectedMpdu == m_txPsdu->end())
+    {
+        m_txPsdu = nullptr;
+        // check that the FEM stores no MAC header right after PSDU end
+        Simulator::Schedule(psduDuration + NanoSeconds(1), [=, this]() {
+            auto macHeader = mac->GetFrameExchangeManager()->GetReceivedMacHdr();
+            NS_TEST_EXPECT_MSG_EQ(macHeader.has_value(),
+                                  false,
+                                  "Expected the FEM to store no MAC header");
+        });
+    }
+}
+
+void
 PreservePacketsInAmpdus::NotifyMacForwardUp(Ptr<const Packet> p)
 {
     auto it = std::find(m_packetList.begin(), m_packetList.end(), p);
@@ -1034,6 +1102,8 @@
 void
 PreservePacketsInAmpdus::DoRun()
 {
+    Config::SetDefault("ns3::WifiPhy::NotifyMacHdrRxEnd", BooleanValue(m_notifyMacHdrRxEnd));
+
     NodeContainer wifiStaNode;
     wifiStaNode.Create(1);
 
@@ -1121,6 +1191,10 @@
     sta_device->GetPhy()->TraceConnectWithoutContext(
         "PhyTxPsduBegin",
         MakeCallback(&PreservePacketsInAmpdus::NotifyPsduForwardedDown, this));
+    ap_device->GetPhy()->TraceConnectWithoutContext(
+        "PhyRxMacHeaderEnd",
+        MakeCallback(&PreservePacketsInAmpdus::NotifyMacHeaderEndRx, this)
+            .Bind(ap_device->GetMac()));
     ap_device->GetMac()->TraceConnectWithoutContext(
         "MacRx",
         MakeCallback(&PreservePacketsInAmpdus::NotifyMacForwardUp, this));
@@ -1140,6 +1214,11 @@
     NS_TEST_EXPECT_MSG_EQ(m_nMpdus[1], 2, "Unexpected number of MPDUs in the second A-MPDU");
     NS_TEST_EXPECT_MSG_EQ(m_nMsdus[1], 4, "Unexpected number of MSDUs in the second MPDU");
     NS_TEST_EXPECT_MSG_EQ(m_nMsdus[2], 3, "Unexpected number of MSDUs in the third MPDU");
+    // Three MPDUs (of type QoS data) have been transmitted, so we expect that 3 MAC headers
+    // have been notified to the FEM
+    NS_TEST_EXPECT_MSG_EQ(m_nMacHdrs,
+                          (m_notifyMacHdrRxEnd ? 3 : 0),
+                          "Unexpected number of MAC headers notified to the FEM");
     // All the packets must have been forwarded up at the receiver
     NS_TEST_EXPECT_MSG_EQ(m_packetList.empty(), true, "Some packets have not been forwarded up");
 }
@@ -1165,7 +1244,8 @@
     AddTestCase(new HeAggregationTest(256), TestCase::Duration::QUICK);
     AddTestCase(new EhtAggregationTest(512), TestCase::Duration::QUICK);
     AddTestCase(new EhtAggregationTest(1024), TestCase::Duration::QUICK);
-    AddTestCase(new PreservePacketsInAmpdus, TestCase::Duration::QUICK);
+    AddTestCase(new PreservePacketsInAmpdus(true), TestCase::Duration::QUICK);
+    AddTestCase(new PreservePacketsInAmpdus(false), TestCase::Duration::QUICK);
 }
 
 static WifiAggregationTestSuite g_wifiAggregationTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-channel-switching-test.cc ns-3.43/src/wifi/test/wifi-channel-switching-test.cc
--- ns-3.42/src/wifi/test/wifi-channel-switching-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-channel-switching-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -257,7 +246,7 @@
     m_apDevice = wifi.Install(phy, mac, m_apNode);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(m_apDevice, streamNumber);
+    WifiHelper::AssignStreams(m_apDevice, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-dynamic-bw-op-test.cc ns-3.43/src/wifi/test/wifi-dynamic-bw-op-test.cc
--- ns-3.42/src/wifi/test/wifi-dynamic-bw-op-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-dynamic-bw-op-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -54,9 +43,9 @@
      * Constructor
      *
      * \param channelStr channel setting strings for BSS 0 and BSS 1
-     * \param bss0Width width (MHz) of the transmission in BSS 0 started when BSS 1 is transmitting
+     * \param bss0Width width of the transmission in BSS 0 started when BSS 1 is transmitting
      */
-    WifiUseAvailBwTest(std::initializer_list<std::string> channelStr, uint16_t bss0Width);
+    WifiUseAvailBwTest(std::initializer_list<std::string> channelStr, MHz_u bss0Width);
     ~WifiUseAvailBwTest() override;
 
     /**
@@ -94,7 +83,7 @@
     };
 
     std::vector<std::string> m_channelStr;        ///< channel setting strings
-    uint16_t m_bss0Width;                         ///< width (MHz) of the transmission in BSS 0
+    MHz_u m_bss0Width;                            ///< width of the transmission in BSS 0
                                                   ///< started when BSS 1 is transmitting
     NetDeviceContainer m_staDevices;              ///< container for stations' NetDevices
     NetDeviceContainer m_apDevices;               ///< container for AP's NetDevice
@@ -106,7 +95,7 @@
 };
 
 WifiUseAvailBwTest::WifiUseAvailBwTest(std::initializer_list<std::string> channelStr,
-                                       uint16_t bss0Width)
+                                       MHz_u bss0Width)
     : TestCase("Check transmission on available bandwidth"),
       m_channelStr(channelStr),
       m_bss0Width(bss0Width),
@@ -232,8 +221,8 @@
     Ptr<WifiNetDevice> dev;
 
     // Assign fixed streams to random variables in use
-    streamNumber += wifi.AssignStreams(m_apDevices, streamNumber);
-    streamNumber += wifi.AssignStreams(m_staDevices, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(m_apDevices, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(m_staDevices, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-eht-info-elems-test.cc ns-3.43/src/wifi/test/wifi-eht-info-elems-test.cc
--- ns-3.42/src/wifi/test/wifi-eht-info-elems-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-eht-info-elems-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -779,9 +768,9 @@
     /**
      * Constructor
      * \param is2_4Ghz whether the PHY is operating in 2.4 GHz
-     * \param channelWidth the supported channel width in MHz
+     * \param channelWidth the supported channel width
      */
-    WifiEhtCapabilitiesIeTest(bool is2_4Ghz, uint16_t channelWidth);
+    WifiEhtCapabilitiesIeTest(bool is2_4Ghz, MHz_u channelWidth);
     ~WifiEhtCapabilitiesIeTest() override = default;
 
     /**
@@ -847,11 +836,11 @@
   private:
     void DoRun() override;
 
-    bool m_is2_4Ghz;         //!< whether the PHY is operating in 2.4 GHz
-    uint16_t m_channelWidth; //!< Supported channel width by the PHY (in MHz)
+    bool m_is2_4Ghz;      //!< whether the PHY is operating in 2.4 GHz
+    MHz_u m_channelWidth; //!< Supported channel width by the PHY
 };
 
-WifiEhtCapabilitiesIeTest ::WifiEhtCapabilitiesIeTest(bool is2_4Ghz, uint16_t channelWidth)
+WifiEhtCapabilitiesIeTest ::WifiEhtCapabilitiesIeTest(bool is2_4Ghz, MHz_u channelWidth)
     : HeaderSerializationTestCase{"Check serialization and deserialization of EHT capabilities IE"},
       m_is2_4Ghz{is2_4Ghz},
       m_channelWidth{channelWidth}
@@ -1064,7 +1053,7 @@
 {
     uint8_t maxMcs = 0;
     uint16_t expectedEhtMcsAndNssSetSize = 0;
-    switch (m_channelWidth)
+    switch (static_cast<uint16_t>(m_channelWidth))
     {
     case 20:
         expectedEhtMcsAndNssSetSize = 4;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-emlsr-test.cc ns-3.43/src/wifi/test/wifi-emlsr-test.cc
--- ns-3.42/src/wifi/test/wifi-emlsr-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-emlsr-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -153,7 +142,7 @@
 EmlsrOperationsTestBase::DoSetup()
 {
     RngSeedManager::SetSeed(1);
-    RngSeedManager::SetRun(2);
+    RngSeedManager::SetRun(1);
     int64_t streamNumber = 100;
 
     Config::SetDefault("ns3::WifiMac::MpduBufferSize", UintegerValue(64));
@@ -177,6 +166,7 @@
     // MLDs are configured with three links
     SpectrumWifiPhyHelper phyHelper(3);
     phyHelper.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+    phyHelper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
     phyHelper.Set(0, "ChannelSettings", StringValue("{2, 0, BAND_2_4GHZ, 0}"));
     phyHelper.Set(1, "ChannelSettings", StringValue("{36, 0, BAND_5GHZ, 0}"));
     phyHelper.Set(2, "ChannelSettings", StringValue("{1, 0, BAND_6GHZ, 0}"));
@@ -201,7 +191,7 @@
                 UintegerValue(1e6), // do not deassociate
                 "ActiveProbing",
                 BooleanValue(false));
-    mac.SetEmlsrManager("ns3::DefaultEmlsrManager",
+    mac.SetEmlsrManager("ns3::AdvancedEmlsrManager",
                         "EmlsrLinkSet",
                         AttributeContainerValue<UintegerValue>(m_linksToEnableEmlsrOn),
                         "MainPhyId",
@@ -262,8 +252,8 @@
     // phyHelper.EnablePcap("wifi-emlsr_STA", staDevices);
 
     // Assign fixed streams to random variables in use
-    streamNumber += wifi.AssignStreams(apDevice, streamNumber);
-    streamNumber += wifi.AssignStreams(staDevices, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(staDevices, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -2397,7 +2387,8 @@
       m_countQoSframes(0),
       m_countBlockAck(0),
       m_countRtsframes(0),
-      m_genBackoffIfTxopWithoutTx(params.genBackoffIfTxopWithoutTx)
+      m_genBackoffIfTxopWithoutTx(params.genBackoffAndUseAuxPhyCca),
+      m_useAuxPhyCca(params.genBackoffAndUseAuxPhyCca)
 {
     m_nEmlsrStations = 1;
     m_nNonEmlsrStations = 0;
@@ -2430,6 +2421,7 @@
     Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth",
                        UintegerValue(m_auxPhyChannelWidth));
     Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(false));
+    Config::SetDefault("ns3::AdvancedEmlsrManager::UseAuxPhyCca", BooleanValue(m_useAuxPhyCca));
     Config::SetDefault("ns3::EhtConfiguration::MediumSyncDuration",
                        TimeValue(m_mediumSyncDuration));
     Config::SetDefault("ns3::EhtConfiguration::MsdMaxNTxops", UintegerValue(m_msdMaxNTxops));
@@ -2449,10 +2441,10 @@
     // configure channels of the given width
     for (auto band : {WIFI_PHY_BAND_2_4GHZ, WIFI_PHY_BAND_5GHZ, WIFI_PHY_BAND_6GHZ})
     {
-        uint16_t bw = 20;
+        MHz_u bw = 20;
         uint8_t number = band == WIFI_PHY_BAND_5GHZ ? 36 : 1;
 
-        auto width = std::min<uint16_t>(m_channelWidth, band == WIFI_PHY_BAND_2_4GHZ ? 40 : 160);
+        auto width = std::min<MHz_u>(m_channelWidth, band == WIFI_PHY_BAND_2_4GHZ ? 40 : 160);
         while (bw < width)
         {
             bw *= 2;
@@ -2507,10 +2499,26 @@
 
     if (m_checkBackoffStarted)
     {
-        m_backoffEndTime = Simulator::Now() +
-                           m_staMacs[0]->GetChannelAccessManager(linkId)->GetSifs() +
-                           (m_staMacs[0]->GetQosTxop(AC_BE)->GetAifsn(linkId) + backoff) *
-                               m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
+        if (!m_backoffEndTime.has_value())
+        {
+            // this is the first time we set m_backoffEndTime, which is done right after receiving
+            // a BlockAck, thus we have to wait an AIFS before invoking backoff
+            m_backoffEndTime = Simulator::Now() +
+                               m_staMacs[0]->GetChannelAccessManager(linkId)->GetSifs() +
+                               m_staMacs[0]->GetQosTxop(AC_BE)->GetAifsn(linkId) *
+                                   m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
+        }
+        else
+        {
+            // 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
+            m_backoffEndTime =
+                Simulator::Now() + m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
+        }
+        // add the time corresponding to the generated number of slots
+        m_backoffEndTime.value() +=
+            backoff * m_staMacs[0]->GetChannelAccessManager(linkId)->GetSlot();
+        NS_LOG_DEBUG("Expected backoff end time = " << m_backoffEndTime->As(Time::US) << "\n");
     }
 }
 
@@ -2534,6 +2542,10 @@
         NS_TEST_EXPECT_MSG_EQ(+linkId, +m_mainPhyId, "AssocReq not sent by the main PHY");
         break;
 
+    case WIFI_MAC_CTL_TRIGGER:
+        CheckInitialControlFrame(*psdu->begin(), txVector, linkId);
+        break;
+
     case WIFI_MAC_CTL_RTS:
         CheckRtsFrames(*psdu->begin(), txVector, linkId);
         break;
@@ -2648,7 +2660,7 @@
                     false);
 
                 Simulator::Schedule(
-                    txDuration + MicroSeconds(1) /* propagation delay */,
+                    txDuration + MicroSeconds(MAX_PROPAGATION_DELAY_USEC),
                     [=, this]() {
                         CheckBlockedLink(
                             m_apMac,
@@ -2776,6 +2788,23 @@
     auto txDuration =
         WifiPhy::CalculateTxDuration(psduMap, txVector, m_apMac->GetWifiPhy(linkId)->GetPhyBand());
 
+    // in this test, BlockAck frames terminates TXOP. If a BlockAck frame is sent on an EMLSR link
+    // other than the main PHY link, it means that the aux PHY associated with that link is in
+    // sleep mode and it is resumed after the end of the BlockAck frame
+    if (linkId != m_mainPhyId && linkId != m_nonEmlsrLink)
+    {
+        Simulator::Schedule(txDuration - NanoSeconds(1), [=, this]() {
+            NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetDevice()->GetPhy(linkId)->IsStateSleep(),
+                                  true,
+                                  "Aux PHY on link " << +linkId << " not in sleep mode");
+        });
+        Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
+            NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetDevice()->GetPhy(linkId)->IsStateSleep(),
+                                  false,
+                                  "Aux PHY on link " << +linkId << " in sleep mode");
+        });
+    }
+
     switch (m_countBlockAck)
     {
     case 1:
@@ -2852,7 +2881,7 @@
         NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
         m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
         break;
-    case 6:
+    case 6: {
         // block transmission on the main PHY link and on the non-EMLSR link (if any), so that
         // the next QoS frames are sent on a link where an aux PHY is operating
         std::set<uint8_t> linkIds{m_mainPhyId};
@@ -2867,6 +2896,7 @@
                                                           m_staMacs[0]->GetAddress(),
                                                           {0},
                                                           linkIds);
+    }
         // make sure aux PHYs are capable of transmitting frames
         m_staMacs[0]->UnblockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
                                               m_apMac->GetAddress(),
@@ -2875,12 +2905,146 @@
         // generate data packets for another UL data frame
         NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
         m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
+        break;
+    case 7:
+        // make the aux PHY(s) not capable of transmitting frames
+        m_staMacs[0]->GetEmlsrManager()->SetAuxPhyTxCapable(false);
+        if (!m_nonEmlsrLink)
+        {
+            // if there are two non-primary links, set MediumSyncDuration to zero so that the
+            // next UL QoS data frame is not protected also in case it is transmitted on the
+            // non-primary link other than the one on which the last frame exchange occurred
+            m_staMacs[0]->GetEmlsrManager()->SetMediumSyncDuration(Seconds(0));
+        }
+
+        // generate a very large backoff for the primary link, so that when an aux PHY gains a
+        // TXOP, it requests the main PHY to switch to its link to transmit the frames
+        m_staMacs[0]->GetQosTxop(AC_BE)->StartBackoffNow(100, m_mainPhyId);
+
+        // events to be scheduled at the end of the BlockAck response
+        Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
+            // check that the main PHY switches to its primary link
+            auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+            auto mainPhyLinkid = m_staMacs[0]->GetLinkForPhy(mainPhy);
+
+            NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
+                                  true,
+                                  "Main PHY is not switching at time "
+                                      << Simulator::Now().As(Time::NS));
+            NS_TEST_ASSERT_MSG_EQ(mainPhyLinkid.has_value(),
+                                  true,
+                                  "Main PHY should be operating on a link");
+            NS_TEST_EXPECT_MSG_EQ(+mainPhyLinkid.value(),
+                                  +m_mainPhyId,
+                                  "Main PHY expected to operate on the primary link");
+
+            // events to be scheduled when the first main PHY channel switch is completed
+            Simulator::Schedule(mainPhy->GetChannelSwitchDelay(), [=, this]() {
+                auto acBe = m_staMacs[0]->GetQosTxop(AC_BE);
+
+                // find the min remaining backoff time on non-primary links for AC BE
+                auto minBackoff = Time::Max();
+                for (uint8_t id = 0; id < m_staMacs[0]->GetNLinks(); id++)
+                {
+                    // update backoff
+                    m_staMacs[0]->GetChannelAccessManager(id)->NeedBackoffUponAccess(acBe,
+                                                                                     true,
+                                                                                     true);
+                    if (auto backoff =
+                            m_staMacs[0]->GetChannelAccessManager(id)->GetBackoffEndFor(acBe);
+                        id != m_mainPhyId && m_staMacs[0]->IsEmlsrLink(id) && backoff < minBackoff)
+                    {
+                        minBackoff = backoff;
+                    }
+                }
+
+                // if the backoff on a link has expired before the end of the main PHY channel
+                // switch, the main PHY will be requested to switch again at the first slot
+                // boundary after the end of the channel switch. Otherwise, it will be requested
+                // to switch when the backoff expires.
+                auto expected2ndSwitchDelay = (minBackoff <= Simulator::Now())
+                                                  ? mainPhy->GetSlot()
+                                                  : (minBackoff - Simulator::Now());
+
+                // check that the main PHY is requested to switch to a non-primary link after
+                // the expected delay
+                Simulator::Schedule(expected2ndSwitchDelay + NanoSeconds(1), [=, this]() {
+                    NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
+                                          true,
+                                          "Main PHY is not switching at time "
+                                              << Simulator::Now().As(Time::NS));
+                    NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetLinkForPhy(mainPhy).has_value(),
+                                          false,
+                                          "Main PHY should not be operating on a link because it "
+                                          "should be switching to a non-primary link");
+
+                    // events to be scheduled when main PHY finishes switching to non-primary link
+                    Simulator::Schedule(mainPhy->GetDelayUntilIdle(), [=, this]() {
+                        auto nonPrimLinkId = m_staMacs[0]->GetLinkForPhy(mainPhy);
+
+                        NS_TEST_ASSERT_MSG_EQ(nonPrimLinkId.has_value(),
+                                              true,
+                                              "Main PHY should have completed switching");
+                        // update backoff on the non-primary link on which main PHY is operating
+                        m_staMacs[0]
+                            ->GetChannelAccessManager(*nonPrimLinkId)
+                            ->NeedBackoffUponAccess(acBe, true, true);
+                        // record the time the transmission of the QoS data frames must have
+                        // started: (a PIFS after) end of channel switch, if the backoff counter
+                        // on the non-primary link is null and UseAuxPhyCca is true (false); when
+                        // the backoff expires, otherwise
+                        if (auto slots = acBe->GetBackoffSlots(*nonPrimLinkId); slots == 0)
+                        {
+                            m_5thQosFrameTxTime =
+                                Simulator::Now() + (m_useAuxPhyCca ? Time{0} : mainPhy->GetPifs());
+                        }
+                        else
+                        {
+                            m_5thQosFrameTxTime = m_staMacs[0]
+                                                      ->GetChannelAccessManager(*nonPrimLinkId)
+                                                      ->GetBackoffEndFor(acBe);
+                        }
+                    });
+                });
+            });
+        });
+
+        // generate data packets for another UL data frame
+        NS_LOG_INFO("Enqueuing two packets at the EMLSR client\n");
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
 
         break;
     }
 }
 
 void
+EmlsrUlTxopTest::CheckInitialControlFrame(Ptr<const WifiMpdu> mpdu,
+                                          const WifiTxVector& txVector,
+                                          uint8_t linkId)
+{
+    CtrlTriggerHeader trigger;
+    mpdu->GetPacket()->PeekHeader(trigger);
+    if (!trigger.IsMuRts())
+    {
+        return;
+    }
+
+    if (linkId != m_mainPhyId && linkId != m_nonEmlsrLink)
+    {
+        // this is an ICF sent on an aux PHY link to start a DL TXOP. Given that aux PHYs do not
+        // switch channel, they are put in sleep mode while the main PHY is operating on their link
+        auto auxPhy = m_staMacs[0]->GetWifiPhy(linkId);
+        auto txDuration =
+            WifiPhy::CalculateTxDuration(mpdu->GetSize(), txVector, auxPhy->GetPhyBand());
+        Simulator::Schedule(txDuration + NanoSeconds(1), [=, this]() {
+            NS_TEST_EXPECT_MSG_EQ(auxPhy->IsStateSleep(),
+                                  true,
+                                  "Aux PHY on link " << +linkId << " not in sleep mode");
+        });
+    }
+}
+
+void
 EmlsrUlTxopTest::CheckRtsFrames(Ptr<const WifiMpdu> mpdu,
                                 const WifiTxVector& txVector,
                                 uint8_t linkId)
@@ -2923,6 +3087,42 @@
                                 const WifiTxVector& txVector,
                                 uint8_t linkId)
 {
+    if (m_firstUlPktsGenTime.IsZero())
+    {
+        // this function only considers CTS frames sent after the first QoS data frame
+        return;
+    }
+
+    auto txDuration = WifiPhy::CalculateTxDuration(mpdu->GetSize(),
+                                                   txVector,
+                                                   m_apMac->GetWifiPhy(linkId)->GetPhyBand());
+
+    if (linkId != m_mainPhyId && linkId != m_nonEmlsrLink &&
+        mpdu->GetHeader().GetAddr1() == m_staMacs[0]->GetFrameExchangeManager(linkId)->GetAddress())
+    {
+        // this is a CTS sent to an aux PHY starting an UL TXOP. Given that aux PHYs do not
+        // switch channel, they are put in sleep mode when the main PHY starts operating on their
+        // link, which coincides with the end of CTS plus two propagation delays
+        auto auxPhy = m_staMacs[0]->GetWifiPhy(linkId);
+        Simulator::Schedule(txDuration, [=, this]() {
+            NS_TEST_EXPECT_MSG_EQ(auxPhy->IsStateSleep(),
+                                  false,
+                                  "Aux PHY on link " << +linkId << " already in sleep mode");
+        });
+        // if the CTS is corrupted, the TXOP ends and the aux PHY is not put to sleep
+        auto isStateSleep = !(m_corruptCts.has_value() && *m_corruptCts);
+
+        Simulator::Schedule(
+            txDuration + MicroSeconds(2 * MAX_PROPAGATION_DELAY_USEC) + NanoSeconds(1),
+            [=, this]() {
+                NS_TEST_EXPECT_MSG_EQ(auxPhy->IsStateSleep(),
+                                      isStateSleep,
+                                      "Aux PHY on link " << +linkId
+                                                         << (isStateSleep ? " not yet" : " already")
+                                                         << " in sleep mode");
+            });
+    }
+
     if (m_corruptCts.has_value() && *m_corruptCts)
     {
         // corrupt reception at EMLSR client
@@ -2930,9 +3130,6 @@
         m_errorModel->SetList({mpdu->GetPacket()->GetUid()});
         m_corruptCts = false;
 
-        auto txDuration = WifiPhy::CalculateTxDuration(mpdu->GetSize(),
-                                                       txVector,
-                                                       m_apMac->GetWifiPhy(linkId)->GetPhyBand());
         // main PHY is about to complete channel switch when CTS ends
         Simulator::Schedule(txDuration, [=, this]() {
             const auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
@@ -2961,7 +3158,7 @@
     {
         NS_TEST_EXPECT_MSG_LT_OR_EQ(
             m_countRtsframes,
-            m_msdMaxNTxops,
+            +m_msdMaxNTxops,
             "Unexpected number of RTS frames sent while the MediumSyncDelay timer is running");
     }
 
@@ -3046,15 +3243,19 @@
      *            └───┴───┘
      *
      * For both scenarios, after the last frame exchange on the main PHY link, we have the
-     * following frame exchange on an EMLSR link where an aux PHY is operating on:
+     * following frame exchanges on an EMLSR link where an aux PHY is operating on. After the
+     * first frame exchange, aux PHYs are configured as non-TX capable. Note that the two frame
+     * exchanges may occur on distinct non-primary EMLSR links.
      *
-     *             ┌───┐              ┌───┐         ┌──┐
-     *             │CTS│              │CTS│         │BA│
-     *  ──────┬───┬┴───X─────────┬───┬┴───┴┬───┬───┬┴──┴─────────────────────────────────────
-     *        │RTS│              │RTS│     │QoS│QoS│
-     *        └───┘              └───┘     │ X │ Y │
-     *                                     └───┴───┘
-     * For all EMLSR links scenario, X=10, Y=11; otherwise, X=12, Y=13.
+     *                                             | main PHY || main PHY  |
+     *  [ link ]   ┌───┐         ┌───┐         ┌──┐| switches ||switches to|             ┌──┐
+     *  [0 or 2]   │CTS│         │CTS│         │BA│|to primary||non-primary|PIFS|        │BA│
+     *  ──────┬───┬┴───X────┬───┬┴───┴┬───┬───┬┴──┴─────────────────────────────┬───┬───┬┴──┴────
+     *        │RTS│         │RTS│     │QoS│QoS│                                 │QoS│QoS│
+     *        └───┘         └───┘     │ X │ Y │                                 │ Z │ W │
+     *                                └───┴───┘                                 └───┴───┘
+     * For all EMLSR links scenario, X=10, Y=11, Z=12, W=13
+     * For the scenario with a non-EMLSR link, X=12, Y=13, Z=14, W=15
      */
 
     // jump to the first (non-Beacon) frame transmitted after establishing BA agreements and
@@ -3161,15 +3362,15 @@
 
             NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
                                   +m_mainPhyId,
-                                  "Last QoS data frame should be transmitted by the main PHY");
+                                  "Third QoS data frame should be transmitted by the main PHY");
             NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
                                   m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId)->GetChannelWidth(),
-                                  "Expecting TX width of last data frame to equal the channel "
+                                  "Expecting TX width of third data frame to equal the channel "
                                   "width used by the main PHY");
             NS_TEST_EXPECT_MSG_GT_OR_EQ(
                 psduIt->startTx,
                 m_lastMsdExpiryTime,
-                "Last QoS data frame sent before MediumSyncDelay timer expired");
+                "Third QoS data frame sent before MediumSyncDelay timer expired");
 
             break;
         }
@@ -3177,88 +3378,122 @@
 
     NS_TEST_EXPECT_MSG_EQ(moreQosDataFound,
                           true,
-                          "Last QoS data frame transmitted by the main PHY not found");
+                          "Third QoS data frame transmitted by the main PHY not found");
 
     NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()), true, "Expected more frames");
     ++psduIt;
     jumpToQosDataOrMuRts();
 
-    // the first attempt at transmitting the last QoS data frame fails because CTS is corrupted
+    // the first attempt at transmitting the fourth QoS data frame fails because CTS is corrupted
     // RTS
     NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
                           true,
-                          "RTS before last QoS data frame has not been transmitted");
+                          "RTS before fourth QoS data frame has not been transmitted");
     NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts(),
                           true,
-                          "Last QoS data frame should be transmitted with protection");
+                          "Fourth QoS data frame should be transmitted with protection");
     NS_TEST_EXPECT_MSG_NE(
         +psduIt->phyId,
         +m_mainPhyId,
-        "RTS before last QoS data frame should not be transmitted by the main PHY");
+        "RTS before fourth QoS data frame should not be transmitted by the main PHY");
     NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
                           m_auxPhyChannelWidth,
-                          "RTS before last data frame transmitted on an unexpected width");
+                          "RTS before fourth data frame transmitted on an unexpected width");
     psduIt++;
     // CTS
     NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
                           true,
-                          "CTS before last QoS data frame has not been transmitted");
+                          "CTS before fourth QoS data frame has not been transmitted");
     NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsCts(),
                           true,
-                          "CTS before last QoS data frame has not been transmitted");
+                          "CTS before fourth QoS data frame has not been transmitted");
     psduIt++;
     jumpToQosDataOrMuRts();
 
-    // the last QoS data frame is transmitted by an aux PHY after that the aux PHY has
+    // the fourth QoS data frame is transmitted by an aux PHY after that the aux PHY has
     // obtained a TXOP and sent an RTS
     // RTS
     NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
                           true,
-                          "RTS before last QoS data frame has not been transmitted");
+                          "RTS before fourth QoS data frame has not been transmitted");
     NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsRts(),
                           true,
-                          "Last QoS data frame should be transmitted with protection");
+                          "Fourth QoS data frame should be transmitted with protection");
     NS_TEST_EXPECT_MSG_NE(
         +psduIt->phyId,
         +m_mainPhyId,
-        "RTS before last QoS data frame should not be transmitted by the main PHY");
+        "RTS before fourth QoS data frame should not be transmitted by the main PHY");
     NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
                           m_auxPhyChannelWidth,
-                          "RTS before last data frame transmitted on an unexpected width");
+                          "RTS before fourth data frame transmitted on an unexpected width");
     psduIt++;
     // CTS
     NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
                           true,
-                          "CTS before last QoS data frame has not been transmitted");
+                          "CTS before fourth QoS data frame has not been transmitted");
     NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsCts(),
                           true,
-                          "CTS before last QoS data frame has not been transmitted");
+                          "CTS before fourth QoS data frame has not been transmitted");
     psduIt++;
     // QoS Data
     NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
                           true,
-                          "Last QoS data frame has not been transmitted");
+                          "Fourth QoS data frame has not been transmitted");
     NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
                           true,
-                          "Last QoS data frame has not been transmitted");
+                          "Fourth QoS data frame has not been transmitted");
     NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
                           +m_mainPhyId,
-                          "Last QoS data frame should be transmitted by the main PHY");
+                          "Fourth QoS data frame should be transmitted by the main PHY");
     NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
                           m_auxPhyChannelWidth,
-                          "Last data frame not transmitted on the same width as RTS");
+                          "Fourth data frame not transmitted on the same width as RTS");
+
+    psduIt++;
+    jumpToQosDataOrMuRts();
+
+    // the fifth QoS data frame is transmitted by the main PHY on a non-primary link because
+    // the aux PHY is not TX capable. The QoS data frame is not protected by RTS
+    // QoS Data
+    NS_TEST_ASSERT_MSG_EQ((psduIt != m_txPsdus.cend()),
+                          true,
+                          "Fifth QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->psduMap.cbegin()->second->GetHeader(0).IsQosData(),
+                          true,
+                          "Fifth QoS data frame has not been transmitted");
+    NS_TEST_EXPECT_MSG_EQ(+psduIt->phyId,
+                          +m_mainPhyId,
+                          "Fifth QoS data frame should be transmitted by the main PHY");
+    NS_TEST_EXPECT_MSG_NE(+psduIt->linkId,
+                          +m_mainPhyId,
+                          "Fifth QoS data frame should be transmitted on a non-primary link");
+    NS_TEST_EXPECT_MSG_EQ(psduIt->txVector.GetChannelWidth(),
+                          (m_useAuxPhyCca ? m_auxPhyChannelWidth : m_channelWidth),
+                          "Fifth data frame not transmitted on the correct channel width");
+    // Do not check the start transmission time if a backoff is generated even when no
+    // transmission is done (if the backoff expires while the main PHY is switching, a new
+    // backoff is generated and, before this backoff expires, the main PHY may be requested
+    // to switch to another non-primary link; this may happen multiple times...)
+    if (!m_genBackoffIfTxopWithoutTx)
+    {
+        NS_TEST_EXPECT_MSG_LT_OR_EQ(psduIt->startTx,
+                                    m_5thQosFrameTxTime,
+                                    "Fifth data frame transmitted too late");
+    }
 }
 
 EmlsrLinkSwitchTest::EmlsrLinkSwitchTest(const Params& params)
-    : EmlsrOperationsTestBase(std::string("Check EMLSR link switching (switchAuxPhy=") +
-                              std::to_string(params.switchAuxPhy) +
-                              ", resetCamState=" + std::to_string(params.resetCamState) +
-                              ", auxPhyMaxChWidth=" + std::to_string(params.auxPhyMaxChWidth) +
-                              "MHz )"),
+    : EmlsrOperationsTestBase(
+          std::string("Check EMLSR link switching (switchAuxPhy=") +
+          std::to_string(params.switchAuxPhy) + ", resetCamStateAndInterruptSwitch=" +
+          std::to_string(params.resetCamStateAndInterruptSwitch) +
+          ", auxPhyMaxChWidth=" + std::to_string(params.auxPhyMaxChWidth) + "MHz )"),
       m_switchAuxPhy(params.switchAuxPhy),
-      m_resetCamState(params.resetCamState),
+      m_resetCamStateAndInterruptSwitch(params.resetCamStateAndInterruptSwitch),
       m_auxPhyMaxChWidth(params.auxPhyMaxChWidth),
       m_countQoSframes(0),
+      m_countIcfFrames(0),
+      m_countRtsFrames(0),
       m_txPsdusPos(0)
 {
     m_nEmlsrStations = 1;
@@ -3269,7 +3504,7 @@
     m_duration = Seconds(1.0);
     // when aux PHYs do not switch link, the main PHY switches back to its previous link after
     // a TXOP, hence the transition delay must exceed the channel switch delay (default: 250us)
-    m_transitionDelay = {MicroSeconds(256)};
+    m_transitionDelay = {MicroSeconds(128)};
 }
 
 void
@@ -3319,12 +3554,6 @@
                                                          {0},
                                                          linksToBlock);
         }
-        else if (category == WifiActionHeader::BLOCK_ACK &&
-                 action.blockAck == WifiActionHeader::BLOCK_ACK_ADDBA_RESPONSE)
-        {
-            // store the current number of transmitted frame
-            m_txPsdusPos = m_txPsdus.size() - 1;
-        }
     }
     break;
 
@@ -3336,6 +3565,10 @@
         CheckQosFrames(psduMap, txVector, linkId);
         break;
 
+    case WIFI_MAC_CTL_RTS:
+        CheckRtsFrame(psduMap, txVector, linkId);
+        break;
+
     default:;
     }
 }
@@ -3344,12 +3577,22 @@
 EmlsrLinkSwitchTest::DoSetup()
 {
     Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(m_switchAuxPhy));
-    Config::SetDefault("ns3::EmlsrManager::ResetCamState", BooleanValue(m_resetCamState));
+    Config::SetDefault("ns3::EmlsrManager::ResetCamState",
+                       BooleanValue(m_resetCamStateAndInterruptSwitch));
+    Config::SetDefault("ns3::AdvancedEmlsrManager::InterruptSwitch",
+                       BooleanValue(m_resetCamStateAndInterruptSwitch));
     Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth", UintegerValue(m_auxPhyMaxChWidth));
     Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(MicroSeconds(75)));
+    Config::SetDefault("ns3::EhtConfiguration::MediumSyncDuration", TimeValue(Time{0}));
 
     EmlsrOperationsTestBase::DoSetup();
 
+    m_errorModel = CreateObject<ListErrorModel>();
+    for (std::size_t linkId = 0; linkId < m_apMac->GetNLinks(); ++linkId)
+    {
+        m_apMac->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_errorModel);
+    }
+
     // use channels of different widths
     for (auto mac : std::initializer_list<Ptr<WifiMac>>{m_apMac, m_staMacs[0]})
     {
@@ -3437,18 +3680,59 @@
         // hence triggering yet another link switching on the EMLSR client
         m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(DOWNLINK, 0, 2, 1000));
         break;
+    case 4:
+        // block transmissions on all links at non-AP MLD side
+        m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                          AC_BE,
+                                                          {WIFI_QOSDATA_QUEUE},
+                                                          m_apMac->GetAddress(),
+                                                          m_staMacs[0]->GetAddress(),
+                                                          {0},
+                                                          {0, 1, 2});
+        // unblock transmissions on the link used for ML setup (non-AP MLD side)
+        m_staMacs[0]->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                            AC_BE,
+                                                            {WIFI_QOSDATA_QUEUE},
+                                                            m_apMac->GetAddress(),
+                                                            m_staMacs[0]->GetAddress(),
+                                                            {0},
+                                                            {m_mainPhyId});
+        // trigger establishment of BA agreement with AP as recipient
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 4, 1000));
+        break;
+    case 5:
+        // unblock transmissions on all links at non-AP MLD side
+        m_staMacs[0]->GetMacQueueScheduler()->UnblockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                            AC_BE,
+                                                            {WIFI_QOSDATA_QUEUE},
+                                                            m_apMac->GetAddress(),
+                                                            m_staMacs[0]->GetAddress(),
+                                                            {0},
+                                                            {0, 1, 2});
+        // block transmissions on the link used for ML setup (non-AP MLD side)
+        m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                          AC_BE,
+                                                          {WIFI_QOSDATA_QUEUE},
+                                                          m_apMac->GetAddress(),
+                                                          m_staMacs[0]->GetAddress(),
+                                                          {0},
+                                                          {m_mainPhyId});
+        // generate a new data packet, which will be sent on a link other than the one
+        // used for ML setup, hence triggering a link switching on the EMLSR client
+        m_staMacs[0]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 0, 2, 1000));
+        break;
     }
 }
 
 /**
- * AUX PHY switching enabled
+ * AUX PHY switching enabled (X = channel switch delay)
  *
  *  |--------- aux PHY A ---------|------ main PHY ------|-------------- aux PHY B -------------
  *                           ┌───┐     ┌───┐
  *                           │ICF│     │QoS│
  * ──────────────────────────┴───┴┬───┬┴───┴┬──┬────────────────────────────────────────────────
- *  [link 0]                       │CTS│     │BA│
- *                                 └───┘     └──┘
+ *  [link 0]                      │CTS│     │BA│
+ *                                └───┘     └──┘
  *
  *
  *  |--------- main PHY ----------|------------------ aux PHY A ----------------|--- main PHY ---
@@ -3466,8 +3750,28 @@
  *  [link 2]                                              │CTS│     │BA│
  *                                                        └───┘     └──┘
  *
+ * ... continued ...
+ *
+ *  |----------------------------------------- aux PHY B ---------------------------------------
+ * ─────────────────────────────────────────────────────────────────────────────────────────────
+ *  [link 0]
+ *
+ *  |--------- main PHY ----------|X|X|------------------------ aux PHY A ----------------------
+ *                 ┌───┐
+ *                 │ACK│
+ *  ──────────┬───┬┴───┴────────────────────────────────────────────────────────────────────────
+ *  [link 1]  │QoS│
+ *            └───┘
  *
- * AUX PHY switching disabled (X = main PHY channel switch delay)
+ *  |-------- aux PHY A ----------|X|---------------------- main PHY ---------------------------
+ *                                          ┌──┐
+ *                                          │BA│
+ *  ────────────────────────┬───X──────┬───┬┴──┴────────────────────────────────────────────────
+ *  [link 2]                │RTS│      │QoS│
+ *                          └───┘      └───┘
+ ************************************************************************************************
+ *
+ * AUX PHY switching disabled (X = channel switch delay)
  *
  *  |------------------------------------------ aux PHY A ---------------------------------------
  *                                |-- main PHY --|X|
@@ -3493,6 +3797,28 @@
  *  ─────────────────────────────────────────────────┴───┴┬───┬┴───┴┬──┬─────────────────────────
  *  [link 2]                                              │CTS│     │BA│
  *                                                        └───┘     └──┘
+ *
+ * ... continued ...
+ *
+ *  |----------------------------------------- aux PHY A ---------------------------------------
+ * ─────────────────────────────────────────────────────────────────────────────────────────────
+ *  [link 0]
+ *
+ *  |-------- main PHY --------|      |--- main PHY ---|
+ *                 ┌───┐
+ *                 │ACK│
+ *  ──────────┬───┬┴───┴────────────────────────────────────────────────────────────────────────
+ *  [link 1]  │QoS│
+ *            └───┘
+ *
+ *  |------------------------------------------ aux PHY B --------------------------------------
+ *                              |X||X|                 |X|-------------- main PHY --------------
+ *                                                   ┌───┐     ┌──┐
+ *                                                   │CTS│     │BA│
+ *  ────────────────────────┬───X───────────────┬───┬┴───┴┬───┬┴──┴─────────────────────────────
+ *  [link 2]                │RTS│               │RTS│     │QoS│
+ *                          └───┘               └───┘     └───┘
+ *
  */
 
 void
@@ -3500,14 +3826,16 @@
                                               const WifiTxVector& txVector,
                                               uint8_t linkId)
 {
-    if (m_txPsdusPos == 0)
+    if (++m_countIcfFrames == 1)
     {
-        // the iterator has not been set yet, thus we are not done with the establishment of
-        // the BA agreement
-        return;
+        m_txPsdusPos = m_txPsdus.size() - 1;
     }
 
-    NS_TEST_EXPECT_MSG_LT(m_countQoSframes, 4, "Unexpected number of ICFs");
+    // the first ICF is sent to protect ADDBA_REQ for DL BA agreement, then one ICF is sent before
+    // each of the 4 DL QoS Data frames; finally, another ICF is sent before the ADDBA_RESP for UL
+    // BA agreement. Hence, at any time the number of ICF sent is always greater than or equal to
+    // the number of QoS data frames sent.
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(m_countIcfFrames, m_countQoSframes, "Unexpected number of ICFs");
 
     auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
     auto phyRecvIcf = m_staMacs[0]->GetWifiPhy(linkId); // PHY receiving the ICF
@@ -3529,10 +3857,12 @@
                 << m_countQoSframes << " is operating on a channel whose width exceeds the limit");
     }
 
-    // if aux PHYs switch links, only the first ICF is received by the main PHY; otherwise,
-    // the first ICF and the last ICF are received by the main PHY
+    // the first two ICFs (before ADDBA_REQ and before first DL QoS Data) and the ICF before the
+    // ADDBA_RESP are received by the main PHY. If aux PHYs do not switch links, the ICF before
+    // the last DL QoS Data is also received by the main PHY
     NS_TEST_EXPECT_MSG_EQ((phyRecvIcf == mainPhy),
-                          (m_countQoSframes == 0 || (!m_switchAuxPhy && m_countQoSframes == 3)),
+                          (m_countIcfFrames == 1 || m_countIcfFrames == 2 ||
+                           (!m_switchAuxPhy && m_countIcfFrames == 5) || m_countIcfFrames == 6),
                           "Expecting that the ICF was received by the main PHY");
 
     // if aux PHYs do not switch links, the main PHY is operating on its original link when
@@ -3583,44 +3913,369 @@
 }
 
 void
+EmlsrLinkSwitchTest::CheckRtsFrame(const WifiConstPsduMap& psduMap,
+                                   const WifiTxVector& txVector,
+                                   uint8_t linkId)
+{
+    // corrupt the first RTS frame (sent by the EMLSR client)
+    if (++m_countRtsFrames == 1)
+    {
+        auto psdu = psduMap.begin()->second;
+        m_errorModel->SetList({psdu->GetPacket()->GetUid()});
+
+        // check that when CTS timeout occurs, the main PHY is switching
+        Simulator::Schedule(
+            m_staMacs[0]->GetFrameExchangeManager(linkId)->GetWifiTxTimer().GetDelayLeft(),
+            [=, this]() {
+                auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+                NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(),
+                                      true,
+                                      "Main PHY expected to be in SWITCHING state instead of "
+                                          << mainPhy->GetState()->GetState());
+
+                // If main PHY channel switch can be interrupted, the main PHY should be back
+                // operating on the primary link after a channel switch delay. Otherwise, it
+                // will be operating on the primary link, if SwitchAuxPhy is false, or on the
+                // link used to send the RTS, if SwitchAuxPhy is true, after the remaining
+                // channel switching time plus the channel switch delay.
+                auto newLinkId =
+                    (m_resetCamStateAndInterruptSwitch || !m_switchAuxPhy) ? m_mainPhyId : linkId;
+                auto delay = mainPhy->GetChannelSwitchDelay();
+                if (!m_resetCamStateAndInterruptSwitch)
+                {
+                    delay += mainPhy->GetDelayUntilIdle();
+                }
+                Simulator::Schedule(delay + TimeStep(1), [=, this]() {
+                    auto id = m_staMacs[0]->GetLinkForPhy(mainPhy);
+                    NS_TEST_EXPECT_MSG_EQ(id.has_value(),
+                                          true,
+                                          "Expected main PHY to operate on a link");
+                    NS_TEST_EXPECT_MSG_EQ(*id,
+                                          newLinkId,
+                                          "Main PHY is operating on an unexpected link");
+                });
+            });
+    }
+    // block transmissions on all other links at non-AP MLD side
+    std::set<uint8_t> links{0, 1, 2};
+    links.erase(linkId);
+    m_staMacs[0]->GetMacQueueScheduler()->BlockQueues(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                      AC_BE,
+                                                      {WIFI_QOSDATA_QUEUE},
+                                                      m_apMac->GetAddress(),
+                                                      m_staMacs[0]->GetAddress(),
+                                                      {0},
+                                                      links);
+}
+
+void
 EmlsrLinkSwitchTest::CheckResults()
 {
     NS_TEST_ASSERT_MSG_NE(m_txPsdusPos, 0, "BA agreement establishment not completed");
 
-    const std::size_t nRxOk = 4; // successfully received ICFs
+    // Expected frame exchanges after ML setup and EML OMN exchange:
+    //  1. (DL) ICF + CTS + ADDBA_REQ + ACK
+    //  2. (UL) ADDBA_RESP + ACK
+    //  3. (DL) ICF + CTS + DATA + BA
+    //  4. (DL) ICF + CTS + DATA + BA
+    //  5. (DL) ICF + CTS + DATA + BA
+    //  6. (DL) ICF + CTS + DATA + BA
+    //  7. (UL) ADDBA_REQ + ACK
+    //  8. (DL) ICF + CTS + ADDBA_RESP + ACK
+    //  9. (UL) DATA + BA
+    // 10. (UL) RTS - CTS timeout
+    // 11. (UL) (RTS + CTS + ) DATA + BA
+
+    // frame exchange 11 is protected if SwitchAuxPhy is false or (SwitchAuxPhy is true and) the
+    // main PHY switch can be interrupted
+    bool fe11protected = !m_switchAuxPhy || m_resetCamStateAndInterruptSwitch;
+
+    NS_TEST_EXPECT_MSG_EQ(m_countIcfFrames, 6, "Unexpected number of ICFs sent");
+
+    // frame exchanges without RTS because the EMLSR client sent the initial frame through main PHY
+    const std::size_t nFrameExchNoRts = fe11protected ? 3 : 4;
+
+    const std::size_t nFrameExchWithRts = fe11protected ? 1 : 0;
 
     NS_TEST_ASSERT_MSG_GT_OR_EQ(m_txPsdus.size(),
-                                m_txPsdusPos + 2 + nRxOk * 4,
+                                m_txPsdusPos +
+                                    m_countIcfFrames * 4 + /* frames in frame exchange with ICF */
+                                    nFrameExchNoRts * 2 + /* frames in frame exchange without RTS */
+                                    nFrameExchWithRts * 4 + /* frames in frame exchange with RTS */
+                                    1,                      /* corrupted RTS */
                                 "Insufficient number of TX PSDUs");
 
-    // m_txPsdusPos points to ADDBA_RESPONSE, then ACK and then ICF
-    auto psduIt = std::next(m_txPsdus.cbegin(), m_txPsdusPos + 2);
+    // m_txPsdusPos points to the first ICF
+    auto psduIt = std::next(m_txPsdus.cbegin(), m_txPsdusPos);
+
+    const std::size_t nFrameExchanges =
+        m_countIcfFrames + nFrameExchNoRts + nFrameExchWithRts + 1 /* corrupted RTS */;
 
-    for (std::size_t i = 0; i < nRxOk; i++)
+    for (std::size_t i = 1; i <= nFrameExchanges; ++i)
     {
-        NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
-                               psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsTrigger()),
-                              true,
-                              "Expected a Trigger Frame (ICF)");
-        psduIt++;
-        NS_TEST_EXPECT_MSG_EQ(
-            (psduIt->psduMap.size() == 1 && psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsCts()),
-            true,
-            "Expected a CTS");
-        psduIt++;
-        NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
-                               psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsQosData()),
-                              true,
-                              "Expected a QoS Data frame");
-        psduIt++;
-        NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
-                               psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsBlockAck()),
-                              true,
-                              "Expected a BlockAck");
+        if (i == 1 || (i >= 3 && i <= 6) || i == 8 || i == 10 || (i == 11 && fe11protected))
+        {
+            // frame exchanges with protection
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   (i < 9 ? psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsTrigger()
+                                          : psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsRts())),
+                                  true,
+                                  "Expected a Trigger Frame (ICF)");
+            psduIt++;
+            if (i == 10)
+            {
+                continue; // corrupted RTS
+            }
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsCts()),
+                                  true,
+                                  "Expected a CTS");
+            psduIt++;
+        }
+
+        if (i == 1 || i == 2 || i == 7 || i == 8) // frame exchanges with ADDBA REQ/RESP frames
+        {
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsMgt()),
+                                  true,
+                                  "Expected a management frame");
+            psduIt++;
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsAck()),
+                                  true,
+                                  "Expected a Normal Ack");
+        }
+        else
+        {
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsQosData()),
+                                  true,
+                                  "Expected a QoS Data frame");
+            psduIt++;
+            NS_TEST_EXPECT_MSG_EQ((psduIt->psduMap.size() == 1 &&
+                                   psduIt->psduMap.at(SU_STA_ID)->GetHeader(0).IsBlockAck()),
+                                  true,
+                                  "Expected a BlockAck");
+        }
         psduIt++;
     }
 }
 
+EmlsrCcaBusyTest::EmlsrCcaBusyTest(uint16_t auxPhyMaxChWidth)
+    : EmlsrOperationsTestBase(std::string("Check EMLSR link switching (auxPhyMaxChWidth=") +
+                              std::to_string(auxPhyMaxChWidth) + "MHz )"),
+      m_auxPhyMaxChWidth(auxPhyMaxChWidth),
+      m_channelSwitchDelay(MicroSeconds(75)),
+      m_currMainPhyLinkId(0),
+      m_nextMainPhyLinkId(0)
+{
+    m_nEmlsrStations = 1;
+    m_nNonEmlsrStations = 1;
+    m_linksToEnableEmlsrOn = {0, 1, 2}; // enable EMLSR on all links right after association
+    m_mainPhyId = 1;
+    m_establishBaUl = true;
+    m_duration = Seconds(1.0);
+    m_transitionDelay = {MicroSeconds(128)};
+}
+
+void
+EmlsrCcaBusyTest::DoRun()
+{
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    Simulator::Destroy();
+}
+
+void
+EmlsrCcaBusyTest::DoSetup()
+{
+    Config::SetDefault("ns3::DefaultEmlsrManager::SwitchAuxPhy", BooleanValue(true));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyChannelWidth", UintegerValue(m_auxPhyMaxChWidth));
+    Config::SetDefault("ns3::EmlsrManager::AuxPhyMaxModClass", StringValue("EHT"));
+    Config::SetDefault("ns3::WifiPhy::ChannelSwitchDelay", TimeValue(m_channelSwitchDelay));
+
+    EmlsrOperationsTestBase::DoSetup();
+
+    // use channels of different widths
+    for (auto mac : std::initializer_list<Ptr<WifiMac>>{m_apMac, m_staMacs[0], m_staMacs[1]})
+    {
+        mac->GetWifiPhy(0)->SetOperatingChannel(
+            WifiPhy::ChannelTuple{4, 40, WIFI_PHY_BAND_2_4GHZ, 0});
+        mac->GetWifiPhy(1)->SetOperatingChannel(
+            WifiPhy::ChannelTuple{58, 80, WIFI_PHY_BAND_5GHZ, 0});
+        mac->GetWifiPhy(2)->SetOperatingChannel(
+            WifiPhy::ChannelTuple{79, 160, WIFI_PHY_BAND_6GHZ, 0});
+    }
+}
+
+void
+EmlsrCcaBusyTest::TransmitPacketToAp(uint8_t linkId)
+{
+    m_staMacs[1]->GetDevice()->GetNode()->AddApplication(GetApplication(UPLINK, 1, 1, 2000));
+
+    // force the transmission of the packet to happen now on the given link.
+    // Multiple ScheduleNow calls are needed because Node::AddApplication() schedules a call to
+    // Application::Initialize(), which schedules a call to Application::StartApplication(), which
+    // schedules a call to PacketSocketClient::Send(), which finally generates the packet
+    Simulator::ScheduleNow([=, this]() {
+        Simulator::ScheduleNow([=, this]() {
+            Simulator::ScheduleNow([=, this]() {
+                m_staMacs[1]->GetFrameExchangeManager(linkId)->StartTransmission(
+                    m_staMacs[1]->GetQosTxop(AC_BE),
+                    m_staMacs[1]->GetWifiPhy(linkId)->GetChannelWidth());
+            });
+        });
+    });
+
+    // check that the other MLD started transmitting on the correct link
+    Simulator::Schedule(TimeStep(1), [=, this]() {
+        NS_TEST_EXPECT_MSG_EQ(m_staMacs[1]->GetWifiPhy(linkId)->IsStateTx(),
+                              true,
+                              "At time " << Simulator::Now().As(Time::NS)
+                                         << ", other MLD did not start transmitting on link "
+                                         << +linkId);
+    });
+}
+
+void
+EmlsrCcaBusyTest::StartTraffic()
+{
+    auto currMainPhyLinkId = m_staMacs[0]->GetLinkForPhy(m_mainPhyId);
+    NS_TEST_ASSERT_MSG_EQ(currMainPhyLinkId.has_value(),
+                          true,
+                          "Main PHY is not operating on any link");
+    m_currMainPhyLinkId = *currMainPhyLinkId;
+    m_nextMainPhyLinkId = (m_currMainPhyLinkId + 1) % 2;
+
+    // request the main PHY to switch to another link
+    m_staMacs[0]->GetEmlsrManager()->SwitchMainPhy(m_nextMainPhyLinkId,
+                                                   false,
+                                                   EmlsrManager::DONT_RESET_BACKOFF,
+                                                   EmlsrManager::DONT_REQUEST_ACCESS);
+
+    // the other MLD transmits a packet to the AP
+    TransmitPacketToAp(m_nextMainPhyLinkId);
+
+    // schedule another packet transmission slightly (10 us) before the end of aux PHY switch
+    Simulator::Schedule(m_channelSwitchDelay - MicroSeconds(10),
+                        &EmlsrCcaBusyTest::TransmitPacketToAp,
+                        this,
+                        m_currMainPhyLinkId);
+
+    // first checkpoint is after that the preamble of the PPDU has been received
+    Simulator::Schedule(MicroSeconds(8), &EmlsrCcaBusyTest::CheckPoint1, this);
+}
+
+/**
+ *                               ┌───────────────┐
+ *  [link X]                     │  other to AP  │CP3
+ * ──────────────────────────────┴───────────────┴──────────────────────────────────────────────
+ *  |------ main PHY ------|                  |------------------- aux PHY ---------------------
+ *                         .\_              _/
+ *                         .  \_          _/
+ *                         .    \_      _/
+ *                         .      \_  _/
+ *  [link Y]               . CP1    \/ CP2
+ *                         .┌───────────────┐
+ *                         .│  other to AP  │
+ * ─────────────────────────┴───────────────┴────────────────────────────────────────────────────
+ *  |------------ aux PHY ----------|---------------------- main PHY ----------------------------
+ *
+ */
+
+void
+EmlsrCcaBusyTest::CheckPoint1()
+{
+    // first checkpoint is after that the preamble of the first PPDU has been received
+    auto mainPhy = m_staMacs[0]->GetDevice()->GetPhy(m_mainPhyId);
+
+    // 1. Main PHY is switching
+    NS_TEST_EXPECT_MSG_EQ(mainPhy->IsStateSwitching(), true, "Main PHY is not switching");
+
+    auto auxPhy = m_staMacs[0]->GetWifiPhy(m_nextMainPhyLinkId);
+    NS_TEST_EXPECT_MSG_NE(mainPhy, auxPhy, "Main PHY is operating on an unexpected link");
+
+    // 2. Aux PHY is receiving the PHY header
+    NS_TEST_EXPECT_MSG_EQ(auxPhy->IsReceivingPhyHeader(),
+                          true,
+                          "Aux PHY is not receiving a PHY header");
+
+    // 3. Main PHY dropped the preamble because it is switching
+    NS_TEST_EXPECT_MSG_EQ(mainPhy->IsReceivingPhyHeader(),
+                          false,
+                          "Main PHY is receiving a PHY header");
+
+    // 4. Channel access manager on destination link (Y) has been notified of CCA busy, but not
+    // until the end of transmission (main PHY dropped the preamble and notified CCA busy until
+    // end of transmission but the channel access manager on link Y does not yet have a listener
+    // attached to the main PHY; aux PHY notified CCA busy until the end of the PHY header field
+    // being received)
+    const auto caManager = m_staMacs[0]->GetChannelAccessManager(m_nextMainPhyLinkId);
+    const auto endTxTime = m_staMacs[1]->GetChannelAccessManager(m_nextMainPhyLinkId)->m_lastTxEnd;
+    NS_TEST_ASSERT_MSG_EQ(caManager->m_lastBusyEnd.contains(WIFI_CHANLIST_PRIMARY),
+                          true,
+                          "No CCA information for primary20 channel");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(
+        caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+        Simulator::Now(),
+        "ChannelAccessManager on destination link not notified of CCA busy");
+    NS_TEST_EXPECT_MSG_LT(
+        caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+        endTxTime,
+        "ChannelAccessManager on destination link notified of CCA busy until end of transmission");
+
+    // second checkpoint is after that the main PHY completed the link switch
+    Simulator::Schedule(mainPhy->GetDelayUntilIdle() + TimeStep(1),
+                        &EmlsrCcaBusyTest::CheckPoint2,
+                        this);
+}
+
+void
+EmlsrCcaBusyTest::CheckPoint2()
+{
+    // second checkpoint is after that the main PHY completed the link switch. The channel access
+    // manager on destination link (Y) is expected to be notified by the main PHY that medium is
+    // busy until the end of the ongoing transmission
+    const auto caManager = m_staMacs[0]->GetChannelAccessManager(m_nextMainPhyLinkId);
+    const auto endTxTime = m_staMacs[1]->GetChannelAccessManager(m_nextMainPhyLinkId)->m_lastTxEnd;
+    NS_TEST_ASSERT_MSG_EQ(caManager->m_lastBusyEnd.contains(WIFI_CHANLIST_PRIMARY),
+                          true,
+                          "No CCA information for primary20 channel");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(
+        caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+        Simulator::Now(),
+        "ChannelAccessManager on destination link not notified of CCA busy");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+                                endTxTime,
+                                "ChannelAccessManager on destination link not notified of CCA busy "
+                                "until end of transmission");
+
+    // third checkpoint is after that the aux PHY completed the link switch
+    Simulator::Schedule(m_channelSwitchDelay, &EmlsrCcaBusyTest::CheckPoint3, this);
+}
+
+void
+EmlsrCcaBusyTest::CheckPoint3()
+{
+    // third checkpoint is after that the aux PHY completed the link switch. The channel access
+    // manager on source link (X) is expected to be notified by the aux PHY that medium is
+    // busy until the end of the ongoing transmission (even if the aux PHY was not listening to
+    // link X when transmission started, its interface on link X recorded the transmission)
+    const auto caManager = m_staMacs[0]->GetChannelAccessManager(m_currMainPhyLinkId);
+    const auto endTxTime = m_staMacs[1]->GetChannelAccessManager(m_currMainPhyLinkId)->m_lastTxEnd;
+    NS_TEST_ASSERT_MSG_EQ(caManager->m_lastBusyEnd.contains(WIFI_CHANLIST_PRIMARY),
+                          true,
+                          "No CCA information for primary20 channel");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+                                Simulator::Now(),
+                                "ChannelAccessManager on source link not notified of CCA busy");
+    NS_TEST_EXPECT_MSG_GT_OR_EQ(caManager->m_lastBusyEnd[WIFI_CHANLIST_PRIMARY],
+                                endTxTime,
+                                "ChannelAccessManager on source link not notified of CCA busy "
+                                "until end of transmission");
+}
+
 WifiEmlsrTestSuite::WifiEmlsrTestSuite()
     : TestSuite("wifi-emlsr", Type::UNIT)
 {
@@ -3650,28 +4305,31 @@
                     TestCase::Duration::QUICK);
     }
 
-    for (auto genBackoffIfTxopWithoutTx : {true, false})
+    for (auto genBackoffAndUseAuxPhyCca : {true, false})
     {
         AddTestCase(new EmlsrUlTxopTest(
-                        {{0, 1, 2}, 40, 20, MicroSeconds(5504), 3, genBackoffIfTxopWithoutTx}),
+                        {{0, 1, 2}, 40, 20, MicroSeconds(5504), 3, genBackoffAndUseAuxPhyCca}),
                     TestCase::Duration::QUICK);
         AddTestCase(
-            new EmlsrUlTxopTest({{0, 1}, 40, 20, MicroSeconds(5504), 1, genBackoffIfTxopWithoutTx}),
+            new EmlsrUlTxopTest({{0, 1}, 40, 20, MicroSeconds(5504), 1, genBackoffAndUseAuxPhyCca}),
             TestCase::Duration::QUICK);
     }
 
     for (bool switchAuxPhy : {true, false})
     {
-        for (bool resetCamState : {true, false})
+        for (bool resetCamStateAndInterruptSwitch : {true, false})
         {
-            for (uint16_t auxPhyMaxChWidth : {20, 40, 80, 160})
+            for (MHz_u auxPhyMaxChWidth : {20, 40, 80, 160})
             {
-                AddTestCase(
-                    new EmlsrLinkSwitchTest({switchAuxPhy, resetCamState, auxPhyMaxChWidth}),
-                    TestCase::Duration::QUICK);
+                AddTestCase(new EmlsrLinkSwitchTest(
+                                {switchAuxPhy, resetCamStateAndInterruptSwitch, auxPhyMaxChWidth}),
+                            TestCase::Duration::QUICK);
             }
         }
     }
+
+    AddTestCase(new EmlsrCcaBusyTest(20), TestCase::Duration::QUICK);
+    AddTestCase(new EmlsrCcaBusyTest(80), TestCase::Duration::QUICK);
 }
 
 static WifiEmlsrTestSuite g_wifiEmlsrTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-emlsr-test.h ns-3.43/src/wifi/test/wifi-emlsr-test.h
--- ns-3.42/src/wifi/test/wifi-emlsr-test.h	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-emlsr-test.h	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -517,6 +506,19 @@
  *   not transmitted successfully. Specifically, we check that the main PHY is completing the
  *   channel switch when the (unsuccessful) reception of the CTS ends and that a new RTS/CTS
  *   exchange is carried out to protect the transmission of the last data frame.
+ * - While the main PHY is operating on the same link as an aux PHY (which does not switch
+ *   channel), the aux PHY is put in sleep mode as soon as the main PHY starts operating on the
+ *   link, stays in sleep mode until the TXOP ends and is resumed from sleep mode right after the
+ *   end of the DL/UL TXOP.
+ * - When an aux PHY that is not TX capable gains a TXOP, it checks whether the main PHY can switch
+ *   to the non-primary link a start an UL TXOP. If the main PHY is switching, the aux PHY waits
+ *   until the channel switch is completed and checks again; if the remaining backoff time on the
+ *   primary link is greater than the channel switch delay, the main PHY is requested to switch to
+ *   the non-primary link of the aux PHY. When the channel switch is completed, if the medium is
+ *   idle on the non-primary link and the backoff is zero, the main PHY starts an UL TXOP after a
+ *   PIFS period; otherwise, the main PHY starts an UL TXOP when the backoff timer counts down to
+ *   zero. The QoS data frame sent by the main PHY is not protected by RTS and the bandwidth it
+ *   occupies is not affected by possible limitations on the aux PHY TX bandwidth capabilities.
  */
 class EmlsrUlTxopTest : public EmlsrOperationsTestBase
 {
@@ -528,15 +530,19 @@
     {
         std::set<uint8_t>
             linksToEnableEmlsrOn;       //!< IDs of links on which EMLSR mode should be enabled
-        uint16_t channelWidth;          //!< width (MHz) of the channels used by MLDs
-        uint16_t auxPhyChannelWidth;    //!< max width (MHz) supported by aux PHYs
+        MHz_u channelWidth;             //!< width of the channels used by MLDs
+        MHz_u auxPhyChannelWidth;       //!< max width supported by aux PHYs
         Time mediumSyncDuration;        //!< duration of the MediumSyncDelay timer
         uint8_t msdMaxNTxops;           //!< Max number of TXOPs that an EMLSR client is allowed
                                         //!< to attempt to initiate while the MediumSyncDelay
                                         //!< timer is running (zero indicates no limit)
-        bool genBackoffIfTxopWithoutTx; //!< whether the backoff should be invoked when the AC
-                                        //!< gains the right to start a TXOP but it does not
-                                        //!< transmit any frame
+        bool genBackoffAndUseAuxPhyCca; //!< this variable controls two boolean values that are
+                                        //!< either both set to true or both set to false;
+                                        //!< the first value controls whether the backoff should be
+                                        //!< invoked when the AC gains the right to start a TXOP
+                                        //!< but it does not transmit any frame, the second value
+                                        //!< controls whether CCA info from aux PHY is used when
+                                        //!< aux PHY is not TX capable
     };
 
     /**
@@ -572,6 +578,18 @@
     void CheckRtsFrames(Ptr<const WifiMpdu> mpdu, const WifiTxVector& txVector, uint8_t linkId);
 
     /**
+     * Check that appropriate actions are taken by the AP MLD transmitting an initial
+     * Control frame to an EMLSR client on the given link.
+     *
+     * \param mpdu the MPDU carrying the MU-RTS TF
+     * \param txVector the TXVECTOR used to send the PPDU
+     * \param linkId the ID of the given link
+     */
+    void CheckInitialControlFrame(Ptr<const WifiMpdu> mpdu,
+                                  const WifiTxVector& txVector,
+                                  uint8_t linkId);
+
+    /**
      * Check that appropriate actions are taken by the EMLSR client when receiving a CTS
      * frame on the given link.
      *
@@ -617,8 +635,8 @@
     void BackoffGenerated(uint32_t backoff, uint8_t linkId);
 
     std::set<uint8_t> m_emlsrLinks; /**< IDs of the links on which EMLSR mode has to be enabled */
-    uint16_t m_channelWidth;        //!< width (MHz) of the channels used by MLDs
-    uint16_t m_auxPhyChannelWidth;  //!< max width (MHz) supported by aux PHYs
+    MHz_u m_channelWidth;           //!< width of the channels used by MLDs
+    MHz_u m_auxPhyChannelWidth;     //!< max width supported by aux PHYs
     Time m_mediumSyncDuration;      //!< duration of the MediumSyncDelay timer
     uint8_t m_msdMaxNTxops;         //!< Max number of TXOPs that an EMLSR client is allowed
                                     //!< to attempt to initiate while the MediumSyncDelay
@@ -639,7 +657,10 @@
     bool m_genBackoffIfTxopWithoutTx;     //!< whether the backoff should be invoked when the AC
                                           //!< gains the right to start a TXOP but it does not
                                           //!< transmit any frame
+    bool m_useAuxPhyCca;                  //!< whether CCA info from aux PHY is used when
+                                          //!< aux PHY is not TX capable
     std::optional<bool> m_corruptCts;     //!< whether the transmitted CTS must be corrupted
+    Time m_5thQosFrameTxTime;             //!< start transmission time of the 5th QoS data frame
 };
 
 /**
@@ -654,9 +675,10 @@
  * - the first one on the link used for ML setup, hence no PHY switch occurs
  * - the second one on another link, thus causing the main PHY to switch link
  * - the third one on the remaining link, thus causing the main PHY to switch link again
- * - the fourth one on the link used for ML setup; if the aux PHYs switches link, there is
- *   one aux PHY listening on such a link and the main PHY switches to this link, otherwise
- *   no PHY is listening on such a link and there is no response to the ICF sent by the AP MLD
+ * - the fourth one on the link used for ML setup
+ *
+ * Afterwards, the EMLSR client transmits 2 QoS data frames; the first one on the link used for
+ * ML setup (hence, no RTS is sent), the second one on another link.
  */
 class EmlsrLinkSwitchTest : public EmlsrOperationsTestBase
 {
@@ -669,9 +691,14 @@
         bool
             switchAuxPhy; //!< whether AUX PHY should switch channel to operate on the link on which
                           //!<  the Main PHY was operating before moving to the link of the Aux PHY
-        bool resetCamState; //!< whether to reset the state of the ChannelAccessManager associated
-                            //!< with the link on which the main PHY has just switched to
-        uint16_t auxPhyMaxChWidth; //!< max channel width (MHz) supported by aux PHYs
+        bool resetCamStateAndInterruptSwitch; //!< this variable controls two boolean values that
+                                              //!< are either both set to true or both set to false;
+                                              //!< the first value controls whether to reset the
+                                              //!< state of the ChannelAccessManager associated
+                                              //!< with the link on which the main PHY has just
+                                              //!< switched to, the second value controls whether
+                                              //!< a main PHY channel switch can be interrupted
+        MHz_u auxPhyMaxChWidth;               //!< max channel width (MHz) supported by aux PHYs
     };
 
     /**
@@ -721,14 +748,31 @@
                         const WifiTxVector& txVector,
                         uint8_t linkId);
 
+    /**
+     * Check that appropriate actions are taken by the EMLSR client transmitting a PPDU containing
+     * an RTS frame to the AP MLD on the given link.
+     *
+     * \param psduMap the PSDU carrying RTS frame
+     * \param txVector the TXVECTOR used to send the PPDU
+     * \param linkId the ID of the given link
+     */
+    void CheckRtsFrame(const WifiConstPsduMap& psduMap,
+                       const WifiTxVector& txVector,
+                       uint8_t linkId);
+
   private:
-    bool m_switchAuxPhy;  /**< whether AUX PHY should switch channel to operate on the link on which
-                               the Main PHY was operating before moving to the link of Aux PHY */
-    bool m_resetCamState; /**< whether to reset the state of the ChannelAccessManager associated
-                               with the link on which the main PHY has just switched to */
-    uint16_t m_auxPhyMaxChWidth;  //!< max channel width (MHz) supported by aux PHYs
-    std::size_t m_countQoSframes; //!< counter for QoS data frames
-    std::size_t m_txPsdusPos;     //!< a position in the vector of TX PSDUs
+    bool m_switchAuxPhy; /**< whether AUX PHY should switch channel to operate on the link on which
+                              the Main PHY was operating before moving to the link of Aux PHY */
+    bool
+        m_resetCamStateAndInterruptSwitch; /**< whether to reset the state of the
+                              ChannelAccessManager associated with the link on which the main PHY
+                              has just switched to and whether main PHY switch can be interrupted */
+    MHz_u m_auxPhyMaxChWidth;              //!< max channel width (MHz) supported by aux PHYs
+    std::size_t m_countQoSframes;          //!< counter for QoS data frames
+    std::size_t m_countIcfFrames;          //!< counter for ICF frames
+    std::size_t m_countRtsFrames;          //!< counter for RTS frames
+    std::size_t m_txPsdusPos;              //!< position in the vector of TX PSDUs of the first ICF
+    Ptr<ListErrorModel> m_errorModel;      ///< error rate model to corrupt packets at AP MLD
 };
 
 /**
@@ -743,4 +787,70 @@
     WifiEmlsrTestSuite();
 };
 
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test CCA busy notifications on EMLSR clients.
+ *
+ * SwitchAuxPhy is set to true, so that the aux PHY starts switching when the main PHY switch is
+ * completed.
+ *
+ * - Main PHY switches to a link on which an aux PHY is operating. Right after the start of the
+ *   channel switch, the AP transmits a frame to another device on the aux PHY link. Verify that,
+ *   once the main PHY is operating on the new link, the channel access manager on that link is
+ *   notified of CCA busy until the end of the transmission
+ * - When the main PHY switch is completed, the aux PHY switches to a link on which no PHY is
+ *   operating. Before the aux PHY starts switching, the AP starts transmitting a frame to another
+ *   device on the link on which no PHY is operating. Verify that, once the aux PHY is operating
+ *   on the new link, the channel access manager on that link is notified of CCA busy until the
+ *   end of the transmission
+ */
+class EmlsrCcaBusyTest : public EmlsrOperationsTestBase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * \param auxPhyMaxChWidth max channel width (MHz) supported by aux PHYs
+     */
+    EmlsrCcaBusyTest(uint16_t auxPhyMaxChWidth);
+
+    ~EmlsrCcaBusyTest() override = default;
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+
+  private:
+    void StartTraffic() override;
+
+    /**
+     * Make the other MLD transmit a packet to the AP on the given link.
+     *
+     * \param linkId the ID of the given link
+     */
+    void TransmitPacketToAp(uint8_t linkId);
+
+    /**
+     * Perform checks after that the preamble of the first PPDU has been received.
+     */
+    void CheckPoint1();
+
+    /**
+     * Perform checks after that the main PHY completed the link switch.
+     */
+    void CheckPoint2();
+
+    /**
+     * Perform checks after that the aux PHY completed the link switch.
+     */
+    void CheckPoint3();
+
+    uint16_t m_auxPhyMaxChWidth; //!< max channel width (MHz) supported by aux PHYs
+    Time m_channelSwitchDelay;   //!< the PHY channel switch delay
+    uint8_t m_currMainPhyLinkId; //!< the ID of the link the main PHY switches from
+    uint8_t m_nextMainPhyLinkId; //!< the ID of the link the main PHY switches to
+};
+
 #endif /* WIFI_EMLSR_TEST_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-error-rate-models-test.cc ns-3.43/src/wifi/test/wifi-error-rate-models-test.cc
--- ns-3.42/src/wifi/test/wifi-error-rate-models-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-error-rate-models-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2016 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Tom Henderson (tomhend@u.washington.edu)
  *          Sébastien Deronne (sebastien.deronne@gmail.com)
@@ -41,15 +30,15 @@
 NS_LOG_COMPONENT_DEFINE("WifiErrorRateModelsTest");
 
 static double
-FromRss(double rssDbw)
+FromRss(dBW_u rss)
 {
     // SINR is based on receiver noise figure of 7 dB and thermal noise
     // of -100.5522786 dBm in this 22 MHz bandwidth at 290K
-    double noisePowerDbw = -100.5522786 + 7;
+    dBW_u noisePower = -100.5522786 + 7;
 
-    double sinrDb = rssDbw - noisePowerDbw;
+    dB_u sinr = rss - noisePower;
     // return SINR expressed as ratio
-    return pow(10.0, sinrDb / 10.0);
+    return pow(10.0, sinr / 10.0);
 }
 
 /**
@@ -193,16 +182,13 @@
     WifiTxVector txVector;
     Ptr<NistErrorRateModel> nist = CreateObject<NistErrorRateModel>();
 
-    double ps;  // probability of success
-    double snr; // dB
-
     // Spot test some values returned from NistErrorRateModel
     // values can be generated by the example program ofdm-validation.cc
-    snr = 2.5;
-    ps = nist->GetChunkSuccessRate(WifiMode("OfdmRate6Mbps"),
-                                   txVector,
-                                   std::pow(10.0, snr / 10.0),
-                                   frameSize * 8);
+    dB_u snr{2.5};
+    auto ps = nist->GetChunkSuccessRate(WifiMode("OfdmRate6Mbps"),
+                                        txVector,
+                                        std::pow(10.0, snr / 10.0),
+                                        frameSize * 8);
     NS_TEST_ASSERT_MSG_EQ_TOL(ps, 2.04e-10, 1e-10, "Not equal within tolerance");
     snr = 3.0;
     ps = nist->GetChunkSuccessRate(WifiMode("OfdmRate6Mbps"),
@@ -450,22 +436,23 @@
     interference.SetErrorRateModel(nist);
 
     // SISO: initial SNR set to 4dB
-    double initialSnr = 4.0;
-    double snr = interference.CalculateSnr(0.001,
-                                           0.001 / DbToRatio(initialSnr),
-                                           txVector.GetChannelWidth(),
-                                           txVector.GetNss());
+    dB_u initialSnr{4.0};
+    dB_u tol{0.1};
+    auto snr = interference.CalculateSnr(0.001,
+                                         0.001 / DbToRatio(initialSnr),
+                                         txVector.GetChannelWidth(),
+                                         txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
                               initialSnr,
-                              0.1,
+                              tol,
                               "Attempt to set initial SNR to known value failed");
     Time duration = MilliSeconds(2);
-    double chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
+    auto chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_EQ_TOL(chunkSuccess,
                               0.905685,
                               0.000001,
                               "CSR not within tolerance for SISO");
-    double sisoChunkSuccess = chunkSuccess;
+    auto sisoChunkSuccess = chunkSuccess;
 
     // MIMO 2x1:2: expect no SNR gain in AWGN channel
     txVector.SetNss(2);
@@ -476,7 +463,7 @@
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
                               initialSnr,
-                              0.1,
+                              tol,
                               "SNR not within tolerance for 2x1:2 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_EQ_TOL(chunkSuccess,
@@ -494,8 +481,8 @@
                                     txVector.GetChannelWidth(),
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
-                              initialSnr + 3,
-                              0.1,
+                              initialSnr + static_cast<dB_u>(3.0),
+                              tol,
                               "SNR not within tolerance for 1x2:1 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_GT(chunkSuccess,
@@ -512,8 +499,8 @@
                                     txVector.GetChannelWidth(),
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
-                              initialSnr + 3,
-                              0.1,
+                              initialSnr + static_cast<dB_u>(3.0),
+                              tol,
                               "SNR not equal within tolerance for 2x2:1 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_GT(chunkSuccess,
@@ -530,7 +517,7 @@
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
                               initialSnr,
-                              0.1,
+                              tol,
                               "SNR not equal within tolerance for 2x2:2 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_EQ_TOL(chunkSuccess,
@@ -548,8 +535,8 @@
                                     txVector.GetChannelWidth(),
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
-                              initialSnr + 4.8,
-                              0.1,
+                              initialSnr + static_cast<dB_u>(4.8),
+                              tol,
                               "SNR not within tolerance for 3x3:1 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_GT(chunkSuccess,
@@ -566,8 +553,8 @@
                                     txVector.GetChannelWidth(),
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
-                              initialSnr + 1.8,
-                              0.1,
+                              initialSnr + static_cast<dB_u>(1.8),
+                              tol,
                               "SNR not within tolerance for 3x3:2 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_GT(chunkSuccess,
@@ -584,7 +571,7 @@
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
                               initialSnr,
-                              0.1,
+                              tol,
                               "SNR not within tolerance for 3x3:3 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_EQ_TOL(chunkSuccess,
@@ -602,8 +589,8 @@
                                     txVector.GetChannelWidth(),
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
-                              initialSnr + 6,
-                              0.1,
+                              initialSnr + static_cast<dB_u>(6.0),
+                              tol,
                               "SNR not within tolerance for 4x4:1 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_GT(chunkSuccess,
@@ -620,8 +607,8 @@
                                     txVector.GetChannelWidth(),
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
-                              initialSnr + 3,
-                              0.1,
+                              initialSnr + static_cast<dB_u>(3.0),
+                              tol,
                               "SNR not within tolerance for 4x4:2 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_GT(chunkSuccess,
@@ -638,8 +625,8 @@
                                     txVector.GetChannelWidth(),
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
-                              initialSnr + 1.2,
-                              0.1,
+                              initialSnr + static_cast<dB_u>(1.2),
+                              tol,
                               "SNR not within tolerance for 4x4:3 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_GT(chunkSuccess,
@@ -656,7 +643,7 @@
                                     txVector.GetNss());
     NS_TEST_ASSERT_MSG_EQ_TOL(RatioToDb(snr),
                               initialSnr,
-                              0.1,
+                              tol,
                               "SNR not within tolerance for 4x4:4 MIMO");
     chunkSuccess = interference.CalculatePayloadChunkSuccessRate(snr, duration, txVector);
     NS_TEST_ASSERT_MSG_EQ_TOL(chunkSuccess,
@@ -670,7 +657,7 @@
  * dB) in order to verify against the PER calculated by the model
  */
 std::map<std::pair<uint8_t /* mcs */, uint32_t /* size */>,
-         std::map<double /* snr */, double /* per */>>
+         std::map<dB_u /* snr */, double /* per */>>
     expectedTableValues = {
         /* MCS 0 - 1458 bytes */
         {std::make_pair(0, 1458),
@@ -1000,7 +987,7 @@
     txVector.SetMode(m_mode);
 
     // Spot test some values returned from TableBasedErrorRateModel
-    for (double snr = -4; snr <= 30; snr += 0.25)
+    for (dB_u snr = -4; snr <= dB_u{30}; snr += dB_u{0.25})
     {
         double expectedValue = 0;
         if (m_mode.GetMcsValue() > ERROR_TABLE_BCC_MAX_NUM_MCS)
@@ -1030,7 +1017,7 @@
                                << +m_mode.GetMcsValue() << " and size " << m_size << " bytes");
             }
         }
-        double per =
+        const auto per =
             1 - table->GetChunkSuccessRate(m_mode, txVector, std::pow(10, snr / 10), m_size * 8);
         NS_LOG_INFO(m_testName << ": snr=" << snr << "dB per=" << per
                                << " expectedPER=" << expectedValue);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-fils-frame-test.cc ns-3.43/src/wifi/test/wifi-fils-frame-test.cc
--- ns-3.42/src/wifi/test/wifi-fils-frame-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-fils-frame-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024 Rami Abdallah
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/ap-wifi-mac.h"
@@ -86,7 +75,7 @@
 /// @brief  Wi-Fi FILS frame test parameters
 struct WifiFilsFrameTestParams
 {
-    uint16_t bw{DEFAULT_BANDWIDTH};                     ///< Operation bandwidth
+    MHz_u bw{DEFAULT_BANDWIDTH};                        ///< Operation bandwidth
     std::string ssid{DEFAULT_SSID};                     ///< SSID name
     uint8_t nss{0};                                     ///< Number of spatial streams
     Time bcnIntrvl{DEFAULT_BCN_INTRVL};                 ///< Time between Beacons
@@ -186,9 +175,12 @@
     MobilityHelper mobility;
     node.Create(1);
     phy.SetChannel(channel);
-    TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue> channelValue;
-    channelValue.Set(
-        WifiPhy::ChannelTuple{INVALID_CHAN_NUM, m_params.bw, DEFAULT_BAND, DEFAULT_PRIMARY_INDEX});
+    AttributeContainerValue<
+        TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>,
+        ';'>
+        channelValue;
+    channelValue.Set(WifiPhy::ChannelSegments{
+        {INVALID_CHAN_NUM, m_params.bw, DEFAULT_BAND, DEFAULT_PRIMARY_INDEX}});
     phy.Set("ChannelSettings", channelValue);
     phy.Set("Antennas", UintegerValue(m_params.nss));
     phy.Set("MaxSupportedTxSpatialStreams", UintegerValue(m_params.nss));
@@ -220,7 +212,7 @@
                     BooleanValue(false));
     }
     auto testDevs = wifi.Install(phy, mac, node);
-    wifi.AssignStreams(testDevs, DEFAULT_STREAM_INDEX);
+    WifiHelper::AssignStreams(testDevs, DEFAULT_STREAM_INDEX);
     auto dev = DynamicCast<WifiNetDevice>(testDevs.Get(0));
     mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
     mobility.Install(node);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-he-info-elems-test.cc ns-3.43/src/wifi/test/wifi-he-info-elems-test.cc
--- ns-3.42/src/wifi/test/wifi-he-info-elems-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-he-info-elems-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2024 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-ie-fragment-test.cc ns-3.43/src/wifi/test/wifi-ie-fragment-test.cc
--- ns-3.42/src/wifi/test/wifi-ie-fragment-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-ie-fragment-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-mac-ofdma-test.cc ns-3.43/src/wifi/test/wifi-mac-ofdma-test.cc
--- ns-3.42/src/wifi/test/wifi-mac-ofdma-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-mac-ofdma-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -292,7 +281,7 @@
         return;
     }
 
-    uint16_t bw = m_apMac->GetWifiPhy()->GetChannelWidth();
+    const auto bw = m_apMac->GetWifiPhy()->GetChannelWidth();
 
     m_txVector.SetPreambleType(m_modClass == WIFI_MOD_CLASS_HE ? WIFI_PREAMBLE_HE_MU
                                                                : WIFI_PREAMBLE_EHT_MU);
@@ -301,7 +290,7 @@
         m_txVector.SetEhtPpduType(0);
     }
     m_txVector.SetChannelWidth(bw);
-    m_txVector.SetGuardInterval(m_apMac->GetHeConfiguration()->GetGuardInterval().GetNanoSeconds());
+    m_txVector.SetGuardInterval(m_apMac->GetHeConfiguration()->GetGuardInterval());
     m_txVector.SetTxPowerLevel(
         GetWifiRemoteStationManager(SINGLE_LINK_OP_ID)->GetDefaultTxPowerLevel());
 
@@ -314,7 +303,7 @@
     NS_ABORT_MSG_IF(staList.size() != 4, "There must be 4 associated stations");
 
     HeRu::RuType ruType;
-    switch (bw)
+    switch (static_cast<uint16_t>(bw))
     {
     case 20:
         ruType = HeRu::RU_52_TONE;
@@ -416,7 +405,7 @@
      * \param muEdcaParameterSet the MU EDCA Parameter Set
      * \param scenario the OFDMA scenario to test
      */
-    OfdmaAckSequenceTest(uint16_t width,
+    OfdmaAckSequenceTest(MHz_u width,
                          WifiAcknowledgment::Method dlType,
                          uint32_t maxAmpduSize,
                          uint16_t txopLimit,
@@ -475,7 +464,7 @@
     NetDeviceContainer m_staDevices;            ///< stations' devices
     Ptr<WifiNetDevice> m_apDevice;              ///< AP's device
     std::vector<PacketSocketAddress> m_sockets; ///< packet socket addresses for STAs
-    uint16_t m_channelWidth;                    ///< PHY channel bandwidth in MHz
+    MHz_u m_channelWidth;                       ///< PHY channel bandwidth
     uint8_t m_muRtsRuAllocation;                ///< B7-B1 of RU Allocation subfield of MU-RTS
     std::vector<FrameInfo> m_txPsdus;           ///< transmitted PSDUs
     WifiAcknowledgment::Method m_dlMuAckType;   ///< DL MU ack sequence type
@@ -493,7 +482,7 @@
     std::vector<uint32_t> m_cwValues; ///< CW used by stations after MU exchange
 };
 
-OfdmaAckSequenceTest::OfdmaAckSequenceTest(uint16_t width,
+OfdmaAckSequenceTest::OfdmaAckSequenceTest(MHz_u width,
                                            WifiAcknowledgment::Method dlType,
                                            uint32_t maxAmpduSize,
                                            uint16_t txopLimit,
@@ -529,7 +518,7 @@
         break;
     }
 
-    switch (m_channelWidth)
+    switch (static_cast<uint16_t>(m_channelWidth))
     {
     case 20:
         m_muRtsRuAllocation = 61; // p20 index is 0
@@ -1999,7 +1988,7 @@
     phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
     phy.SetErrorRateModel("ns3::NistErrorRateModel");
     phy.SetChannel(spectrumChannel);
-    switch (m_channelWidth)
+    switch (static_cast<uint16_t>(m_channelWidth))
     {
     case 20:
         phy.Set("ChannelSettings", StringValue("{36, 20, BAND_5GHZ, 0}"));
@@ -2145,8 +2134,8 @@
     m_apDevice = DynamicCast<WifiNetDevice>(wifi.Install(phy, mac, wifiApNode).Get(0));
 
     // Assign fixed streams to random variables in use
-    streamNumber += wifi.AssignStreams(NetDeviceContainer(m_apDevice), streamNumber);
-    streamNumber += wifi.AssignStreams(m_staDevices, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(NetDeviceContainer(m_apDevice), streamNumber);
+    streamNumber += WifiHelper::AssignStreams(m_staDevices, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-mac-queue-test.cc ns-3.43/src/wifi/test/wifi-mac-queue-test.cc
--- ns-3.42/src/wifi/test/wifi-mac-queue-test.cc	2024-05-29 15:29:47.216073800 -0700
+++ ns-3.43/src/wifi/test/wifi-mac-queue-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2021 IITP RAS
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Alexander Krotov <krotov@iitp.ru>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-mlo-test.cc ns-3.43/src/wifi/test/wifi-mlo-test.cc
--- ns-3.42/src/wifi/test/wifi-mlo-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-mlo-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,86 +1,47 @@
 /*
  * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
 
-#include "ns3/ap-wifi-mac.h"
+#include "wifi-mlo-test.h"
+
 #include "ns3/config.h"
 #include "ns3/eht-configuration.h"
-#include "ns3/frame-exchange-manager.h"
+#include "ns3/ht-frame-exchange-manager.h"
 #include "ns3/log.h"
+#include "ns3/mgt-action-headers.h"
 #include "ns3/mgt-headers.h"
 #include "ns3/mobility-helper.h"
 #include "ns3/multi-link-element.h"
-#include "ns3/multi-model-spectrum-channel.h"
 #include "ns3/node-list.h"
-#include "ns3/packet-socket-client.h"
 #include "ns3/packet-socket-helper.h"
-#include "ns3/packet-socket-server.h"
 #include "ns3/packet.h"
 #include "ns3/pointer.h"
-#include "ns3/qos-utils.h"
 #include "ns3/rng-seed-manager.h"
 #include "ns3/rr-multi-user-scheduler.h"
-#include "ns3/spectrum-wifi-helper.h"
 #include "ns3/spectrum-wifi-phy.h"
-#include "ns3/sta-wifi-mac.h"
 #include "ns3/string.h"
-#include "ns3/test.h"
+#include "ns3/vht-configuration.h"
 #include "ns3/wifi-acknowledgment.h"
 #include "ns3/wifi-assoc-manager.h"
 #include "ns3/wifi-mac-header.h"
 #include "ns3/wifi-mac-queue.h"
 #include "ns3/wifi-net-device.h"
 #include "ns3/wifi-protection.h"
-#include "ns3/wifi-psdu.h"
 
 #include <algorithm>
 #include <array>
 #include <iomanip>
-#include <optional>
 #include <sstream>
 #include <tuple>
-#include <vector>
 
 using namespace ns3;
 
 NS_LOG_COMPONENT_DEFINE("WifiMloTest");
 
-/**
- * \ingroup wifi-test
- * \ingroup tests
- *
- * \brief Test the implementation of WifiAssocManager::GetNextAffiliatedAp(), which
- * searches a given RNR element for APs affiliated to the same AP MLD as the
- * reporting AP that sent the frame containing the element.
- */
-class GetRnrLinkInfoTest : public TestCase
-{
-  public:
-    /**
-     * Constructor
-     */
-    GetRnrLinkInfoTest();
-    ~GetRnrLinkInfoTest() override = default;
-
-  private:
-    void DoRun() override;
-};
-
 GetRnrLinkInfoTest::GetRnrLinkInfoTest()
     : TestCase("Check the implementation of WifiAssocManager::GetNextAffiliatedAp()")
 {
@@ -189,63 +150,15 @@
                           "Unexpected tbtt ID of the second reported AP");
 }
 
-/**
- * \ingroup wifi-test
- * \ingroup tests
- *
- * Test the WifiMac::SwapLinks() method.
- */
-class MldSwapLinksTest : public TestCase
+TypeId
+MldSwapLinksTest::TestWifiMac::GetTypeId()
 {
-    /**
-     * Test WifiMac subclass used to access the SwapLinks method.
-     */
-    class TestWifiMac : public WifiMac
-    {
-      public:
-        ~TestWifiMac() override = default;
-
-        using WifiMac::GetLinks;
-        using WifiMac::SwapLinks;
-
-        bool CanForwardPacketsTo(Mac48Address to) const override
-        {
-            return true;
-        }
-
-        void Enqueue(Ptr<Packet> packet, Mac48Address to) override
-        {
-        }
-
-      private:
-        void DoCompleteConfig() override
-        {
-        }
-    };
-
-  public:
-    MldSwapLinksTest();
-    ~MldSwapLinksTest() override = default;
-
-  protected:
-    void DoRun() override;
-
-  private:
-    /**
-     * Run a single test case.
-     *
-     * \param text string identifying the test case
-     * \param nLinks the number of links of the MLD
-     * \param links a set of pairs (from, to) each mapping a current link ID to the
-     *              link ID it has to become (i.e., link 'from' becomes link 'to')
-     * \param expected maps each link ID to the id of the PHY that is expected
-     *                 to operate on that link after the swap
-     */
-    void RunOne(std::string text,
-                std::size_t nLinks,
-                const std::map<uint8_t, uint8_t>& links,
-                const std::map<uint8_t, uint8_t>& expected);
-};
+    static TypeId tid = TypeId("ns3::TestWifiMac")
+                            .SetParent<WifiMac>()
+                            .SetGroupName("Wifi")
+                            .AddConstructor<TestWifiMac>();
+    return tid;
+}
 
 MldSwapLinksTest::MldSwapLinksTest()
     : TestCase("Test the WifiMac::SwapLinks() method")
@@ -258,33 +171,62 @@
                          const std::map<uint8_t, uint8_t>& links,
                          const std::map<uint8_t, uint8_t>& expected)
 {
-    TestWifiMac mac;
+    auto mac = CreateObjectWithAttributes<TestWifiMac>("QosSupported",
+                                                       BooleanValue(false),
+                                                       "Txop",
+                                                       PointerValue(CreateObject<Txop>()));
 
     std::vector<Ptr<WifiPhy>> phys;
-    for (std::size_t i = 0; i < nLinks; i++)
+    std::vector<Ptr<FrameExchangeManager>> feManagers;
+
+    for (std::size_t i = 0; i < nLinks; ++i)
     {
-        phys.emplace_back(CreateObject<SpectrumWifiPhy>());
+        auto phy = CreateObject<SpectrumWifiPhy>();
+        phy->SetPhyId(i);
+        phys.emplace_back(phy);
+        feManagers.emplace_back(CreateObject<TestFrameExchangeManager>());
     }
-    mac.SetWifiPhys(phys); // create links containing the given PHYs
+    mac->SetWifiPhys(phys); // create links containing the given PHYs
+    mac->SetFrameExchangeManagers(feManagers);
+    mac->GetTxop()->SetWifiMac(mac);
 
-    mac.SwapLinks(links);
+    // set CWmin of each Txop LinkEntity to the link ID, so that we can check where it has moved
+    for (std::size_t id = 0; id < nLinks; ++id)
+    {
+        mac->GetTxop()->SetMinCw(id, id);
+    }
+
+    mac->SwapLinks(links);
 
-    NS_TEST_EXPECT_MSG_EQ(mac.GetNLinks(), nLinks, "Number of links changed after swapping");
+    NS_TEST_EXPECT_MSG_EQ(mac->GetNLinks(), nLinks, "Number of links changed after swapping");
 
     for (const auto& [linkId, phyId] : expected)
     {
-        NS_TEST_ASSERT_MSG_EQ(mac.GetLinks().count(linkId),
-                              1,
+        NS_TEST_ASSERT_MSG_EQ(mac->GetLinks().contains(linkId),
+                              true,
                               "Link ID " << +linkId << " does not exist");
 
         NS_TEST_ASSERT_MSG_LT(+phyId, nLinks, "Invalid PHY ID");
 
         // the id of the PHY operating on a link is the original ID of the link
-        NS_TEST_EXPECT_MSG_EQ(mac.GetWifiPhy(linkId),
-                              phys.at(phyId),
+        NS_TEST_EXPECT_MSG_EQ(+mac->GetWifiPhy(linkId)->GetPhyId(),
+                              +phyId,
                               text << ": Link " << +phyId << " has not been moved to link "
                                    << +linkId);
+
+        NS_TEST_EXPECT_MSG_EQ(
+            +DynamicCast<TestFrameExchangeManager>(mac->GetFrameExchangeManager(linkId))
+                 ->GetLinkId(),
+            +linkId,
+            text << ": Link ID stored by FrameExchangeManager has not been updated");
+
+        NS_TEST_EXPECT_MSG_EQ(mac->GetTxop()->GetMinCw(linkId),
+                              +phyId,
+                              text << ": Txop Link entity " << +phyId
+                                   << " has not been moved to link " << +linkId);
     }
+
+    mac->Dispose();
 }
 
 void
@@ -297,6 +239,10 @@
            3,
            {{0, 2}, {2, 1}},
            {{0, 1}, {1, 2}, {2, 0}});
+    RunOne("A different non-circular swapping, same result",
+           3,
+           {{1, 0}, {2, 1}},
+           {{0, 1}, {1, 2}, {2, 0}});
     RunOne("One move only, autodetect how to complete the swapping",
            3,
            {{2, 0}},
@@ -309,169 +255,157 @@
     RunOne("Move all links to a new set of IDs", 2, {{0, 2}, {1, 3}}, {{2, 0}, {3, 1}});
 }
 
-/**
- * \ingroup wifi-test
- * \ingroup tests
- *
- * \brief Base class for Multi-Link Operations tests
- *
- * Three spectrum channels are created, one for each band (2.4 GHz, 5 GHz and 6 GHz).
- * Each PHY object is attached to the spectrum channel corresponding to the PHY band
- * in which it is operating.
- */
-class MultiLinkOperationsTestBase : public TestCase
+AidAssignmentTest::AidAssignmentTest(const std::vector<std::set<uint8_t>>& linkIds)
+    : TestCase("Test the assignment of AIDs"),
+      m_linkChannels({"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}", "{2, 0, BAND_2_4GHZ, 0}"}),
+      m_linkIds(linkIds),
+      m_expectedAid(1) // AID for first station
 {
-  public:
-    /**
-     * Configuration parameters common to all subclasses
-     */
-    struct BaseParams
-    {
-        std::vector<std::string>
-            staChannels; //!< the strings specifying the operating channels for the non-AP MLD
-        std::vector<std::string>
-            apChannels; //!< the strings specifying the operating channels for the AP MLD
-        std::vector<uint8_t>
-            fixedPhyBands; //!< list of IDs of non-AP MLD PHYs that cannot switch band
-    };
+}
 
-    /**
-     * Constructor
-     *
-     * \param name The name of the new TestCase created
-     * \param nStations the number of stations to create
-     * \param baseParams common configuration parameters
-     */
-    MultiLinkOperationsTestBase(const std::string& name,
-                                uint8_t nStations,
-                                const BaseParams& baseParams);
-    ~MultiLinkOperationsTestBase() override = default;
+void
+AidAssignmentTest::DoSetup()
+{
+    RngSeedManager::SetSeed(1);
+    RngSeedManager::SetRun(1);
+    int64_t streamNumber{1};
 
-  protected:
-    /**
-     * Callback invoked when a FEM passes PSDUs to the PHY.
-     *
-     * \param mac the MAC transmitting the PSDUs
-     * \param phyId the ID of the PHY transmitting the PSDUs
-     * \param psduMap the PSDU map
-     * \param txVector the TX vector
-     * \param txPowerW the tx power in Watts
-     */
-    virtual void Transmit(Ptr<WifiMac> mac,
-                          uint8_t phyId,
-                          WifiConstPsduMap psduMap,
-                          WifiTxVector txVector,
-                          double txPowerW);
+    NodeContainer wifiApNode;
+    wifiApNode.Create(1);
+    NodeContainer wifiStaNodes;
 
-    /**
-     * Check that the expected Capabilities information elements are present in the given
-     * management frame based on the band in which the given link is operating.
-     *
-     * \param mpdu the given management frame
-     * \param mac the MAC transmitting the management frame
-     * \param phyId the ID of the PHY transmitting the management frame
-     */
-    void CheckCapabilities(Ptr<WifiMpdu> mpdu, Ptr<WifiMac> mac, uint8_t phyId);
+    WifiHelper wifi;
+    wifi.SetStandard(WIFI_STANDARD_80211be);
+    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
+                                 "DataMode",
+                                 StringValue("EhtMcs0"),
+                                 "ControlMode",
+                                 StringValue("HtMcs0"));
 
-    /**
-     * Function to trace packets received by the server application
-     * \param nodeId the ID of the node that received the packet
-     * \param p the packet
-     * \param addr the address
-     */
-    virtual void L7Receive(uint8_t nodeId, Ptr<const Packet> p, const Address& addr);
+    auto channel = CreateObject<MultiModelSpectrumChannel>();
 
-    /**
-     * \param sockAddr the packet socket address identifying local outgoing interface
-     *                 and remote address
-     * \param count the number of packets to generate
-     * \param pktSize the size of the packets to generate
-     * \param delay the delay with which traffic generation starts
-     * \param priority user priority for generated packets
-     * \return an application generating the given number packets of the given size destined
-     *         to the given packet socket address
-     */
-    Ptr<PacketSocketClient> GetApplication(const PacketSocketAddress& sockAddr,
-                                           std::size_t count,
-                                           std::size_t pktSize,
-                                           Time delay = Seconds(0),
-                                           uint8_t priority = 0) const;
+    // AP MLD
+    SpectrumWifiPhyHelper phyHelper(3);
+    phyHelper.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+    phyHelper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
+    uint8_t linkId = 0;
+    for (const auto& str : m_linkChannels)
+    {
+        phyHelper.Set(linkId++, "ChannelSettings", StringValue(str));
+    }
+    phyHelper.SetChannel(channel);
 
-    void DoSetup() override;
+    WifiMacHelper mac;
+    mac.SetType("ns3::ApWifiMac",
+                "Ssid",
+                SsidValue(Ssid("ns-3-ssid")),
+                "BeaconGeneration",
+                BooleanValue(true));
 
-    /// PHY band-indexed map of spectrum channels
-    using ChannelMap = std::map<FrequencyRange, Ptr<MultiModelSpectrumChannel>>;
+    auto apDevice = wifi.Install(phyHelper, mac, wifiApNode);
 
-    /**
-     * Uplink or Downlink direction
-     */
-    enum Direction
+    // non-AP STAs/MLDs
+    for (const auto& links : m_linkIds)
     {
-        DL = 0,
-        UL
-    };
+        phyHelper = SpectrumWifiPhyHelper(links.size());
+        phyHelper.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+        phyHelper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
+        linkId = 0;
+        for (const auto& id : links)
+        {
+            phyHelper.Set(linkId++, "ChannelSettings", StringValue(m_linkChannels.at(id)));
+        }
+        phyHelper.SetChannel(channel);
+        phyHelper.Set("FixedPhyBand", BooleanValue(true));
+
+        WifiMacHelper mac;
+        mac.SetType("ns3::StaWifiMac",
+                    "Ssid", // first non-AP STA/MLD only starts associating
+                    SsidValue(Ssid(m_staDevices.GetN() == 0 ? "ns-3-ssid" : "default")),
+                    "ActiveProbing",
+                    BooleanValue(false));
+
+        auto staNode = CreateObject<Node>();
+        auto staDevice = wifi.Install(phyHelper, mac, staNode);
+        wifiStaNodes.Add(staNode);
+        m_staDevices.Add(staDevice);
+    }
 
-    /**
-     * Check that the Address 1 and Address 2 fields of the given PSDU contain device MAC addresses.
-     *
-     * \param psdu the given PSDU
-     * \param direction indicates direction for management frames (DL or UL)
-     */
-    void CheckAddresses(Ptr<const WifiPsdu> psdu,
-                        std::optional<Direction> direction = std::nullopt);
+    // Assign fixed streams to random variables in use
+    streamNumber += WifiHelper::AssignStreams(apDevice, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(m_staDevices, streamNumber);
 
-    /// Information about transmitted frames
-    struct FrameInfo
+    auto positionAlloc = CreateObject<ListPositionAllocator>();
+    positionAlloc->Add(Vector(0.0, 0.0, 0.0));
+    MobilityHelper mobility;
+    mobility.SetPositionAllocator(positionAlloc);
+    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+    mobility.Install(wifiApNode);
+    mobility.Install(wifiStaNodes);
+
+    for (uint32_t i = 0; i < m_staDevices.GetN(); ++i)
     {
-        Time startTx;             ///< TX start time
-        WifiConstPsduMap psduMap; ///< transmitted PSDU map
-        WifiTxVector txVector;    ///< TXVECTOR
-        uint8_t linkId;           ///< link ID
-        uint8_t phyId;            ///< ID of the transmitting PHY
-    };
+        auto mac = StaticCast<WifiNetDevice>(m_staDevices.Get(i))->GetMac();
+        mac->TraceConnectWithoutContext(
+            "Assoc",
+            MakeCallback(&AidAssignmentTest::SetSsid, this).Bind(DynamicCast<StaWifiMac>(mac)));
+    }
+}
 
-    std::vector<FrameInfo> m_txPsdus;             ///< transmitted PSDUs
-    const std::vector<std::string> m_staChannels; ///< strings specifying channels for STA
-    const std::vector<std::string> m_apChannels;  ///< strings specifying channels for AP
-    const std::vector<uint8_t> m_fixedPhyBands;   ///< links on non-AP MLD with fixed PHY band
-    Ptr<ApWifiMac> m_apMac;                       ///< AP wifi MAC
-    std::vector<Ptr<StaWifiMac>> m_staMacs;       ///< STA wifi MACs
-    uint8_t m_nStations;                          ///< number of stations to create
-    uint16_t m_lastAid;                           ///< AID of last associated station
-    Time m_duration{Seconds(1)};                  ///< simulation duration
-    std::vector<std::size_t> m_rxPkts; ///< number of packets received at application layer
-                                       ///< by each node (index is node ID)
+void
+AidAssignmentTest::SetSsid(Ptr<StaWifiMac> staMac, Mac48Address /* apAddr */)
+{
+    const auto aid = staMac->GetAssociationId();
 
-  private:
-    /**
-     * Reset the given PHY helper, use the given strings to set the ChannelSettings
-     * attribute of the PHY objects to create, and attach them to the given spectrum
-     * channels appropriately.
-     *
-     * \param helper the given PHY helper
-     * \param channels the strings specifying the operating channels to configure
-     * \param channelMap the created spectrum channels
-     */
-    void SetChannels(SpectrumWifiPhyHelper& helper,
-                     const std::vector<std::string>& channels,
-                     const ChannelMap& channelMap);
+    std::stringstream linksStr;
+    const auto setupLinks = staMac->GetSetupLinkIds();
+    std::copy(setupLinks.cbegin(), setupLinks.cend(), std::ostream_iterator<int>(linksStr, " "));
 
-    /**
-     * Set the SSID on the next station that needs to start the association procedure.
-     * This method is connected to the ApWifiMac's AssociatedSta trace source.
-     * Start generating traffic (if needed) when all stations are associated.
-     *
-     * \param aid the AID assigned to the previous associated STA
-     */
-    void SetSsid(uint16_t aid, Mac48Address /* addr */);
+    NS_LOG_INFO("STA " << staMac->GetAddress() << " associated with AID " << aid << " links "
+                       << linksStr.str());
 
-    /**
-     * Start the generation of traffic (needs to be overridden)
-     */
-    virtual void StartTraffic()
+    NS_TEST_EXPECT_MSG_EQ(aid, m_expectedAid, "Unexpected AID for STA " << staMac->GetAddress());
+    // For non-AP MLDs, check that the requested links have been setup (for non-AP STAs, link ID
+    // as seen by the non-AP STAs is always zero and could not match link ID as seen by the AP MLD)
+    if (m_linkIds.at(aid - 1).size() > 1)
+    {
+        NS_TEST_EXPECT_MSG_EQ((staMac->GetSetupLinkIds() == m_linkIds.at(aid - 1)),
+                              true,
+                              "Unexpected set of setup links " << linksStr.str());
+    }
+
+    if (m_expectedAid < m_staDevices.GetN())
+    {
+        // let the next STA associate with the AP
+        StaticCast<WifiNetDevice>(m_staDevices.Get(m_expectedAid))
+            ->GetMac()
+            ->SetSsid(Ssid("ns-3-ssid"));
+        ++m_expectedAid;
+    }
+    else
+    {
+        Simulator::Stop(MilliSeconds(5)); // allow sending Ack response to Association Response
+    }
+}
+
+void
+AidAssignmentTest::DoRun()
+{
+    Simulator::Stop(Seconds(5)); // simulation will stop earlier if all STAs complete association
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(m_expectedAid, m_staDevices.GetN(), "Not all STAs completed association");
+
+    for (uint32_t i = 0; i < m_staDevices.GetN(); ++i)
     {
+        auto mac = StaticCast<WifiNetDevice>(m_staDevices.Get(i))->GetMac();
+        mac->TraceDisconnectWithoutContext(
+            "Assoc",
+            MakeCallback(&AidAssignmentTest::SetSsid, this).Bind(DynamicCast<StaWifiMac>(mac)));
     }
-};
+
+    Simulator::Destroy();
+}
 
 MultiLinkOperationsTestBase::MultiLinkOperationsTestBase(const std::string& name,
                                                          uint8_t nStations,
@@ -575,20 +509,10 @@
     {
         std::stringstream ss;
         ss << std::setprecision(10) << "PSDU #" << m_txPsdus.size() << " Link ID "
-           << +linkId.value() << " Phy ID " << +phyId << " " << psdu->GetHeader(0).GetTypeString()
-           << " #MPDUs " << psdu->GetNMpdus() << " duration/ID " << psdu->GetHeader(0).GetDuration()
-           << " RA = " << psdu->GetAddr1() << " TA = " << psdu->GetAddr2()
-           << " ADDR3 = " << psdu->GetHeader(0).GetAddr3()
-           << " ToDS = " << psdu->GetHeader(0).IsToDs()
-           << " FromDS = " << psdu->GetHeader(0).IsFromDs();
-        if (psdu->GetHeader(0).IsQosData())
+           << +linkId.value() << " Phy ID " << +phyId << " #MPDUs " << psdu->GetNMpdus();
+        for (auto it = psdu->begin(); it != psdu->end(); ++it)
         {
-            ss << " seqNo = {";
-            for (auto& mpdu : *PeekPointer(psdu))
-            {
-                ss << mpdu->GetHeader().GetSequenceNumber() << ",";
-            }
-            ss << "} TID = " << +psdu->GetHeader(0).GetQosTid();
+            ss << "\n" << **it;
         }
         NS_LOG_INFO(ss.str());
 
@@ -690,6 +614,7 @@
 {
     helper = SpectrumWifiPhyHelper(channels.size());
     helper.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
+    helper.SetPcapCaptureType(WifiPhyHelper::PcapCaptureType::PCAP_PER_LINK);
 
     uint8_t linkId = 0;
     for (const auto& str : channels)
@@ -761,8 +686,8 @@
     // staPhyHelper.EnablePcap("wifi-mlo_STA", staDevices);
 
     // Assign fixed streams to random variables in use
-    streamNumber += wifi.AssignStreams(apDevices, streamNumber);
-    streamNumber += wifi.AssignStreams(staDevices, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(apDevices, streamNumber);
+    streamNumber += WifiHelper::AssignStreams(staDevices, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -876,152 +801,21 @@
     Simulator::Schedule(MilliSeconds(5), &MultiLinkOperationsTestBase::StartTraffic, this);
 }
 
-/**
- * \ingroup wifi-test
- * \ingroup tests
- *
- * \brief Multi-Link Discovery & Setup test.
- *
- * This test sets up an AP MLD and a non-AP MLD having a variable number of links.
- * The RF channels to set each link to are provided as input parameters through the test
- * case constructor, along with the identifiers (starting at 0) of the links that cannot
- * switch PHY band (if any). The links that are expected to be setup are also provided as input
- * parameters. This test verifies that the management frames exchanged during ML discovery
- * and ML setup contain the expected values and that the two MLDs setup the expected links.
- *
- * The negotiated TID-to-link mapping is tested by verifying that generated QoS data frames of
- * a given TID are transmitted on links which the TID is mapped to. Specifically, the following
- * operations are performed separately for each direction (downlink and uplink). A first TID
- * is searched such that it is not mapped on all the setup links. If no such TID is found, only
- * QoS frames of TID 0 are generated. Otherwise, we also search for a second TID that is mapped
- * to a link set that is disjoint with the link set to which the first TID is mapped. If such a
- * TID is found, QoS frames of both the first TID and the second TID are generated; otherwise,
- * only QoS frames of the first TID are generated. For each TID, a number of QoS frames equal
- * to the number of setup links is generated. For each TID, we check that the first N QoS frames,
- * where N is the size of the link set to which the TID is mapped, are transmitted concurrently,
- * while the following QoS frames are sent after the first QoS frame sent on the same link. We
- * also check that all the QoS frames are sent on a link belonging to the link set to which the
- * TID is mapped. If QoS frames of two TIDs are generated, we also check that the first N QoS
- * frames of a TID, where N is the size of the link set to which that TID is mapped, are sent
- * concurrently with the first M QoS frames of the other TID, where M is the size of the link
- * set to which the other TID is mapped.
- */
-class MultiLinkSetupTest : public MultiLinkOperationsTestBase
-{
-  public:
-    /**
-     * Constructor
-     *
-     * \param baseParams common configuration parameters
-     * \param scanType the scan type (active or passive)
-     * \param setupLinks a list of links that are expected to be setup. In case one of the two
-     *                   devices has a single link, the ID of the link on the MLD is indicated
-     * \param apNegSupport TID-to-Link Mapping negotiation supported by the AP MLD (0, 1, or 3)
-     * \param dlTidToLinkMapping DL TID-to-Link Mapping for EHT configuration of non-AP MLD
-     * \param ulTidToLinkMapping UL TID-to-Link Mapping for EHT configuration of non-AP MLD
-     */
-    MultiLinkSetupTest(const BaseParams& baseParams,
-                       WifiScanType scanType,
-                       const std::vector<uint8_t>& setupLinks,
-                       WifiTidToLinkMappingNegSupport apNegSupport,
-                       const std::string& dlTidToLinkMapping,
-                       const std::string& ulTidToLinkMapping);
-    ~MultiLinkSetupTest() override = default;
-
-  protected:
-    void DoSetup() override;
-    void DoRun() override;
-
-  private:
-    void StartTraffic() override;
-
-    /**
-     * Check correctness of Multi-Link Setup procedure.
-     */
-    void CheckMlSetup();
-
-    /**
-     * Check that links that are not setup on the non-AP MLD are disabled. Also, on the AP side,
-     * check that the queue storing QoS data frames destined to the non-AP MLD has a mask for a
-     * link if and only if the link has been setup by the non-AO MLD.
-     */
-    void CheckDisabledLinks();
-
-    /**
-     * Check correctness of the given Beacon frame.
-     *
-     * \param mpdu the given Beacon frame
-     * \param linkId the ID of the link on which the Beacon frame was transmitted
-     */
-    void CheckBeacon(Ptr<WifiMpdu> mpdu, uint8_t linkId);
-
-    /**
-     * Check correctness of the given Probe Response frame.
-     *
-     * \param mpdu the given Probe Response frame
-     * \param linkId the ID of the link on which the Probe Response frame was transmitted
-     */
-    void CheckProbeResponse(Ptr<WifiMpdu> mpdu, uint8_t linkId);
-
-    /**
-     * Check correctness of the given Association Request frame.
-     *
-     * \param mpdu the given Association Request frame
-     * \param linkId the ID of the link on which the Association Request frame was transmitted
-     */
-    void CheckAssocRequest(Ptr<WifiMpdu> mpdu, uint8_t linkId);
-
-    /**
-     * Check correctness of the given Association Response frame.
-     *
-     * \param mpdu the given Association Response frame
-     * \param linkId the ID of the link on which the Association Response frame was transmitted
-     */
-    void CheckAssocResponse(Ptr<WifiMpdu> mpdu, uint8_t linkId);
-
-    /**
-     * Check that QoS data frames are sent on links their TID is mapped to.
-     *
-     * \param mpdu the given QoS data frame
-     * \param linkId the ID of the link on which the QoS data frame was transmitted
-     * \param index index of the QoS data frame in the vector of transmitted PSDUs
-     */
-    void CheckQosData(Ptr<WifiMpdu> mpdu, uint8_t linkId, std::size_t index);
-
-    const std::vector<uint8_t> m_setupLinks; //!< IDs of the expected links to setup
-    WifiScanType m_scanType;                 //!< the scan type (active or passive)
-    std::size_t m_nProbeResp; //!< number of Probe Responses received by the non-AP MLD
-    WifiTidToLinkMappingNegSupport
-        m_apNegSupport;                //!< TID-to-Link Mapping negotiation supported by the AP MLD
-    std::string m_dlTidLinkMappingStr; //!< DL TID-to-Link Mapping for non-AP MLD EHT configuration
-    std::string m_ulTidLinkMappingStr; //!< UL TID-to-Link Mapping for non-AP MLD EHT configuration
-    WifiTidLinkMapping m_dlTidLinkMapping; //!< expected DL TID-to-Link Mapping requested by non-AP
-                                           //!< MLD and accepted by AP MLD
-    WifiTidLinkMapping m_ulTidLinkMapping; //!< expected UL TID-to-Link Mapping requested by non-AP
-                                           //!< MLD and accepted by AP MLD
-    uint8_t m_dlTid1;                      //!< the TID of the first set of DL QoS data frames
-    uint8_t m_ulTid1;                      //!< the TID of the first set of UL QoS data frames
-    std::optional<uint8_t> m_dlTid2;       //!< the TID of the optional set of DL QoS data frames
-    std::optional<uint8_t> m_ulTid2;       //!< the TID of the optional set of UL QoS data frames
-    std::vector<std::size_t>
-        m_qosFrames1; //!< indices of QoS frames of the first set in the vector of TX PSDUs
-    std::vector<std::size_t>
-        m_qosFrames2; //!< indices of QoS frames of the optional set in the vector of TX PSDUs
-};
-
 MultiLinkSetupTest::MultiLinkSetupTest(const BaseParams& baseParams,
                                        WifiScanType scanType,
                                        const std::vector<uint8_t>& setupLinks,
                                        WifiTidToLinkMappingNegSupport apNegSupport,
                                        const std::string& dlTidToLinkMapping,
-                                       const std::string& ulTidToLinkMapping)
+                                       const std::string& ulTidToLinkMapping,
+                                       bool support160MHzOp)
     : MultiLinkOperationsTestBase("Check correctness of Multi-Link Setup", 1, baseParams),
       m_setupLinks(setupLinks),
       m_scanType(scanType),
       m_nProbeResp(0),
       m_apNegSupport(apNegSupport),
       m_dlTidLinkMappingStr(dlTidToLinkMapping),
-      m_ulTidLinkMappingStr(ulTidToLinkMapping)
+      m_ulTidLinkMappingStr(ulTidToLinkMapping),
+      m_support160MHzOp(support160MHzOp)
 {
 }
 
@@ -1127,6 +921,19 @@
             mac->SetAttribute(attrName, UintegerValue(100));
         }
     }
+
+    // configure support for 160 MHz operations and set the channels again to check that they
+    // are compatible
+    for (auto staMac : m_staMacs)
+    {
+        staMac->GetVhtConfiguration()->SetAttribute("Support160MHzOperation",
+                                                    BooleanValue(m_support160MHzOp));
+        uint8_t linkId = 0;
+        for (const auto& str : m_staChannels)
+        {
+            staMac->GetWifiPhy(linkId++)->SetAttribute("ChannelSettings", StringValue(str));
+        }
+    }
 }
 
 void
@@ -1203,7 +1010,7 @@
             break;
 
         case WIFI_MAC_QOSDATA:
-            CheckQosData(mpdu, linkId, index);
+            CheckQosData(mpdu, frameInfo.txVector, linkId, index);
             break;
 
         default:
@@ -1626,26 +1433,37 @@
                               true,
                               "STA " << staAddr << " not found in list of associated STAs");
 
-        // STA of non-AP MLD operate on the same channel as the AP
-        NS_TEST_EXPECT_MSG_EQ(
-            +m_staMacs[0]->GetWifiPhy(staLinkId)->GetOperatingChannel().GetNumber(),
-            +m_apMac->GetWifiPhy(apLinkId)->GetOperatingChannel().GetNumber(),
-            "Incorrect operating channel number for STA on link " << +staLinkId);
-        NS_TEST_EXPECT_MSG_EQ(
-            m_staMacs[0]->GetWifiPhy(staLinkId)->GetOperatingChannel().GetFrequency(),
-            m_apMac->GetWifiPhy(apLinkId)->GetOperatingChannel().GetFrequency(),
-            "Incorrect operating channel frequency for STA on link " << +staLinkId);
-        NS_TEST_EXPECT_MSG_EQ(m_staMacs[0]->GetWifiPhy(staLinkId)->GetOperatingChannel().GetWidth(),
-                              m_apMac->GetWifiPhy(apLinkId)->GetOperatingChannel().GetWidth(),
+        // STA of non-AP MLD operate on the same channel as the AP (or on its primary80 if the AP
+        // operates on a 160 MHz channel and non-AP MLD does not support 160 MHz operations)
+        const auto& staChannel = m_staMacs[0]->GetWifiPhy(staLinkId)->GetOperatingChannel();
+        const auto& apChannel = m_apMac->GetWifiPhy(apLinkId)->GetOperatingChannel();
+
+        auto width = apChannel.GetTotalWidth();
+        auto primary20 = apChannel.GetPrimaryChannelIndex(20);
+
+        if (width > 80 && !m_support160MHzOp)
+        {
+            width = 80;
+            primary20 -= apChannel.GetPrimaryChannelIndex(80) * 4;
+        }
+
+        NS_TEST_EXPECT_MSG_EQ(+staChannel.GetNumber(),
+                              +apChannel.GetPrimaryChannelNumber(width, WIFI_STANDARD_80211be),
+                              "Incorrect operating channel number for STA on link " << +staLinkId);
+        NS_TEST_EXPECT_MSG_EQ(staChannel.GetFrequency(),
+                              apChannel.GetPrimaryChannelCenterFrequency(width),
+                              "Incorrect operating channel frequency for STA on link "
+                                  << +staLinkId);
+        NS_TEST_EXPECT_MSG_EQ(staChannel.GetWidth(),
+                              width,
                               "Incorrect operating channel width for STA on link " << +staLinkId);
-        NS_TEST_EXPECT_MSG_EQ(
-            +m_staMacs[0]->GetWifiPhy(staLinkId)->GetOperatingChannel().GetPhyBand(),
-            +m_apMac->GetWifiPhy(apLinkId)->GetOperatingChannel().GetPhyBand(),
-            "Incorrect operating PHY band for STA on link " << +staLinkId);
-        NS_TEST_EXPECT_MSG_EQ(
-            +m_staMacs[0]->GetWifiPhy(staLinkId)->GetOperatingChannel().GetPrimaryChannelIndex(20),
-            +m_apMac->GetWifiPhy(apLinkId)->GetOperatingChannel().GetPrimaryChannelIndex(20),
-            "Incorrect operating primary channel index for STA on link " << +staLinkId);
+        NS_TEST_EXPECT_MSG_EQ(+staChannel.GetPhyBand(),
+                              +apChannel.GetPhyBand(),
+                              "Incorrect operating PHY band for STA on link " << +staLinkId);
+        NS_TEST_EXPECT_MSG_EQ(+staChannel.GetPrimaryChannelIndex(20),
+                              +primary20,
+                              "Incorrect operating primary channel index for STA on link "
+                                  << +staLinkId);
     }
 
     // lambda to check the link mapping stored at wifi MAC
@@ -1667,6 +1485,23 @@
                     "Incorrect link mapping stored by "
                         << (mac->GetTypeOfStation() == AP ? "AP" : "non-AP") << " MLD for " << dir
                         << " direction");
+
+                // check correctness of WifiMac::TidMappedOnLink function
+                std::set<uint8_t> setupLinks(m_setupLinks.cbegin(), m_setupLinks.cend());
+                for (uint8_t tid = 0; tid < 8; ++tid)
+                {
+                    const auto& linkSet = mapping.contains(tid) ? mapping.at(tid) : setupLinks;
+
+                    for (const auto linkId : setupLinks)
+                    {
+                        NS_TEST_EXPECT_MSG_EQ(
+                            mac->TidMappedOnLink(dest->GetAddress(), dir, tid, linkId),
+                            linkSet.contains(linkId),
+                            "Incorrect return value on " << (mac == m_apMac ? "AP" : "STA")
+                                                         << " direction " << dir << " TID " << +tid
+                                                         << " linkID " << +linkId);
+                    }
+                }
             }
         };
 
@@ -1726,20 +1561,30 @@
 }
 
 void
-MultiLinkSetupTest::CheckQosData(Ptr<WifiMpdu> mpdu, uint8_t linkId, std::size_t index)
+MultiLinkSetupTest::CheckQosData(Ptr<WifiMpdu> mpdu,
+                                 const WifiTxVector& txvector,
+                                 uint8_t linkId,
+                                 std::size_t index)
 {
     WifiDirection dir;
     const auto& hdr = mpdu->GetHeader();
 
     NS_TEST_ASSERT_MSG_EQ(hdr.IsQosData(), true, "Expected a QoS data frame");
 
+    // check TX width
+    // STA of non-AP MLD operate on the same channel as the AP (or on its primary80 if the AP
+    // operates on a 160 MHz channel and non-AP MLD does not support 160 MHz operations)
+    MHz_u width;
+
     if (!hdr.IsToDs() && hdr.IsFromDs())
     {
         dir = WifiDirection::DOWNLINK;
+        width = m_apMac->GetWifiPhy(linkId)->GetOperatingChannel().GetTotalWidth();
     }
     else if (hdr.IsToDs() && !hdr.IsFromDs())
     {
         dir = WifiDirection::UPLINK;
+        width = m_staMacs[0]->GetWifiPhy(linkId)->GetOperatingChannel().GetTotalWidth();
     }
     else
     {
@@ -1747,6 +1592,12 @@
                                                                      << hdr.IsFromDs() << ")");
     }
 
+    if (width > 80 && !m_support160MHzOp)
+    {
+        width = 80;
+    }
+    NS_TEST_EXPECT_MSG_EQ(txvector.GetChannelWidth(), width, "Unexpected TX width");
+
     const auto& tid1 = (dir == WifiDirection::DOWNLINK) ? m_dlTid1 : m_ulTid1;
     const auto& tid2 = (dir == WifiDirection::DOWNLINK) ? m_dlTid2 : m_ulTid2;
     uint8_t tid = hdr.GetQosTid();
@@ -1865,124 +1716,6 @@
     }
 }
 
-/**
- * Tested traffic patterns.
- */
-enum class WifiTrafficPattern : uint8_t
-{
-    STA_TO_STA = 0,
-    STA_TO_AP,
-    AP_TO_STA,
-    AP_TO_BCAST,
-    STA_TO_BCAST
-};
-
-/**
- * Block Ack agreement enabled/disabled
- */
-enum class WifiBaEnabled : uint8_t
-{
-    NO = 0,
-    YES
-};
-
-/**
- * Whether to send a BlockAckReq after a missed BlockAck
- */
-enum class WifiUseBarAfterMissedBa : uint8_t
-{
-    NO = 0,
-    YES
-};
-
-/**
- * \ingroup wifi-test
- * \ingroup tests
- *
- * \brief Test data transmission between two MLDs.
- *
- * This test sets up an AP MLD and two non-AP MLDs having a variable number of links.
- * The RF channels to set each link to are provided as input parameters through the test
- * case constructor, along with the identifiers (starting at 0) of the links that cannot
- * switch PHY band (if any). This test aims at veryfing the successful transmission of both
- * unicast QoS data frames (from one station to another, from one station to the AP, from
- * the AP to the station) and broadcast QoS data frames (from the AP or from one station).
- * In the scenarios in which the AP forwards frames (i.e., from one station to another and
- * from one station to broadcast) the client application generates only 4 packets, in order
- * to limit the probability of collisions. In the other scenarios, 8 packets are generated.
- * When BlockAck agreements are enabled, the maximum A-MSDU size is set such that two
- * packets can be aggregated in an A-MSDU. The MPDU with sequence number equal to 1 is
- * corrupted (once, by using a post reception error model) to test its successful
- * re-transmission, unless the traffic scenario is from the AP to broadcast (broadcast frames
- * are not retransmitted) or is a scenario where the AP forwards frame (to limit the
- * probability of collisions).
- *
- * When BlockAck agreements are enabled, we also corrupt a BlockAck frame, so as to simulate
- * the case of BlockAck timeout. Both the case where a BlockAckReq is sent and the case where
- * data frame are retransmitted are tested. Finally, when BlockAck agreements are enabled, we
- * also enable the concurrent transmission of data frames over two links and check that at
- * least one MPDU is concurrently transmitted over two links.
- */
-class MultiLinkTxTest : public MultiLinkOperationsTestBase
-{
-  public:
-    /**
-     * Constructor
-     *
-     * \param baseParams common configuration parameters
-     * \param trafficPattern the pattern of traffic to generate
-     * \param baEnabled whether BA agreement is enabled or disabled
-     * \param useBarAfterMissedBa whether a BAR or Data frames are sent after missed BlockAck
-     * \param nMaxInflight the max number of links on which an MPDU can be simultaneously inflight
-     *                     (unused if Block Ack agreements are not established)
-     */
-    MultiLinkTxTest(const BaseParams& baseParams,
-                    WifiTrafficPattern trafficPattern,
-                    WifiBaEnabled baEnabled,
-                    WifiUseBarAfterMissedBa useBarAfterMissedBa,
-                    uint8_t nMaxInflight);
-    ~MultiLinkTxTest() override = default;
-
-  protected:
-    /**
-     * Check the content of a received BlockAck frame when the max number of links on which
-     * an MPDU can be inflight is one.
-     *
-     * \param psdu the PSDU containing the BlockAck
-     * \param txVector the TXVECTOR used to transmit the BlockAck
-     * \param linkId the ID of the link on which the BlockAck was transmitted
-     */
-    void CheckBlockAck(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId);
-
-    void Transmit(Ptr<WifiMac> mac,
-                  uint8_t phyId,
-                  WifiConstPsduMap psduMap,
-                  WifiTxVector txVector,
-                  double txPowerW) override;
-    void DoSetup() override;
-    void DoRun() override;
-
-  private:
-    void StartTraffic() override;
-
-    /// Receiver address-indexed map of list error models
-    using RxErrorModelMap = std::unordered_map<Mac48Address, Ptr<ListErrorModel>, WifiAddressHash>;
-
-    RxErrorModelMap m_errorModels;       ///< error rate models to corrupt packets
-    std::list<uint64_t> m_uidList;       ///< list of UIDs of packets to corrupt
-    bool m_dataCorrupted{false};         ///< whether second data frame has been already corrupted
-    WifiTrafficPattern m_trafficPattern; ///< the pattern of traffic to generate
-    bool m_baEnabled;                    ///< whether BA agreement is enabled or disabled
-    bool m_useBarAfterMissedBa;          ///< whether to send BAR after missed BlockAck
-    std::size_t m_nMaxInflight;          ///< max number of links on which an MPDU can be inflight
-    std::size_t m_nPackets;              ///< number of application packets to generate
-    std::size_t m_blockAckCount{0};      ///< transmitted BlockAck counter
-    std::size_t m_blockAckReqCount{0};   ///< transmitted BlockAckReq counter
-    std::map<uint16_t, std::size_t> m_inflightCount; ///< seqNo-indexed max number of simultaneous
-                                                     ///< transmissions of a data frame
-    Ptr<WifiMac> m_sourceMac; ///< MAC of the node sending application packets
-};
-
 MultiLinkTxTest::MultiLinkTxTest(const BaseParams& baseParams,
                                  WifiTrafficPattern trafficPattern,
                                  WifiBaEnabled baEnabled,
@@ -2450,105 +2183,6 @@
     Simulator::Destroy();
 }
 
-/**
- * Tested MU traffic patterns.
- */
-enum class WifiMuTrafficPattern : uint8_t
-{
-    DL_MU_BAR_BA_SEQUENCE = 0,
-    DL_MU_MU_BAR,
-    DL_MU_AGGR_MU_BAR,
-    UL_MU
-};
-
-/**
- * \ingroup wifi-test
- * \ingroup tests
- *
- * \brief Test data transmission between MLDs using OFDMA MU transmissions
- *
- * This test sets up an AP MLD and two non-AP MLDs having a variable number of links.
- * The RF channels to set each link to are provided as input parameters through the test
- * case constructor, along with the identifiers (starting at 0) of the links that cannot
- * switch PHY band (if any). This test aims at veryfing the successful transmission of both
- * DL MU and UL MU frames. In the DL MU scenarios, the client applications installed on the
- * AP generate 8 packets addressed to each of the stations (plus 3 packets to trigger the
- * establishment of BlockAck agreements). In the UL MU scenario, client applications
- * installed on the stations generate 4 packets each (plus 3 packets to trigger the
- * establishment of BlockAck agreements).
- *
- * The maximum A-MSDU size is set such that two packets can be aggregated in an A-MSDU.
- * The MPDU with sequence number equal to 3 is corrupted (by using a post reception error
- * model) once and for a single station, to test its successful re-transmission.
- *
- * Also, we enable the concurrent transmission of data frames over two links and check that at
- * least one MPDU is concurrently transmitted over two links.
- */
-class MultiLinkMuTxTest : public MultiLinkOperationsTestBase
-{
-  public:
-    /**
-     * Constructor
-     *
-     * \param baseParams common configuration parameters
-     * \param muTrafficPattern the pattern of traffic to generate
-     * \param useBarAfterMissedBa whether a BAR or Data frames are sent after missed BlockAck
-     * \param nMaxInflight the max number of links on which an MPDU can be simultaneously inflight
-     *                     (unused if Block Ack agreements are not established)
-     */
-    MultiLinkMuTxTest(const BaseParams& baseParams,
-                      WifiMuTrafficPattern muTrafficPattern,
-                      WifiUseBarAfterMissedBa useBarAfterMissedBa,
-                      uint8_t nMaxInflight);
-    ~MultiLinkMuTxTest() override = default;
-
-  protected:
-    /**
-     * Check the content of a received BlockAck frame when the max number of links on which
-     * an MPDU can be inflight is one.
-     *
-     * \param psdu the PSDU containing the BlockAck
-     * \param txVector the TXVECTOR used to transmit the BlockAck
-     * \param linkId the ID of the link on which the BlockAck was transmitted
-     */
-    void CheckBlockAck(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId);
-
-    void Transmit(Ptr<WifiMac> mac,
-                  uint8_t phyId,
-                  WifiConstPsduMap psduMap,
-                  WifiTxVector txVector,
-                  double txPowerW) override;
-    void DoSetup() override;
-    void DoRun() override;
-
-  private:
-    void StartTraffic() override;
-
-    /// Receiver address-indexed map of list error models
-    using RxErrorModelMap = std::unordered_map<Mac48Address, Ptr<ListErrorModel>, WifiAddressHash>;
-
-    /// A pair of a MAC address (the address of the receiver for DL frames and the address of
-    /// the sender for UL frames) and a sequence number identifying a transmitted QoS data frame
-    using AddrSeqNoPair = std::pair<Mac48Address, uint16_t>;
-
-    RxErrorModelMap m_errorModels;                  ///< error rate models to corrupt packets
-    std::list<uint64_t> m_uidList;                  ///< list of UIDs of packets to corrupt
-    std::optional<Mac48Address> m_dataCorruptedSta; ///< MAC address of the station that received
-                                                    ///< MPDU with SeqNo=2 corrupted
-    bool m_waitFirstTf{true}; ///< whether we are waiting for the first Basic Trigger Frame
-    WifiMuTrafficPattern m_muTrafficPattern; ///< the pattern of traffic to generate
-    bool m_useBarAfterMissedBa;              ///< whether to send BAR after missed BlockAck
-    std::size_t m_nMaxInflight; ///< max number of links on which an MPDU can be inflight
-    std::vector<PacketSocketAddress> m_sockets; ///< packet socket addresses for STAs
-    std::size_t m_nPackets;                     ///< number of application packets to generate
-    std::size_t m_blockAckCount{0};             ///< transmitted BlockAck counter
-    std::size_t m_tfCount{0};                   ///< transmitted Trigger Frame counter
-    // std::size_t m_blockAckReqCount{0};     ///< transmitted BlockAckReq counter
-    std::map<AddrSeqNoPair, std::size_t> m_inflightCount; ///< max number of simultaneous
-                                                          ///< transmissions of each data frame
-    Ptr<WifiMac> m_sourceMac; ///< MAC of the node sending application packets
-};
-
 MultiLinkMuTxTest::MultiLinkMuTxTest(const BaseParams& baseParams,
                                      WifiMuTrafficPattern muTrafficPattern,
                                      WifiUseBarAfterMissedBa useBarAfterMissedBa,
@@ -3060,48 +2694,6 @@
     Simulator::Destroy();
 }
 
-/**
- * \ingroup wifi-test
- * \ingroup tests
- *
- * \brief Test release of sequence numbers upon CTS timeout in multi-link operations
- *
- * In this test, an AP MLD and a non-AP MLD setup 3 links. Usage of RTS/CTS protection is
- * enabled for frames whose length is at least 1000 bytes. The AP MLD receives a first set
- * of 4 packets from the upper layer and sends an RTS frame, which is corrupted at the
- * receiver, on a first link. When the RTS frame is transmitted, the AP MLD receives another
- * set of 4 packets, which are transmitted after a successful RTS/CTS exchange on a second
- * link. In the meantime, a new RTS/CTS exchange is successfully carried out (on the first
- * link or on the third link) to transmit the first set of 4 packets. When the transmission
- * of the first set of 4 packets starts, the AP MLD receives the third set of 4 packets from
- * the upper layer, which are transmitted after a successful RTS/CTS exchange.
- *
- * This test checks that sequence numbers are correctly assigned to all the MPDUs carrying data.
- */
-class ReleaseSeqNoAfterCtsTimeoutTest : public MultiLinkOperationsTestBase
-{
-  public:
-    ReleaseSeqNoAfterCtsTimeoutTest();
-    ~ReleaseSeqNoAfterCtsTimeoutTest() override = default;
-
-  protected:
-    void DoSetup() override;
-    void DoRun() override;
-    void Transmit(Ptr<WifiMac> mac,
-                  uint8_t phyId,
-                  WifiConstPsduMap psduMap,
-                  WifiTxVector txVector,
-                  double txPowerW) override;
-
-  private:
-    void StartTraffic() override;
-
-    PacketSocketAddress m_sockAddr;   //!< packet socket address
-    std::size_t m_nQosDataFrames;     //!< counter for transmitted QoS data frames
-    Ptr<ListErrorModel> m_errorModel; //!< error rate model to corrupt first RTS frame
-    bool m_rtsCorrupted;              //!< whether the first RTS frame has been corrupted
-};
-
 ReleaseSeqNoAfterCtsTimeoutTest::ReleaseSeqNoAfterCtsTimeoutTest()
     : MultiLinkOperationsTestBase(
           "Check sequence numbers after CTS timeout",
@@ -3219,17 +2811,160 @@
     Simulator::Destroy();
 }
 
-/**
- * \ingroup wifi-test
- * \ingroup tests
- *
- * \brief wifi 11be MLD Test Suite
- */
-class WifiMultiLinkOperationsTestSuite : public TestSuite
+StartSeqNoUpdateAfterAddBaTimeoutTest::StartSeqNoUpdateAfterAddBaTimeoutTest()
+    : MultiLinkOperationsTestBase(
+          "Check starting sequence number update after ADDBA Response timeout",
+          1,
+          BaseParams{{"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
+                     {"{36, 0, BAND_5GHZ, 0}", "{1, 0, BAND_6GHZ, 0}"},
+                     {}}),
+      m_nQosDataCount(0),
+      m_staErrorModel(CreateObject<ListErrorModel>())
+{
+}
+
+void
+StartSeqNoUpdateAfterAddBaTimeoutTest::DoSetup()
+{
+    // Enable RTS/CTS by setting a threshold lower than packet size (1000)
+    Config::SetDefault("ns3::WifiRemoteStationManager::RtsCtsThreshold", UintegerValue(900));
+
+    MultiLinkOperationsTestBase::DoSetup();
+
+    // install post reception error model on all STAs affiliated with non-AP MLD
+    for (const auto linkId : m_staMacs[0]->GetLinkIds())
+    {
+        m_staMacs[0]->GetWifiPhy(linkId)->SetPostReceptionErrorModel(m_staErrorModel);
+    }
+}
+
+void
+StartSeqNoUpdateAfterAddBaTimeoutTest::StartTraffic()
+{
+    m_sockAddr.SetSingleDevice(m_apMac->GetDevice()->GetIfIndex());
+    m_sockAddr.SetPhysicalAddress(m_staMacs[0]->GetAddress());
+    m_sockAddr.SetProtocol(1);
+
+    // install client application generating 1 packet of 1000 bytes on the AP MLD
+    m_apMac->GetDevice()->GetNode()->AddApplication(GetApplication(m_sockAddr, 1, 1000));
+}
+
+void
+StartSeqNoUpdateAfterAddBaTimeoutTest::Transmit(Ptr<WifiMac> mac,
+                                                uint8_t phyId,
+                                                WifiConstPsduMap psduMap,
+                                                WifiTxVector txVector,
+                                                double txPowerW)
+{
+    auto psdu = psduMap.begin()->second;
+    const auto& hdr = psdu->GetHeader(0);
+
+    if (hdr.IsAck())
+    {
+        NS_TEST_ASSERT_MSG_EQ(m_txPsdus.empty(), false, "No frame preceding transmitted Ack");
+
+        auto prevPsdu = m_txPsdus.back().psduMap.begin()->second;
+
+        if (prevPsdu->GetHeader(0).IsAction())
+        {
+            WifiActionHeader actionHdr;
+            (*prevPsdu->begin())->GetPacket()->PeekHeader(actionHdr);
+            if (actionHdr.GetCategory() == WifiActionHeader::BLOCK_ACK &&
+                actionHdr.GetAction().blockAck == WifiActionHeader::BLOCK_ACK_ADDBA_REQUEST)
+            {
+                // non-AP MLD is acknowledging the ADDBA Request sent by the AP MLD. When the
+                // AP MLD receives the Ack, it starts an AddBaResponse timer; when the timer
+                // expires, the AP MLD starts sending data frames with normal acknowledgment.
+                // Block transmissions of the non-AP MLD on the link that has to be used to send
+                // the ADDBA Response from now until the end of the timer.
+
+                m_staMacs[0]->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                    m_apMac->GetAddress(),
+                                                    {phyId});
+
+                auto band = m_apMac->GetWifiPhy(m_txPsdus.back().linkId)->GetPhyBand();
+                auto ackDuration = WifiPhy::CalculateTxDuration(psduMap, txVector, band);
+
+                // After the AddBaResponse timeout, unblock transmissions of the non-AP MLD on the
+                // link on which the ADDBA Response has to be sent and block transmissions of the
+                // AP MLD on the same link, so that we recreate the situation where the AP MLD sends
+                // the QoS data frame on a link while the non-AP MLD is sending the ADDBA Response
+                // frame on another link.
+                Simulator::Schedule(
+                    ackDuration + m_apMac->GetQosTxop(AC_BE)->GetAddBaResponseTimeout(),
+                    [=, this]() {
+                        m_apMac->BlockUnicastTxOnLinks(WifiQueueBlockedReason::TID_NOT_MAPPED,
+                                                       m_staMacs[0]->GetAddress(),
+                                                       {phyId});
+                        m_staMacs[0]->UnblockUnicastTxOnLinks(
+                            WifiQueueBlockedReason::TID_NOT_MAPPED,
+                            m_apMac->GetAddress(),
+                            {phyId});
+                    });
+            }
+        }
+    }
+
+    MultiLinkOperationsTestBase::Transmit(mac, phyId, psduMap, txVector, txPowerW);
+
+    if (hdr.IsAction())
+    {
+        WifiActionHeader actionHdr;
+        (*psdu->begin())->GetPacket()->PeekHeader(actionHdr);
+        if (actionHdr.GetCategory() == WifiActionHeader::BLOCK_ACK &&
+            actionHdr.GetAction().blockAck == WifiActionHeader::BLOCK_ACK_ADDBA_RESPONSE)
+        {
+            auto band = m_staMacs[0]->GetDevice()->GetPhy(phyId)->GetPhyBand();
+            auto addBaRespDuration = WifiPhy::CalculateTxDuration(psduMap, txVector, band);
+
+            Simulator::Schedule(addBaRespDuration + TimeStep(1), [=, this]() {
+                // After the AP MLD has received the ADDBA Response frame:
+                // - check that the AP has one queued QoS data frame that is in flight
+                auto mpdu = m_apMac->GetTxopQueue(AC_BE)->Peek();
+                NS_TEST_ASSERT_MSG_NE(mpdu, nullptr, "Expected an MPDU in the AP MLD queue");
+                NS_TEST_EXPECT_MSG_EQ(mpdu->GetHeader().IsQosData(),
+                                      true,
+                                      "Expected a QoS data frame");
+                NS_TEST_EXPECT_MSG_EQ(
+                    mpdu->IsInFlight(),
+                    true,
+                    "Expected the data frame to be inflight when ADDBA RESP is received");
+
+                // - check that the starting sequence number at the originator (AP MLD) equals
+                //   the sequence number of the inflight MPDU
+                NS_TEST_EXPECT_MSG_EQ(
+                    m_apMac->GetQosTxop(AC_BE)->GetBaStartingSequence(m_staMacs[0]->GetAddress(),
+                                                                      0),
+                    mpdu->GetHeader().GetSequenceNumber(),
+                    "Unexpected BA Starting Sequence Number");
+            });
+        }
+    }
+    else if (hdr.IsQosData())
+    {
+        // corrupt the reception of the data frame the first time it is sent
+        if (m_nQosDataCount++ == 0)
+        {
+            m_staErrorModel->SetList({psdu->GetPacket()->GetUid()});
+        }
+        else
+        {
+            m_staErrorModel->SetList({});
+        }
+    }
+}
+
+void
+StartSeqNoUpdateAfterAddBaTimeoutTest::DoRun()
 {
-  public:
-    WifiMultiLinkOperationsTestSuite();
-};
+    Simulator::Stop(m_duration);
+    Simulator::Run();
+
+    NS_TEST_EXPECT_MSG_EQ(+m_rxPkts[1], 1, "Unexpected number of packets received by STA 0");
+    NS_TEST_EXPECT_MSG_EQ(m_nQosDataCount, 2, "QoS data frame should be transmitted twice");
+
+    Simulator::Destroy();
+}
 
 WifiMultiLinkOperationsTestSuite::WifiMultiLinkOperationsTestSuite()
     : TestSuite("wifi-mlo", Type::UNIT)
@@ -3242,6 +2977,26 @@
 
     AddTestCase(new GetRnrLinkInfoTest(), TestCase::Duration::QUICK);
     AddTestCase(new MldSwapLinksTest(), TestCase::Duration::QUICK);
+    AddTestCase(
+        new AidAssignmentTest(
+            std::vector<std::set<uint8_t>>{{0, 1, 2}, {1, 2}, {0, 1}, {0, 2}, {0}, {1}, {2}}),
+        TestCase::Duration::QUICK);
+
+    // check that the selection of channels in ML setup accounts for the inability of a
+    // non-AP MLD to operate on a 160 MHz channel
+    AddTestCase(
+        new MultiLinkSetupTest(
+            MultiLinkOperationsTestBase::BaseParams{
+                {"{42, 80, BAND_5GHZ, 2}", "{5, 40, BAND_2_4GHZ, 0}", "{7, 80, BAND_6GHZ, 0}"},
+                {"{3, 40, BAND_2_4GHZ, 0}", "{15, 160, BAND_6GHZ, 7}", "{50, 160, BAND_5GHZ, 2}"},
+                {}},
+            WifiScanType::PASSIVE,
+            {0, 1, 2},
+            WifiTidToLinkMappingNegSupport::ANY_LINK_SET,
+            "",
+            "",
+            false),
+        TestCase::Duration::QUICK);
 
     for (const auto& [baseParams,
                       setupLinks,
@@ -3415,6 +3170,7 @@
     }
 
     AddTestCase(new ReleaseSeqNoAfterCtsTimeoutTest(), TestCase::Duration::QUICK);
+    AddTestCase(new StartSeqNoUpdateAfterAddBaTimeoutTest(), TestCase::Duration::QUICK);
 }
 
 static WifiMultiLinkOperationsTestSuite g_wifiMultiLinkOperationsTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-mlo-test.h ns-3.43/src/wifi/test/wifi-mlo-test.h
--- ns-3.42/src/wifi/test/wifi-mlo-test.h	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/test/wifi-mlo-test.h	2024-10-09 16:41:10.136656800 -0700
@@ -0,0 +1,776 @@
+/*
+ * Copyright (c) 2022 Universita' degli Studi di Napoli Federico II
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Stefano Avallone <stavallo@unina.it>
+ */
+
+#ifndef WIFI_MLO_TEST_H
+#define WIFI_MLO_TEST_H
+
+#include "ns3/ap-wifi-mac.h"
+#include "ns3/frame-exchange-manager.h"
+#include "ns3/mgt-action-headers.h"
+#include "ns3/mgt-headers.h"
+#include "ns3/multi-model-spectrum-channel.h"
+#include "ns3/packet-socket-client.h"
+#include "ns3/packet-socket-server.h"
+#include "ns3/qos-utils.h"
+#include "ns3/spectrum-wifi-helper.h"
+#include "ns3/sta-wifi-mac.h"
+#include "ns3/test.h"
+#include "ns3/wifi-psdu.h"
+
+#include <optional>
+#include <vector>
+
+using namespace ns3;
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test the implementation of WifiAssocManager::GetNextAffiliatedAp(), which
+ * searches a given RNR element for APs affiliated to the same AP MLD as the
+ * reporting AP that sent the frame containing the element.
+ */
+class GetRnrLinkInfoTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     */
+    GetRnrLinkInfoTest();
+    ~GetRnrLinkInfoTest() override = default;
+
+  private:
+    void DoRun() override;
+};
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * Test the WifiMac::SwapLinks() method.
+ */
+class MldSwapLinksTest : public TestCase
+{
+    /**
+     * Test WifiMac subclass used to access the SwapLinks method.
+     */
+    class TestWifiMac : public WifiMac
+    {
+      public:
+        ~TestWifiMac() override = default;
+
+        /// \return the object TypeId
+        static TypeId GetTypeId();
+
+        using WifiMac::GetLinks;
+        using WifiMac::SwapLinks;
+
+        bool CanForwardPacketsTo(Mac48Address to) const override
+        {
+            return true;
+        }
+
+      private:
+        void DoCompleteConfig() override
+        {
+        }
+
+        void Enqueue(Ptr<WifiMpdu> mpdu, Mac48Address to, Mac48Address from) override
+        {
+        }
+    };
+
+    /**
+     * Test FrameExchangeManager subclass to access m_linkId
+     */
+    class TestFrameExchangeManager : public FrameExchangeManager
+    {
+      public:
+        /// \return the link ID stored by this object
+        uint8_t GetLinkId() const
+        {
+            return m_linkId;
+        }
+    };
+
+  public:
+    MldSwapLinksTest();
+    ~MldSwapLinksTest() override = default;
+
+  protected:
+    void DoRun() override;
+
+  private:
+    /**
+     * Run a single test case.
+     *
+     * \param text string identifying the test case
+     * \param nLinks the number of links of the MLD
+     * \param links a set of pairs (from, to) each mapping a current link ID to the
+     *              link ID it has to become (i.e., link 'from' becomes link 'to')
+     * \param expected maps each link ID to the id of the PHY that is expected
+     *                 to operate on that link after the swap
+     */
+    void RunOne(std::string text,
+                std::size_t nLinks,
+                const std::map<uint8_t, uint8_t>& links,
+                const std::map<uint8_t, uint8_t>& expected);
+};
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * Test that the AIDs that an AP MLD assigns to SLDs and MLDs are all unique.
+ */
+class AidAssignmentTest : public TestCase
+{
+  public:
+    /**
+     * Constructor.
+     *
+     * \param linkIds A vector specifying the set of link IDs each STA will setup
+     */
+    AidAssignmentTest(const std::vector<std::set<uint8_t>>& linkIds);
+
+  private:
+    void DoSetup() override;
+    void DoRun() override;
+
+    /**
+     * Set the SSID on the next station that needs to start the association procedure.
+     * This method is triggered every time a STA completes its association.
+     *
+     * \param staMac the MAC of the STA that completed association
+     */
+    void SetSsid(Ptr<StaWifiMac> staMac, Mac48Address /* apAddr */);
+
+    const std::vector<std::string> m_linkChannels;  //!< channels for all AP links
+    const std::vector<std::set<uint8_t>> m_linkIds; //!< link IDs for all non-AP STAs/MLDs
+    NetDeviceContainer m_staDevices;                //!< non-AP STAs/MLDs devices
+    uint16_t m_expectedAid;                         //!< expected AID for current non-AP STA/MLD
+};
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Base class for Multi-Link Operations tests
+ *
+ * Three spectrum channels are created, one for each band (2.4 GHz, 5 GHz and 6 GHz).
+ * Each PHY object is attached to the spectrum channel corresponding to the PHY band
+ * in which it is operating.
+ */
+class MultiLinkOperationsTestBase : public TestCase
+{
+  public:
+    /**
+     * Configuration parameters common to all subclasses
+     */
+    struct BaseParams
+    {
+        std::vector<std::string>
+            staChannels; //!< the strings specifying the operating channels for the non-AP MLD
+        std::vector<std::string>
+            apChannels; //!< the strings specifying the operating channels for the AP MLD
+        std::vector<uint8_t>
+            fixedPhyBands; //!< list of IDs of non-AP MLD PHYs that cannot switch band
+    };
+
+    /**
+     * Constructor
+     *
+     * \param name The name of the new TestCase created
+     * \param nStations the number of stations to create
+     * \param baseParams common configuration parameters
+     */
+    MultiLinkOperationsTestBase(const std::string& name,
+                                uint8_t nStations,
+                                const BaseParams& baseParams);
+    ~MultiLinkOperationsTestBase() override = default;
+
+  protected:
+    /**
+     * Callback invoked when a FEM passes PSDUs to the PHY.
+     *
+     * \param mac the MAC transmitting the PSDUs
+     * \param phyId the ID of the PHY transmitting the PSDUs
+     * \param psduMap the PSDU map
+     * \param txVector the TX vector
+     * \param txPowerW the tx power in Watts
+     */
+    virtual void Transmit(Ptr<WifiMac> mac,
+                          uint8_t phyId,
+                          WifiConstPsduMap psduMap,
+                          WifiTxVector txVector,
+                          double txPowerW);
+
+    /**
+     * Check that the expected Capabilities information elements are present in the given
+     * management frame based on the band in which the given link is operating.
+     *
+     * \param mpdu the given management frame
+     * \param mac the MAC transmitting the management frame
+     * \param phyId the ID of the PHY transmitting the management frame
+     */
+    void CheckCapabilities(Ptr<WifiMpdu> mpdu, Ptr<WifiMac> mac, uint8_t phyId);
+
+    /**
+     * Function to trace packets received by the server application
+     * \param nodeId the ID of the node that received the packet
+     * \param p the packet
+     * \param addr the address
+     */
+    virtual void L7Receive(uint8_t nodeId, Ptr<const Packet> p, const Address& addr);
+
+    /**
+     * \param sockAddr the packet socket address identifying local outgoing interface
+     *                 and remote address
+     * \param count the number of packets to generate
+     * \param pktSize the size of the packets to generate
+     * \param delay the delay with which traffic generation starts
+     * \param priority user priority for generated packets
+     * \return an application generating the given number packets of the given size destined
+     *         to the given packet socket address
+     */
+    Ptr<PacketSocketClient> GetApplication(const PacketSocketAddress& sockAddr,
+                                           std::size_t count,
+                                           std::size_t pktSize,
+                                           Time delay = Seconds(0),
+                                           uint8_t priority = 0) const;
+
+    void DoSetup() override;
+
+    /// PHY band-indexed map of spectrum channels
+    using ChannelMap = std::map<FrequencyRange, Ptr<MultiModelSpectrumChannel>>;
+
+    /**
+     * Uplink or Downlink direction
+     */
+    enum Direction
+    {
+        DL = 0,
+        UL
+    };
+
+    /**
+     * Check that the Address 1 and Address 2 fields of the given PSDU contain device MAC addresses.
+     *
+     * \param psdu the given PSDU
+     * \param direction indicates direction for management frames (DL or UL)
+     */
+    void CheckAddresses(Ptr<const WifiPsdu> psdu,
+                        std::optional<Direction> direction = std::nullopt);
+
+    /// Information about transmitted frames
+    struct FrameInfo
+    {
+        Time startTx;             ///< TX start time
+        WifiConstPsduMap psduMap; ///< transmitted PSDU map
+        WifiTxVector txVector;    ///< TXVECTOR
+        uint8_t linkId;           ///< link ID
+        uint8_t phyId;            ///< ID of the transmitting PHY
+    };
+
+    std::vector<FrameInfo> m_txPsdus;             ///< transmitted PSDUs
+    const std::vector<std::string> m_staChannels; ///< strings specifying channels for STA
+    const std::vector<std::string> m_apChannels;  ///< strings specifying channels for AP
+    const std::vector<uint8_t> m_fixedPhyBands;   ///< links on non-AP MLD with fixed PHY band
+    Ptr<ApWifiMac> m_apMac;                       ///< AP wifi MAC
+    std::vector<Ptr<StaWifiMac>> m_staMacs;       ///< STA wifi MACs
+    uint8_t m_nStations;                          ///< number of stations to create
+    uint16_t m_lastAid;                           ///< AID of last associated station
+    Time m_duration{Seconds(1)};                  ///< simulation duration
+    std::vector<std::size_t> m_rxPkts; ///< number of packets received at application layer
+                                       ///< by each node (index is node ID)
+
+    /**
+     * Reset the given PHY helper, use the given strings to set the ChannelSettings
+     * attribute of the PHY objects to create, and attach them to the given spectrum
+     * channels appropriately.
+     *
+     * \param helper the given PHY helper
+     * \param channels the strings specifying the operating channels to configure
+     * \param channelMap the created spectrum channels
+     */
+    void SetChannels(SpectrumWifiPhyHelper& helper,
+                     const std::vector<std::string>& channels,
+                     const ChannelMap& channelMap);
+
+    /**
+     * Set the SSID on the next station that needs to start the association procedure.
+     * This method is connected to the ApWifiMac's AssociatedSta trace source.
+     * Start generating traffic (if needed) when all stations are associated.
+     *
+     * \param aid the AID assigned to the previous associated STA
+     */
+    void SetSsid(uint16_t aid, Mac48Address /* addr */);
+
+  private:
+    /**
+     * Start the generation of traffic (needs to be overridden)
+     */
+    virtual void StartTraffic()
+    {
+    }
+};
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Multi-Link Discovery & Setup test.
+ *
+ * This test sets up an AP MLD and a non-AP MLD having a variable number of links.
+ * The RF channels to set each link to are provided as input parameters through the test
+ * case constructor, along with the identifiers (starting at 0) of the links that cannot
+ * switch PHY band (if any). The links that are expected to be setup are also provided as input
+ * parameters. This test verifies that the management frames exchanged during ML discovery
+ * and ML setup contain the expected values and that the two MLDs setup the expected links.
+ *
+ * The negotiated TID-to-link mapping is tested by verifying that generated QoS data frames of
+ * a given TID are transmitted on links which the TID is mapped to. Specifically, the following
+ * operations are performed separately for each direction (downlink and uplink). A first TID
+ * is searched such that it is not mapped on all the setup links. If no such TID is found, only
+ * QoS frames of TID 0 are generated. Otherwise, we also search for a second TID that is mapped
+ * to a link set that is disjoint with the link set to which the first TID is mapped. If such a
+ * TID is found, QoS frames of both the first TID and the second TID are generated; otherwise,
+ * only QoS frames of the first TID are generated. For each TID, a number of QoS frames equal
+ * to the number of setup links is generated. For each TID, we check that the first N QoS frames,
+ * where N is the size of the link set to which the TID is mapped, are transmitted concurrently,
+ * while the following QoS frames are sent after the first QoS frame sent on the same link. We
+ * also check that all the QoS frames are sent on a link belonging to the link set to which the
+ * TID is mapped. If QoS frames of two TIDs are generated, we also check that the first N QoS
+ * frames of a TID, where N is the size of the link set to which that TID is mapped, are sent
+ * concurrently with the first M QoS frames of the other TID, where M is the size of the link
+ * set to which the other TID is mapped.
+ */
+class MultiLinkSetupTest : public MultiLinkOperationsTestBase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * \param baseParams common configuration parameters
+     * \param scanType the scan type (active or passive)
+     * \param setupLinks a list of links that are expected to be setup. In case one of the two
+     *                   devices has a single link, the ID of the link on the MLD is indicated
+     * \param apNegSupport TID-to-Link Mapping negotiation supported by the AP MLD (0, 1, or 3)
+     * \param dlTidToLinkMapping DL TID-to-Link Mapping for EHT configuration of non-AP MLD
+     * \param ulTidToLinkMapping UL TID-to-Link Mapping for EHT configuration of non-AP MLD
+     * \param support160MHzOp whether non-AP MLDs support 160 MHz operations
+     */
+    MultiLinkSetupTest(const BaseParams& baseParams,
+                       WifiScanType scanType,
+                       const std::vector<uint8_t>& setupLinks,
+                       WifiTidToLinkMappingNegSupport apNegSupport,
+                       const std::string& dlTidToLinkMapping,
+                       const std::string& ulTidToLinkMapping,
+                       bool support160MHzOp = true);
+    ~MultiLinkSetupTest() override = default;
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+
+  private:
+    void StartTraffic() override;
+
+    /**
+     * Check correctness of Multi-Link Setup procedure.
+     */
+    void CheckMlSetup();
+
+    /**
+     * Check that links that are not setup on the non-AP MLD are disabled. Also, on the AP side,
+     * check that the queue storing QoS data frames destined to the non-AP MLD has a mask for a
+     * link if and only if the link has been setup by the non-AO MLD.
+     */
+    void CheckDisabledLinks();
+
+    /**
+     * Check correctness of the given Beacon frame.
+     *
+     * \param mpdu the given Beacon frame
+     * \param linkId the ID of the link on which the Beacon frame was transmitted
+     */
+    void CheckBeacon(Ptr<WifiMpdu> mpdu, uint8_t linkId);
+
+    /**
+     * Check correctness of the given Probe Response frame.
+     *
+     * \param mpdu the given Probe Response frame
+     * \param linkId the ID of the link on which the Probe Response frame was transmitted
+     */
+    void CheckProbeResponse(Ptr<WifiMpdu> mpdu, uint8_t linkId);
+
+    /**
+     * Check correctness of the given Association Request frame.
+     *
+     * \param mpdu the given Association Request frame
+     * \param linkId the ID of the link on which the Association Request frame was transmitted
+     */
+    void CheckAssocRequest(Ptr<WifiMpdu> mpdu, uint8_t linkId);
+
+    /**
+     * Check correctness of the given Association Response frame.
+     *
+     * \param mpdu the given Association Response frame
+     * \param linkId the ID of the link on which the Association Response frame was transmitted
+     */
+    void CheckAssocResponse(Ptr<WifiMpdu> mpdu, uint8_t linkId);
+
+    /**
+     * Check that QoS data frames are sent on links their TID is mapped to and with the
+     * correct TX width.
+     *
+     * \param mpdu the given QoS data frame
+     * \param txvector the TXVECTOR used to send the QoS data frame
+     * \param linkId the ID of the link on which the QoS data frame was transmitted
+     * \param index index of the QoS data frame in the vector of transmitted PSDUs
+     */
+    void CheckQosData(Ptr<WifiMpdu> mpdu,
+                      const WifiTxVector& txvector,
+                      uint8_t linkId,
+                      std::size_t index);
+
+    const std::vector<uint8_t> m_setupLinks; //!< IDs of the expected links to setup
+    WifiScanType m_scanType;                 //!< the scan type (active or passive)
+    std::size_t m_nProbeResp; //!< number of Probe Responses received by the non-AP MLD
+    WifiTidToLinkMappingNegSupport
+        m_apNegSupport;                //!< TID-to-Link Mapping negotiation supported by the AP MLD
+    std::string m_dlTidLinkMappingStr; //!< DL TID-to-Link Mapping for non-AP MLD EHT configuration
+    std::string m_ulTidLinkMappingStr; //!< UL TID-to-Link Mapping for non-AP MLD EHT configuration
+    WifiTidLinkMapping m_dlTidLinkMapping; //!< expected DL TID-to-Link Mapping requested by non-AP
+                                           //!< MLD and accepted by AP MLD
+    WifiTidLinkMapping m_ulTidLinkMapping; //!< expected UL TID-to-Link Mapping requested by non-AP
+                                           //!< MLD and accepted by AP MLD
+    uint8_t m_dlTid1;                      //!< the TID of the first set of DL QoS data frames
+    uint8_t m_ulTid1;                      //!< the TID of the first set of UL QoS data frames
+    std::optional<uint8_t> m_dlTid2;       //!< the TID of the optional set of DL QoS data frames
+    std::optional<uint8_t> m_ulTid2;       //!< the TID of the optional set of UL QoS data frames
+    std::vector<std::size_t>
+        m_qosFrames1; //!< indices of QoS frames of the first set in the vector of TX PSDUs
+    std::vector<std::size_t>
+        m_qosFrames2;       //!< indices of QoS frames of the optional set in the vector of TX PSDUs
+    bool m_support160MHzOp; //!< whether non-AP MLDs support 160 MHz operations
+};
+
+/**
+ * Tested traffic patterns.
+ */
+enum class WifiTrafficPattern : uint8_t
+{
+    STA_TO_STA = 0,
+    STA_TO_AP,
+    AP_TO_STA,
+    AP_TO_BCAST,
+    STA_TO_BCAST
+};
+
+/**
+ * Block Ack agreement enabled/disabled
+ */
+enum class WifiBaEnabled : uint8_t
+{
+    NO = 0,
+    YES
+};
+
+/**
+ * Whether to send a BlockAckReq after a missed BlockAck
+ */
+enum class WifiUseBarAfterMissedBa : uint8_t
+{
+    NO = 0,
+    YES
+};
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test data transmission between two MLDs.
+ *
+ * This test sets up an AP MLD and two non-AP MLDs having a variable number of links.
+ * The RF channels to set each link to are provided as input parameters through the test
+ * case constructor, along with the identifiers (starting at 0) of the links that cannot
+ * switch PHY band (if any). This test aims at veryfing the successful transmission of both
+ * unicast QoS data frames (from one station to another, from one station to the AP, from
+ * the AP to the station) and broadcast QoS data frames (from the AP or from one station).
+ * In the scenarios in which the AP forwards frames (i.e., from one station to another and
+ * from one station to broadcast) the client application generates only 4 packets, in order
+ * to limit the probability of collisions. In the other scenarios, 8 packets are generated.
+ * When BlockAck agreements are enabled, the maximum A-MSDU size is set such that two
+ * packets can be aggregated in an A-MSDU. The MPDU with sequence number equal to 1 is
+ * corrupted (once, by using a post reception error model) to test its successful
+ * re-transmission, unless the traffic scenario is from the AP to broadcast (broadcast frames
+ * are not retransmitted) or is a scenario where the AP forwards frame (to limit the
+ * probability of collisions).
+ *
+ * When BlockAck agreements are enabled, we also corrupt a BlockAck frame, so as to simulate
+ * the case of BlockAck timeout. Both the case where a BlockAckReq is sent and the case where
+ * data frame are retransmitted are tested. Finally, when BlockAck agreements are enabled, we
+ * also enable the concurrent transmission of data frames over two links and check that at
+ * least one MPDU is concurrently transmitted over two links.
+ */
+class MultiLinkTxTest : public MultiLinkOperationsTestBase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * \param baseParams common configuration parameters
+     * \param trafficPattern the pattern of traffic to generate
+     * \param baEnabled whether BA agreement is enabled or disabled
+     * \param useBarAfterMissedBa whether a BAR or Data frames are sent after missed BlockAck
+     * \param nMaxInflight the max number of links on which an MPDU can be simultaneously inflight
+     *                     (unused if Block Ack agreements are not established)
+     */
+    MultiLinkTxTest(const BaseParams& baseParams,
+                    WifiTrafficPattern trafficPattern,
+                    WifiBaEnabled baEnabled,
+                    WifiUseBarAfterMissedBa useBarAfterMissedBa,
+                    uint8_t nMaxInflight);
+    ~MultiLinkTxTest() override = default;
+
+  protected:
+    /**
+     * Check the content of a received BlockAck frame when the max number of links on which
+     * an MPDU can be inflight is one.
+     *
+     * \param psdu the PSDU containing the BlockAck
+     * \param txVector the TXVECTOR used to transmit the BlockAck
+     * \param linkId the ID of the link on which the BlockAck was transmitted
+     */
+    void CheckBlockAck(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId);
+
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+    void DoSetup() override;
+    void DoRun() override;
+
+  private:
+    void StartTraffic() override;
+
+    /// Receiver address-indexed map of list error models
+    using RxErrorModelMap = std::unordered_map<Mac48Address, Ptr<ListErrorModel>, WifiAddressHash>;
+
+    RxErrorModelMap m_errorModels;       ///< error rate models to corrupt packets
+    std::list<uint64_t> m_uidList;       ///< list of UIDs of packets to corrupt
+    bool m_dataCorrupted{false};         ///< whether second data frame has been already corrupted
+    WifiTrafficPattern m_trafficPattern; ///< the pattern of traffic to generate
+    bool m_baEnabled;                    ///< whether BA agreement is enabled or disabled
+    bool m_useBarAfterMissedBa;          ///< whether to send BAR after missed BlockAck
+    std::size_t m_nMaxInflight;          ///< max number of links on which an MPDU can be inflight
+    std::size_t m_nPackets;              ///< number of application packets to generate
+    std::size_t m_blockAckCount{0};      ///< transmitted BlockAck counter
+    std::size_t m_blockAckReqCount{0};   ///< transmitted BlockAckReq counter
+    std::map<uint16_t, std::size_t> m_inflightCount; ///< seqNo-indexed max number of simultaneous
+                                                     ///< transmissions of a data frame
+    Ptr<WifiMac> m_sourceMac; ///< MAC of the node sending application packets
+};
+
+/**
+ * Tested MU traffic patterns.
+ */
+enum class WifiMuTrafficPattern : uint8_t
+{
+    DL_MU_BAR_BA_SEQUENCE = 0,
+    DL_MU_MU_BAR,
+    DL_MU_AGGR_MU_BAR,
+    UL_MU
+};
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test data transmission between MLDs using OFDMA MU transmissions
+ *
+ * This test sets up an AP MLD and two non-AP MLDs having a variable number of links.
+ * The RF channels to set each link to are provided as input parameters through the test
+ * case constructor, along with the identifiers (starting at 0) of the links that cannot
+ * switch PHY band (if any). This test aims at veryfing the successful transmission of both
+ * DL MU and UL MU frames. In the DL MU scenarios, the client applications installed on the
+ * AP generate 8 packets addressed to each of the stations (plus 3 packets to trigger the
+ * establishment of BlockAck agreements). In the UL MU scenario, client applications
+ * installed on the stations generate 4 packets each (plus 3 packets to trigger the
+ * establishment of BlockAck agreements).
+ *
+ * The maximum A-MSDU size is set such that two packets can be aggregated in an A-MSDU.
+ * The MPDU with sequence number equal to 3 is corrupted (by using a post reception error
+ * model) once and for a single station, to test its successful re-transmission.
+ *
+ * Also, we enable the concurrent transmission of data frames over two links and check that at
+ * least one MPDU is concurrently transmitted over two links.
+ */
+class MultiLinkMuTxTest : public MultiLinkOperationsTestBase
+{
+  public:
+    /**
+     * Constructor
+     *
+     * \param baseParams common configuration parameters
+     * \param muTrafficPattern the pattern of traffic to generate
+     * \param useBarAfterMissedBa whether a BAR or Data frames are sent after missed BlockAck
+     * \param nMaxInflight the max number of links on which an MPDU can be simultaneously inflight
+     *                     (unused if Block Ack agreements are not established)
+     */
+    MultiLinkMuTxTest(const BaseParams& baseParams,
+                      WifiMuTrafficPattern muTrafficPattern,
+                      WifiUseBarAfterMissedBa useBarAfterMissedBa,
+                      uint8_t nMaxInflight);
+    ~MultiLinkMuTxTest() override = default;
+
+  protected:
+    /**
+     * Check the content of a received BlockAck frame when the max number of links on which
+     * an MPDU can be inflight is one.
+     *
+     * \param psdu the PSDU containing the BlockAck
+     * \param txVector the TXVECTOR used to transmit the BlockAck
+     * \param linkId the ID of the link on which the BlockAck was transmitted
+     */
+    void CheckBlockAck(Ptr<const WifiPsdu> psdu, const WifiTxVector& txVector, uint8_t linkId);
+
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+    void DoSetup() override;
+    void DoRun() override;
+
+  private:
+    void StartTraffic() override;
+
+    /// Receiver address-indexed map of list error models
+    using RxErrorModelMap = std::unordered_map<Mac48Address, Ptr<ListErrorModel>, WifiAddressHash>;
+
+    /// A pair of a MAC address (the address of the receiver for DL frames and the address of
+    /// the sender for UL frames) and a sequence number identifying a transmitted QoS data frame
+    using AddrSeqNoPair = std::pair<Mac48Address, uint16_t>;
+
+    RxErrorModelMap m_errorModels;                  ///< error rate models to corrupt packets
+    std::list<uint64_t> m_uidList;                  ///< list of UIDs of packets to corrupt
+    std::optional<Mac48Address> m_dataCorruptedSta; ///< MAC address of the station that received
+                                                    ///< MPDU with SeqNo=2 corrupted
+    bool m_waitFirstTf{true}; ///< whether we are waiting for the first Basic Trigger Frame
+    WifiMuTrafficPattern m_muTrafficPattern; ///< the pattern of traffic to generate
+    bool m_useBarAfterMissedBa;              ///< whether to send BAR after missed BlockAck
+    std::size_t m_nMaxInflight; ///< max number of links on which an MPDU can be inflight
+    std::vector<PacketSocketAddress> m_sockets; ///< packet socket addresses for STAs
+    std::size_t m_nPackets;                     ///< number of application packets to generate
+    std::size_t m_blockAckCount{0};             ///< transmitted BlockAck counter
+    std::size_t m_tfCount{0};                   ///< transmitted Trigger Frame counter
+    // std::size_t m_blockAckReqCount{0};     ///< transmitted BlockAckReq counter
+    std::map<AddrSeqNoPair, std::size_t> m_inflightCount; ///< max number of simultaneous
+                                                          ///< transmissions of each data frame
+    Ptr<WifiMac> m_sourceMac; ///< MAC of the node sending application packets
+};
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test release of sequence numbers upon CTS timeout in multi-link operations
+ *
+ * In this test, an AP MLD and a non-AP MLD setup 3 links. Usage of RTS/CTS protection is
+ * enabled for frames whose length is at least 1000 bytes. The AP MLD receives a first set
+ * of 4 packets from the upper layer and sends an RTS frame, which is corrupted at the
+ * receiver, on a first link. When the RTS frame is transmitted, the AP MLD receives another
+ * set of 4 packets, which are transmitted after a successful RTS/CTS exchange on a second
+ * link. In the meantime, a new RTS/CTS exchange is successfully carried out (on the first
+ * link or on the third link) to transmit the first set of 4 packets. When the transmission
+ * of the first set of 4 packets starts, the AP MLD receives the third set of 4 packets from
+ * the upper layer, which are transmitted after a successful RTS/CTS exchange.
+ *
+ * This test checks that sequence numbers are correctly assigned to all the MPDUs carrying data.
+ */
+class ReleaseSeqNoAfterCtsTimeoutTest : public MultiLinkOperationsTestBase
+{
+  public:
+    ReleaseSeqNoAfterCtsTimeoutTest();
+    ~ReleaseSeqNoAfterCtsTimeoutTest() override = default;
+
+  protected:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+
+  private:
+    void StartTraffic() override;
+
+    PacketSocketAddress m_sockAddr;   //!< packet socket address
+    std::size_t m_nQosDataFrames;     //!< counter for transmitted QoS data frames
+    Ptr<ListErrorModel> m_errorModel; //!< error rate model to corrupt first RTS frame
+    bool m_rtsCorrupted;              //!< whether the first RTS frame has been corrupted
+};
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test update of BA starting sequence number after ADDBA Response timeout in
+ *        multi-link operations
+ *
+ * In this test, an AP MLD and a non-AP MLD setup 2 links. The AP MLD has a QoS data frame to
+ * transmit to the non-AP MLD, which triggers the establishment of a BA agreement. When the ADDBA
+ * Request frame is received by the non-AP MLD, transmissions of the non-AP MLD are blocked to put
+ * the transmission of the ADDBA Response on hold. The goal is to mimic a delay in getting channel
+ * access due to, e.g., other devices grabbing the medium. When the ADDBA Response timer at the AP
+ * MLD expires, transmissions of the non-AP MLD are unblocked, so that the AP MLD sends the QoS data
+ * frame (protected by RTS, but the test works without RTS as well, and using Normal acknowledgment)
+ * on one link and the non-AP MLD sends the ADDBA Response on the other link. The transmission of
+ * the QoS data frame is then corrupted. We verify that:
+ *
+ * - when the AP MLD receives the ADDBA Response, the BA starting sequence number is set to the
+ *   sequence number of the QoS data frame which is inflight
+ * - the QoS data frame is retransmitted and received by the non-AP MLD
+ */
+class StartSeqNoUpdateAfterAddBaTimeoutTest : public MultiLinkOperationsTestBase
+{
+  public:
+    StartSeqNoUpdateAfterAddBaTimeoutTest();
+
+  private:
+    void DoSetup() override;
+    void DoRun() override;
+    void Transmit(Ptr<WifiMac> mac,
+                  uint8_t phyId,
+                  WifiConstPsduMap psduMap,
+                  WifiTxVector txVector,
+                  double txPowerW) override;
+    void StartTraffic() override;
+
+    PacketSocketAddress m_sockAddr;      //!< packet socket address
+    std::size_t m_nQosDataCount;         //!< counter for transmitted QoS data frames
+    Ptr<ListErrorModel> m_staErrorModel; //!< error rate model to corrupt frames at the non-AP MLD
+};
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief wifi 11be MLD Test Suite
+ */
+class WifiMultiLinkOperationsTestSuite : public TestSuite
+{
+  public:
+    WifiMultiLinkOperationsTestSuite();
+};
+
+#endif /* WIFI_MLO_TEST_H */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-non-ht-dup-test.cc ns-3.43/src/wifi/test/wifi-non-ht-dup-test.cc
--- ns-3.42/src/wifi/test/wifi-non-ht-dup-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-non-ht-dup-test.cc	2024-10-09 16:41:10.136656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -52,7 +41,7 @@
 
 NS_LOG_COMPONENT_DEFINE("WifiNonHtDuplicateTest");
 
-constexpr uint32_t DEFAULT_FREQUENCY = 5180; // MHz
+constexpr MHz_u DEFAULT_FREQUENCY = 5180;
 
 /**
  * HE PHY used for testing MU-RTS/CTS.
@@ -205,12 +194,12 @@
 {
   public:
     /// A vector containing parameters per STA: the standard, the center frequency and the P20 index
-    using StasParams = std::vector<std::tuple<WifiStandard, uint16_t, uint8_t>>;
+    using StasParams = std::vector<std::tuple<WifiStandard, MHz_u, uint8_t>>;
 
     /**
      * Constructor
      * \param apStandard the standard to use for the AP
-     * \param apFrequency the center frequency of the AP (in MHz)
+     * \param apFrequency the center frequency of the AP
      * \param apP20Index the index of the primary 20 MHz channel of the AP
      * \param stasParams the parameters of the STAs (\see StasParams)
      * \param per20MhzInterference flags per 20 MHz subchannel whether an interference should be
@@ -218,7 +207,7 @@
      * interference.
      */
     TestNonHtDuplicatePhyReception(WifiStandard apStandard,
-                                   uint16_t apFrequency,
+                                   MHz_u apFrequency,
                                    uint8_t apP20Index,
                                    StasParams stasParams,
                                    std::vector<bool> per20MhzInterference = {});
@@ -264,9 +253,9 @@
 
     /**
      * Send non-HT duplicate PPDU function
-     * \param channelWidth the channel width to use to transmit the non-HT PPDU (in MHz)
+     * \param channelWidth the channel width to use to transmit the non-HT PPDU
      */
-    void SendNonHtDuplicatePpdu(uint16_t channelWidth);
+    void SendNonHtDuplicatePpdu(MHz_u channelWidth);
 
     /**
      * Generate interference function
@@ -284,7 +273,7 @@
     void StopInterference(Ptr<WaveformGenerator> interferer);
 
     WifiStandard m_apStandard; ///< the standard to use for the AP
-    uint16_t m_apFrequency;    ///< the center frequency of the AP (in MHz)
+    MHz_u m_apFrequency;       ///< the center frequency of the AP
     uint8_t m_apP20Index;      ///< the index of the primary 20 MHz channel of the AP
     StasParams m_stasParams;   ///< the parameters of the STAs
     std::vector<bool>
@@ -303,7 +292,7 @@
 
 TestNonHtDuplicatePhyReception::TestNonHtDuplicatePhyReception(
     WifiStandard apStandard,
-    uint16_t apFrequency,
+    MHz_u apFrequency,
     uint8_t apP20Index,
     StasParams stasParams,
     std::vector<bool> per20MhzInterference)
@@ -333,13 +322,13 @@
 }
 
 void
-TestNonHtDuplicatePhyReception::SendNonHtDuplicatePpdu(uint16_t channelWidth)
+TestNonHtDuplicatePhyReception::SendNonHtDuplicatePpdu(MHz_u channelWidth)
 {
     NS_LOG_FUNCTION(this << channelWidth);
     WifiTxVector txVector = WifiTxVector(OfdmPhy::GetOfdmRate24Mbps(),
                                          0,
                                          WIFI_PREAMBLE_LONG,
-                                         800,
+                                         NanoSeconds(800),
                                          1,
                                          1,
                                          0,
@@ -474,13 +463,13 @@
 
     if (!m_per20MhzInterference.empty())
     {
-        [[maybe_unused]] auto [channelNum, centerFreq, apChannelWidth, type, phyBand] =
-            (*WifiPhyOperatingChannel::FindFirst(0,
-                                                 m_apFrequency,
-                                                 0,
-                                                 m_apStandard,
-                                                 WIFI_PHY_BAND_5GHZ));
-        NS_ASSERT(m_per20MhzInterference.size() == (apChannelWidth / 20));
+        const auto& channelInfo = (*WifiPhyOperatingChannel::FindFirst(0,
+                                                                       m_apFrequency,
+                                                                       0,
+                                                                       m_apStandard,
+                                                                       WIFI_PHY_BAND_5GHZ));
+        [[maybe_unused]] const std::size_t num20MhzSubchannels = channelInfo.width / 20;
+        NS_ASSERT(m_per20MhzInterference.size() == num20MhzSubchannels);
         for (std::size_t i = 0; i < m_per20MhzInterference.size(); ++i)
         {
             auto interfererNode = CreateObject<Node>();
@@ -524,32 +513,34 @@
         phySta->AssignStreams(streamNumber);
     }
 
-    [[maybe_unused]] auto [apChannelNum, centerFreq, apChannelWidth, type, phyBand] =
-        (*WifiPhyOperatingChannel::FindFirst(0,
-                                             m_apFrequency,
-                                             0,
-                                             m_apStandard,
-                                             WIFI_PHY_BAND_5GHZ));
-    m_phyAp->SetOperatingChannel(
-        WifiPhy::ChannelTuple{apChannelNum, apChannelWidth, WIFI_PHY_BAND_5GHZ, m_apP20Index});
+    const auto& apchannelInfo = (*WifiPhyOperatingChannel::FindFirst(0,
+                                                                     m_apFrequency,
+                                                                     0,
+                                                                     m_apStandard,
+                                                                     WIFI_PHY_BAND_5GHZ));
+    m_phyAp->SetOperatingChannel(WifiPhy::ChannelTuple{apchannelInfo.number,
+                                                       apchannelInfo.width,
+                                                       WIFI_PHY_BAND_5GHZ,
+                                                       m_apP20Index});
 
     auto index = 0;
     for (const auto& [staStandard, staFrequency, staP20Index] : m_stasParams)
     {
-        [[maybe_unused]] auto [staChannelNum, centerFreq, staChannelWidth, type, phyBand] =
-            (*WifiPhyOperatingChannel::FindFirst(0,
-                                                 staFrequency,
-                                                 0,
-                                                 staStandard,
-                                                 WIFI_PHY_BAND_5GHZ));
-        m_phyStas.at(index++)->SetOperatingChannel(
-            WifiPhy::ChannelTuple{staChannelNum, staChannelWidth, WIFI_PHY_BAND_5GHZ, staP20Index});
+        const auto& stachannelInfo = (*WifiPhyOperatingChannel::FindFirst(0,
+                                                                          staFrequency,
+                                                                          0,
+                                                                          staStandard,
+                                                                          WIFI_PHY_BAND_5GHZ));
+        m_phyStas.at(index++)->SetOperatingChannel(WifiPhy::ChannelTuple{stachannelInfo.number,
+                                                                         stachannelInfo.width,
+                                                                         WIFI_PHY_BAND_5GHZ,
+                                                                         staP20Index});
     }
 
     index = 0;
     const auto minApCenterFrequency =
         m_phyAp->GetFrequency() - (m_phyAp->GetChannelWidth() / 2) + (20 / 2);
-    for (auto channelWidth = 20; channelWidth <= apChannelWidth; channelWidth *= 2, ++index)
+    for (auto channelWidth = 20; channelWidth <= apchannelInfo.width; channelWidth *= 2, ++index)
     {
         if (!m_phyInterferers.empty())
         {
@@ -567,8 +558,8 @@
                 bands.push_back(bandInfo);
                 auto spectrumInterference = Create<SpectrumModel>(bands);
                 auto interferencePsd = Create<SpectrumValue>(spectrumInterference);
-                auto interferencePower = 0.005; // in watts (designed to make PHY headers reception
-                                                // successful but payload reception fail)
+                Watt_u interferencePower = 0.005; // designed to make PHY headers reception
+                                                  // successful but payload reception fail
                 *interferencePsd = interferencePower / 10e6;
                 Simulator::Schedule(Seconds(index),
                                     &TestNonHtDuplicatePhyReception::GenerateInterference,
@@ -635,7 +626,7 @@
     /// Information about CTS responses to expect in the test
     struct CtsTxInfos
     {
-        uint16_t bw{20};     ///< the width in MHz of the CTS response
+        MHz_u bw{20};        ///< the width of the CTS response
         bool discard{false}; ///< flag whether the CTS response shall be discarded
     };
 
@@ -702,7 +693,7 @@
     std::size_t m_countStaRxCtsFailure; ///< count the number of unsuccessfully received CTS frames
                                         ///< by the non-participating STA
 
-    double m_stasTxPowerDbm; ///< TX power in dBm configured for the STAs
+    dBm_u m_stasTxPower; ///< TX power configured for the STAs
 };
 
 TestMultipleCtsResponsesFromMuRts::TestMultipleCtsResponsesFromMuRts(
@@ -713,7 +704,7 @@
       m_countApRxCtsFailure{0},
       m_countStaRxCtsSuccess{0},
       m_countStaRxCtsFailure{0},
-      m_stasTxPowerDbm(10.0)
+      m_stasTxPower(10.0)
 {
 }
 
@@ -757,7 +748,7 @@
         WifiTxVector(OfdmPhy::GetOfdmRate54Mbps(), // use less robust modulation for test purpose
                      0,
                      WIFI_PREAMBLE_LONG,
-                     800,
+                     NanoSeconds(800),
                      1,
                      1,
                      0,
@@ -797,7 +788,7 @@
     if (isAp)
     {
         NS_TEST_EXPECT_MSG_EQ_TOL(rxSignalInfo.rssi,
-                                  WToDbm(DbmToW(m_stasTxPowerDbm) * successfulCtsInfos.size()),
+                                  WToDbm(DbmToW(m_stasTxPower) * successfulCtsInfos.size()),
                                   0.1,
                                   "RX power is not correct!");
     }
@@ -899,8 +890,9 @@
                          m_ctsTxInfosPerSta.cend(),
                          [](const auto& lhs, const auto& rhs) { return lhs.bw < rhs.bw; })
             ->bw;
-    auto apChannelNum = std::get<0>(
-        *WifiPhyOperatingChannel::FindFirst(0, 0, apBw, WIFI_STANDARD_80211ac, WIFI_PHY_BAND_5GHZ));
+    auto apChannelNum =
+        WifiPhyOperatingChannel::FindFirst(0, 0, apBw, WIFI_STANDARD_80211ac, WIFI_PHY_BAND_5GHZ)
+            ->number;
 
     m_phyAp->SetOperatingChannel(WifiPhy::ChannelTuple{apChannelNum, apBw, WIFI_PHY_BAND_5GHZ, 0});
 
@@ -926,15 +918,15 @@
         phySta->AddChannel(spectrumChannel);
         phySta->ConfigureStandard(WIFI_STANDARD_80211ax);
         phySta->AssignStreams(streamNumber);
-        phySta->SetTxPowerStart(m_stasTxPowerDbm);
-        phySta->SetTxPowerEnd(m_stasTxPowerDbm);
+        phySta->SetTxPowerStart(m_stasTxPower);
+        phySta->SetTxPowerEnd(m_stasTxPower);
 
-        auto channelNum =
-            std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                            0,
-                                                            m_ctsTxInfosPerSta.at(i).bw,
-                                                            WIFI_STANDARD_80211ac,
-                                                            WIFI_PHY_BAND_5GHZ));
+        auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                             0,
+                                                             m_ctsTxInfosPerSta.at(i).bw,
+                                                             WIFI_STANDARD_80211ac,
+                                                             WIFI_PHY_BAND_5GHZ)
+                              ->number;
 
         phySta->SetOperatingChannel(
             WifiPhy::ChannelTuple{channelNum, m_ctsTxInfosPerSta.at(i).bw, WIFI_PHY_BAND_5GHZ, 0});
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-operating-channel-test.cc ns-3.43/src/wifi/test/wifi-operating-channel-test.cc
--- ns-3.42/src/wifi/test/wifi-operating-channel-test.cc	1969-12-31 16:00:00.000000000 -0800
+++ ns-3.43/src/wifi/test/wifi-operating-channel-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -0,0 +1,943 @@
+/*
+ * Copyright (c) 2023
+ *
+ * SPDX-License-Identifier: GPL-2.0-only
+ *
+ * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
+ */
+
+#include "ns3/he-phy.h"
+#include "ns3/he-ppdu.h"
+#include "ns3/interference-helper.h"
+#include "ns3/log.h"
+#include "ns3/multi-model-spectrum-channel.h"
+#include "ns3/nist-error-rate-model.h"
+#include "ns3/node.h"
+#include "ns3/spectrum-wifi-phy.h"
+#include "ns3/string.h"
+#include "ns3/test.h"
+#include "ns3/wifi-net-device.h"
+#include "ns3/wifi-phy-operating-channel.h"
+#include "ns3/wifi-psdu.h"
+#include "ns3/wifi-utils.h"
+
+using namespace ns3;
+
+NS_LOG_COMPONENT_DEFINE("WifiOperatingChannelTest");
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test the WifiPhyOperatingChannel::Set() method.
+ */
+class SetWifiOperatingChannelTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     */
+    SetWifiOperatingChannelTest();
+    ~SetWifiOperatingChannelTest() override = default;
+
+  private:
+    void DoRun() override;
+
+    /**
+     * Run one function.
+     * \param runInfo the string that indicates info about the test case to run
+     * \param segments the info about each frequency segment to set for the operating channel
+     * \param standard the 802.11 standard to consider for the test
+     * \param band the PHY band to consider for the test
+     * \param expectExceptionThrown flag to indicate whether an exception is expected to be thrown
+     * \param expectedWidth the expected width type of the operating channel
+     * \param expectedSegments the info about the expected frequency segments of the operating
+     * channel
+     */
+    void RunOne(const std::string& runInfo,
+                const std::vector<FrequencyChannelInfo>& segments,
+                WifiStandard standard,
+                WifiPhyBand band,
+                bool expectExceptionThrown,
+                WifiChannelWidthType expectedWidth = WifiChannelWidthType::UNKNOWN,
+                const std::vector<FrequencyChannelInfo>& expectedSegments = {});
+
+    WifiPhyOperatingChannel m_channel; //!< operating channel
+};
+
+SetWifiOperatingChannelTest::SetWifiOperatingChannelTest()
+    : TestCase("Check configuration of the operating channel")
+{
+}
+
+void
+SetWifiOperatingChannelTest::RunOne(const std::string& runInfo,
+                                    const std::vector<FrequencyChannelInfo>& segments,
+                                    WifiStandard standard,
+                                    WifiPhyBand band,
+                                    bool expectExceptionThrown,
+                                    WifiChannelWidthType expectedWidth,
+                                    const std::vector<FrequencyChannelInfo>& expectedSegments)
+{
+    NS_LOG_FUNCTION(this << runInfo);
+
+    bool exceptionThrown = false;
+    try
+    {
+        m_channel.Set(segments, standard);
+    }
+    catch (const std::runtime_error&)
+    {
+        exceptionThrown = true;
+    }
+    NS_TEST_ASSERT_MSG_EQ(exceptionThrown,
+                          expectExceptionThrown,
+                          "Exception thrown mismatch for run: " << runInfo);
+    if (!exceptionThrown)
+    {
+        NS_TEST_ASSERT_MSG_EQ(
+            m_channel.GetWidthType(),
+            expectedWidth,
+            "Operating channel has an incorrect channel width type for run: " << runInfo);
+        NS_TEST_ASSERT_MSG_EQ(m_channel.GetNSegments(),
+                              expectedSegments.size(),
+                              "Incorrect number of frequency segments for run: " << runInfo);
+        for (std::size_t i = 0; i < m_channel.GetNSegments(); ++i)
+        {
+            const auto& frequencyChannelInfo = expectedSegments.at(i);
+            NS_TEST_ASSERT_MSG_EQ(m_channel.GetNumber(i),
+                                  frequencyChannelInfo.number,
+                                  "Operating channel has an incorrect channel number at segment "
+                                      << i << " for run: " << runInfo);
+            NS_TEST_ASSERT_MSG_EQ(m_channel.GetFrequency(i),
+                                  frequencyChannelInfo.frequency,
+                                  "Operating channel has an incorrect center frequency at segment "
+                                      << i << " for run: " << runInfo);
+            NS_TEST_ASSERT_MSG_EQ(m_channel.GetWidth(i),
+                                  frequencyChannelInfo.width,
+                                  "Operating channel has an incorrect channel width at segment "
+                                      << i << " for run: " << runInfo);
+            NS_TEST_ASSERT_MSG_EQ(m_channel.GetPhyBand(),
+                                  frequencyChannelInfo.band,
+                                  "Operating channel has an incorrect band for run: " << runInfo);
+        }
+    }
+}
+
+void
+SetWifiOperatingChannelTest::DoRun()
+{
+    RunOne("dummy channel with all inputs unset",
+           {{}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           true);
+
+    RunOne("default 20 MHz OFDM channel operating on channel 36",
+           {{36, 0, 20, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           false,
+           WifiChannelWidthType::CW_20MHZ,
+           {{36, 5180, 20, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM}});
+
+    RunOne("default 40 MHz OFDM channel operating on channel 38",
+           {{38, 0, 40, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           false,
+           WifiChannelWidthType::CW_40MHZ,
+           {{38, 5190, 40, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM}});
+
+    RunOne("default 80 MHz OFDM channel operating on channel 42",
+           {{42, 0, 80, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           false,
+           WifiChannelWidthType::CW_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM}});
+
+    RunOne("default 160 MHz (contiguous) OFDM channel operating on channel 50",
+           {{50, 0, 160, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           false,
+           WifiChannelWidthType::CW_160MHZ,
+           {{50, 5250, 160, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM}});
+
+    RunOne("valid 80+80 MHz (non-contiguous) OFDM channel operating on channels 42 and 106",
+           {{42, 0, 80, WIFI_PHY_BAND_5GHZ}, {106, 0, 80, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           false,
+           WifiChannelWidthType::CW_80_PLUS_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM},
+            {106, 5530, 80, WIFI_PHY_BAND_5GHZ, FrequencyChannelType::OFDM}});
+
+    RunOne("invalid 80+80 MHz (non-contiguous) OFDM channel higher channel not being 80 MHz",
+           {{42, 0, 80, WIFI_PHY_BAND_5GHZ}, {102, 0, 80, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           true);
+
+    RunOne("invalid 80+80 MHz (non-contiguous) OFDM channel lower channel not being 80 MHz",
+           {{36, 0, 20, WIFI_PHY_BAND_5GHZ}, {106, 0, 80, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           true);
+
+    RunOne("invalid 80+80 MHz (non-contiguous) OFDM channel with both segments configured on the "
+           "same channel",
+           {{42, 0, 80, WIFI_PHY_BAND_5GHZ}, {42, 0, 80, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           true);
+
+    RunOne("invalid 80+80 MHz (non-contiguous) OFDM channel with segments configured to be "
+           "contiguous (lower before higher)",
+           {{42, 0, 80, WIFI_PHY_BAND_5GHZ}, {58, 0, 80, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           true);
+
+    RunOne("invalid 80+80 MHz (non-contiguous) OFDM channel with segments configured to be "
+           "contiguous (higher before lower)",
+           {{58, 0, 80, WIFI_PHY_BAND_5GHZ}, {42, 0, 80, WIFI_PHY_BAND_5GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           true);
+
+    RunOne("invalid 80+80 MHz (non-contiguous) OFDM channel with each segments configured on a "
+           "different band",
+           {{42, 0, 80, WIFI_PHY_BAND_5GHZ}, {215, 0, 80, WIFI_PHY_BAND_6GHZ}},
+           WIFI_STANDARD_UNSPECIFIED,
+           WIFI_PHY_BAND_UNSPECIFIED,
+           true);
+}
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test the conversion from PHY ChannelSettings attribute to WifiPhyOperatingChannel.
+ */
+class PhyChannelSettingsToOperatingChannelTest : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     */
+    PhyChannelSettingsToOperatingChannelTest();
+    ~PhyChannelSettingsToOperatingChannelTest() override = default;
+
+  private:
+    void DoSetup() override;
+    void DoTeardown() override;
+    void DoRun() override;
+
+    /**
+     * Run one function.
+     * \param channelSettings the string to set the ChannelSettings attribute
+     * \param expectedWidthType the expected width type of the operating channel
+     * \param expectedSegments the info about each expected segment of the operating channel
+     * \param expectedP20Index the expected index of the P20
+     */
+    void RunOne(const std::string& channelSettings,
+                WifiChannelWidthType expectedWidthType,
+                const std::vector<FrequencyChannelInfo>& expectedSegments,
+                uint8_t expectedP20Index);
+
+    Ptr<SpectrumWifiPhy> m_phy; //!< the PHY
+};
+
+PhyChannelSettingsToOperatingChannelTest::PhyChannelSettingsToOperatingChannelTest()
+    : TestCase("Check conversion from attribute to the operating channel")
+{
+}
+
+void
+PhyChannelSettingsToOperatingChannelTest::DoSetup()
+{
+    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+    auto node = CreateObject<Node>();
+    auto dev = CreateObject<WifiNetDevice>();
+    m_phy = CreateObject<SpectrumWifiPhy>();
+    auto interferenceHelper = CreateObject<InterferenceHelper>();
+    m_phy->SetInterferenceHelper(interferenceHelper);
+    auto error = CreateObject<NistErrorRateModel>();
+    m_phy->SetErrorRateModel(error);
+    m_phy->SetDevice(dev);
+    m_phy->AddChannel(spectrumChannel);
+    m_phy->ConfigureStandard(WIFI_STANDARD_80211ax);
+    dev->SetPhy(m_phy);
+    node->AddDevice(dev);
+}
+
+void
+PhyChannelSettingsToOperatingChannelTest::DoTeardown()
+{
+    m_phy->Dispose();
+    m_phy = nullptr;
+}
+
+void
+PhyChannelSettingsToOperatingChannelTest::RunOne(
+    const std::string& channelSettings,
+    WifiChannelWidthType expectedWidthType,
+    const std::vector<FrequencyChannelInfo>& expectedSegments,
+    uint8_t expectedP20Index)
+{
+    NS_LOG_FUNCTION(this << channelSettings);
+
+    bool exceptionThrown = false;
+    try
+    {
+        m_phy->SetAttribute("ChannelSettings", StringValue(channelSettings));
+    }
+    catch (const std::runtime_error&)
+    {
+        exceptionThrown = true;
+    }
+    NS_TEST_ASSERT_MSG_EQ(exceptionThrown,
+                          expectedSegments.empty(),
+                          "Exception thrown mismatch for channel settings " << channelSettings);
+
+    if (exceptionThrown)
+    {
+        return;
+    }
+
+    NS_TEST_ASSERT_MSG_EQ(
+        m_phy->GetOperatingChannel().GetWidthType(),
+        expectedWidthType,
+        "Operating channel has an incorrect channel width type for channel settings "
+            << channelSettings);
+
+    const auto numSegments = m_phy->GetOperatingChannel().GetNSegments();
+    NS_TEST_ASSERT_MSG_EQ(
+        numSegments,
+        expectedSegments.size(),
+        "Operating channel has an incorrect number of segments for channel settings "
+            << channelSettings);
+
+    for (std::size_t i = 0; i < numSegments; ++i)
+    {
+        NS_TEST_ASSERT_MSG_EQ(m_phy->GetOperatingChannel().GetNumber(i),
+                              expectedSegments.at(i).number,
+                              "Operating channel has an incorrect channel number at segment "
+                                  << i << " for channel settings " << channelSettings);
+        NS_TEST_ASSERT_MSG_EQ(m_phy->GetOperatingChannel().GetFrequency(i),
+                              expectedSegments.at(i).frequency,
+                              "Operating channel has an incorrect center frequency at segment "
+                                  << i << " for channel settings " << channelSettings);
+        NS_TEST_ASSERT_MSG_EQ(m_phy->GetOperatingChannel().GetWidth(i),
+                              expectedSegments.at(i).width,
+                              "Operating channel has an incorrect channel width at segment "
+                                  << i << " for channel settings " << channelSettings);
+        NS_TEST_ASSERT_MSG_EQ(m_phy->GetOperatingChannel().GetPhyBand(),
+                              expectedSegments.at(i).band,
+                              "Operating channel has an incorrect band for channel settings "
+                                  << channelSettings);
+    }
+
+    NS_TEST_ASSERT_MSG_EQ(m_phy->GetOperatingChannel().GetPrimaryChannelIndex(20),
+                          expectedP20Index,
+                          "Operating channel has an incorrect P20 index for channel settings "
+                              << channelSettings);
+}
+
+void
+PhyChannelSettingsToOperatingChannelTest::DoRun()
+{
+    // Test invalid combination
+    RunOne("{36, 40, BAND_UNSPECIFIED, 0}", WifiChannelWidthType::UNKNOWN, {}, 0);
+
+    // Test default with a single frequency segment
+    RunOne("{0, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test default with two frequency segments unspecified
+    RunOne("{0, 0, BAND_UNSPECIFIED, 0};{0, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_80_PLUS_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ}, {106, 5530, 80, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test default with two frequency segments and first is specified (but equals default)
+    RunOne("{42, 0, BAND_UNSPECIFIED, 0};{0, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_80_PLUS_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ}, {106, 5530, 80, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test default with second segment specified to be at the first available 80 MHz segment
+    RunOne("{0, 0, BAND_UNSPECIFIED, 0};{42, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::UNKNOWN,
+           {},
+           0);
+
+    // Test default with two frequency segments and first is specified (and differs from default)
+    RunOne("{106, 0, BAND_UNSPECIFIED, 0};{0, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_80_PLUS_80MHZ,
+           {{106, 5530, 80, WIFI_PHY_BAND_5GHZ}, {138, 5690, 80, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test unique channel 36 (20 MHz)
+    RunOne("{36, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_20MHZ,
+           {{36, 5180, 20, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test unique channel 38 (40 MHz)
+    RunOne("{38, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_40MHZ,
+           {{38, 5190, 40, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test unique channel 42 (80 MHz)
+    RunOne("{42, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test unique channel 50 (160 MHz)
+    RunOne("{50, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_160MHZ,
+           {{50, 5250, 160, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test 80+80 MHz
+    RunOne("{42, 0, BAND_UNSPECIFIED, 0};{106, 0, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_80_PLUS_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ}, {106, 5530, 80, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test P20 for 80+80 MHz: second value shall be ignored
+    RunOne("{42, 0, BAND_UNSPECIFIED, 1};{106, 0, BAND_UNSPECIFIED, 2}",
+           WifiChannelWidthType::CW_80_PLUS_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ}, {106, 5530, 80, WIFI_PHY_BAND_5GHZ}},
+           1);
+
+    // Test default 20 MHz channel
+    RunOne("{0, 20, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_20MHZ,
+           {{36, 5180, 20, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test default 40 MHz channel
+    RunOne("{0, 40, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_40MHZ,
+           {{38, 5190, 40, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test default 80 MHz channel
+    RunOne("{0, 80, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test default 160 MHz channel
+    RunOne("{0, 160, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_160MHZ,
+           {{50, 5250, 160, WIFI_PHY_BAND_5GHZ}},
+           0);
+
+    // Test default 80+80 MHz channel
+    RunOne("{0, 80, BAND_UNSPECIFIED, 0};{0, 80, BAND_UNSPECIFIED, 0}",
+           WifiChannelWidthType::CW_80_PLUS_80MHZ,
+           {{42, 5210, 80, WIFI_PHY_BAND_5GHZ}, {106, 5530, 80, WIFI_PHY_BAND_5GHZ}},
+           0);
+}
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief Test the operating channel functions for 80+80MHz.
+ */
+class WifiPhyChannel80Plus80Test : public TestCase
+{
+  public:
+    /**
+     * Constructor
+     */
+    WifiPhyChannel80Plus80Test();
+    ~WifiPhyChannel80Plus80Test() override = default;
+
+  private:
+    void DoRun() override;
+
+    /**
+     * Create a dummy PSDU whose payload is 1000 bytes
+     * \return a dummy PSDU whose payload is 1000 bytes
+     */
+    Ptr<WifiPsdu> CreateDummyPsdu();
+
+    /**
+     * Create a HE PPDU
+     * \param bandwidth the bandwidth used for the transmission the PPDU
+     * \param channel the operating channel of the PHY used for the transmission
+     * \return a HE PPDU
+     */
+    Ptr<HePpdu> CreateDummyHePpdu(MHz_u bandwidth, const WifiPhyOperatingChannel& channel);
+
+    WifiPhyOperatingChannel m_channel; //!< operating channel
+};
+
+WifiPhyChannel80Plus80Test::WifiPhyChannel80Plus80Test()
+    : TestCase("Check operating channel functions for 80+80MHz")
+{
+}
+
+Ptr<WifiPsdu>
+WifiPhyChannel80Plus80Test::CreateDummyPsdu()
+{
+    Ptr<Packet> pkt = Create<Packet>(1000);
+    WifiMacHeader hdr;
+    hdr.SetType(WIFI_MAC_QOSDATA);
+    hdr.SetQosTid(0);
+    return Create<WifiPsdu>(pkt, hdr);
+}
+
+Ptr<HePpdu>
+WifiPhyChannel80Plus80Test::CreateDummyHePpdu(MHz_u bandwidth,
+                                              const WifiPhyOperatingChannel& channel)
+{
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         bandwidth,
+                                         false);
+    Ptr<WifiPsdu> psdu = CreateDummyPsdu();
+    return Create<HePpdu>(psdu, txVector, channel, MicroSeconds(100), 0);
+}
+
+void
+WifiPhyChannel80Plus80Test::DoRun()
+{
+    // P20 is in first segment and segments are provided in increasing frequency order
+    {
+        m_channel.Set({{42, 0, 80, WIFI_PHY_BAND_5GHZ}, {106, 0, 80, WIFI_PHY_BAND_5GHZ}},
+                      WIFI_STANDARD_UNSPECIFIED);
+        m_channel.SetPrimary20Index(3);
+
+        const auto indexPrimary160Mhz = m_channel.GetPrimaryChannelIndex(160);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary160Mhz, 0, "Primary 160 MHz channel shall have index 0");
+        const auto indexPrimary80Mhz = m_channel.GetPrimaryChannelIndex(80);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary80Mhz, 0, "Primary 80 MHz channel shall have index 0");
+        const auto indexPrimary40Mhz = m_channel.GetPrimaryChannelIndex(40);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary40Mhz, 1, "Primary 40 MHz channel shall have index 1");
+        const auto indexPrimary20Mhz = m_channel.GetPrimaryChannelIndex(20);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary20Mhz, 3, "Primary 20 MHz channel shall have index 3");
+
+        const auto indexSecondary80Mhz = m_channel.GetSecondaryChannelIndex(80);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary80Mhz,
+                              1,
+                              "Secondary 80 MHz channel shall have index 1");
+        const auto indexSecondary40Mhz = m_channel.GetSecondaryChannelIndex(40);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary40Mhz,
+                              0,
+                              "Secondary 40 MHz channel shall have index 0");
+        const auto indexSecondary20Mhz = m_channel.GetSecondaryChannelIndex(20);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary20Mhz,
+                              2,
+                              "Secondary 20 MHz channel shall have index 2");
+
+        const auto primary80MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(80);
+        NS_TEST_ASSERT_MSG_EQ(primary80MhzCenterFrequency,
+                              5210,
+                              "Primary 80 MHz channel center frequency shall be 5210 MHz");
+        const auto primary40MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(40);
+        NS_TEST_ASSERT_MSG_EQ(primary40MhzCenterFrequency,
+                              5230,
+                              "Primary 40 MHz channel center frequency shall be 5230 MHz");
+        const auto primary20MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(20);
+        NS_TEST_ASSERT_MSG_EQ(primary20MhzCenterFrequency,
+                              5240,
+                              "Primary 20 MHz channel center frequency shall be 5240 MHz");
+
+        const auto secondary80MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(80);
+        NS_TEST_ASSERT_MSG_EQ(secondary80MhzCenterFrequency,
+                              5530,
+                              "Secondary 80 MHz channel center frequency shall be 5530 MHz");
+        const auto secondary40MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(40);
+        NS_TEST_ASSERT_MSG_EQ(secondary40MhzCenterFrequency,
+                              5190,
+                              "Secondary 40 MHz channel center frequency shall be 5190 MHz");
+        const auto secondary20MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(20);
+        NS_TEST_ASSERT_MSG_EQ(secondary20MhzCenterFrequency,
+                              5220,
+                              "Secondary 20 MHz channel center frequency shall be 5220 MHz");
+
+        const auto primary80MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(80, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary80MhzChannelNumber,
+                              42,
+                              "Primary 80 MHz channel number shall be 42");
+        const auto primary40MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(40, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary40MhzChannelNumber,
+                              46,
+                              "Primary 40 MHz channel number shall be 46");
+        const auto primary20MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(20, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary20MhzChannelNumber,
+                              48,
+                              "Primary 20 MHz channel number shall be 48");
+
+        auto ppdu160MHz = CreateDummyHePpdu(160, m_channel);
+        auto txCenterFreqs160MHz = ppdu160MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.size(), 2, "2 segments are covered by 160 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.front(),
+                              5210,
+                              "Center frequency of first segment shall be 5210 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.back(),
+                              5530,
+                              "Center frequency of second segment shall be 5530 MHz");
+        auto ppdu80MHz = CreateDummyHePpdu(80, m_channel);
+        auto txCenterFreqs80MHz = ppdu80MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs80MHz.size(), 1, "1 segment is covered by 80 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs80MHz.front(),
+                              5210,
+                              "Center frequency for 80 MHz shall be 5210 MHz");
+        auto ppdu40MHz = CreateDummyHePpdu(40, m_channel);
+        auto txCenterFreqs40MHz = ppdu40MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs40MHz.size(), 1, "1 segment is covered by 40 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs40MHz.front(),
+                              5230,
+                              "Center frequency for 40 MHz shall be 5230 MHz");
+        auto ppdu20MHz = CreateDummyHePpdu(20, m_channel);
+        auto txCenterFreqs20MHz = ppdu20MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs20MHz.size(), 1, "1 segment is covered by 20 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs20MHz.front(),
+                              5240,
+                              "Center frequency for 20 MHz shall be 5240 MHz");
+    }
+
+    // P20 is in second segment and segments are provided in increasing frequency order
+    {
+        m_channel.Set({{42, 0, 80, WIFI_PHY_BAND_5GHZ}, {106, 0, 80, WIFI_PHY_BAND_5GHZ}},
+                      WIFI_STANDARD_UNSPECIFIED);
+        m_channel.SetPrimary20Index(4);
+
+        const auto indexPrimary160Mhz = m_channel.GetPrimaryChannelIndex(160);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary160Mhz, 0, "Primary 160 MHz channel shall have index 0");
+        const auto indexPrimary80Mhz = m_channel.GetPrimaryChannelIndex(80);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary80Mhz, 1, "Primary 80 MHz channel shall have index 1");
+        const auto indexPrimary40Mhz = m_channel.GetPrimaryChannelIndex(40);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary40Mhz, 2, "Primary 40 MHz channel shall have index 2");
+        const auto indexPrimary20Mhz = m_channel.GetPrimaryChannelIndex(20);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary20Mhz, 4, "Primary 20 MHz channel shall have index 4");
+
+        const auto indexSecondary80Mhz = m_channel.GetSecondaryChannelIndex(80);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary80Mhz,
+                              0,
+                              "Secondary 80 MHz channel shall have index 0");
+        const auto indexSecondary40Mhz = m_channel.GetSecondaryChannelIndex(40);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary40Mhz,
+                              3,
+                              "Secondary 40 MHz channel shall have index 3");
+        const auto indexSecondary20Mhz = m_channel.GetSecondaryChannelIndex(20);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary20Mhz,
+                              5,
+                              "Secondary 20 MHz channel shall have index 5");
+
+        const auto primary80MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(80);
+        NS_TEST_ASSERT_MSG_EQ(primary80MhzCenterFrequency,
+                              5530,
+                              "Primary 80 MHz channel center frequency shall be 5530 MHz");
+        const auto primary40MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(40);
+        NS_TEST_ASSERT_MSG_EQ(primary40MhzCenterFrequency,
+                              5510,
+                              "Primary 40 MHz channel center frequency shall be 5510 MHz");
+        const auto primary20MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(20);
+        NS_TEST_ASSERT_MSG_EQ(primary20MhzCenterFrequency,
+                              5500,
+                              "Primary 20 MHz channel center frequency shall be 5500 MHz");
+
+        const auto secondary80MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(80);
+        NS_TEST_ASSERT_MSG_EQ(secondary80MhzCenterFrequency,
+                              5210,
+                              "Secondary 80 MHz channel center frequency shall be 5210 MHz");
+        const auto secondary40MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(40);
+        NS_TEST_ASSERT_MSG_EQ(secondary40MhzCenterFrequency,
+                              5550,
+                              "Secondary 40 MHz channel center frequency shall be 5550 MHz");
+        const auto secondary20MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(20);
+        NS_TEST_ASSERT_MSG_EQ(secondary20MhzCenterFrequency,
+                              5520,
+                              "Secondary 20 MHz channel center frequency shall be 5520 MHz");
+
+        const auto primary80MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(80, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary80MhzChannelNumber,
+                              106,
+                              "Primary 80 MHz channel number shall be 106");
+        const auto primary40MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(40, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary40MhzChannelNumber,
+                              102,
+                              "Primary 40 MHz channel number shall be 102");
+        const auto primary20MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(20, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary20MhzChannelNumber,
+                              100,
+                              "Primary 20 MHz channel number shall be 100");
+
+        auto ppdu160MHz = CreateDummyHePpdu(160, m_channel);
+        auto txCenterFreqs160MHz = ppdu160MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.size(), 2, "2 segments are covered by 160 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.front(),
+                              5530,
+                              "Center frequency of first segment shall be 5530 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.back(),
+                              5210,
+                              "Center frequency of second segment shall be 5210 MHz");
+        auto ppdu80MHz = CreateDummyHePpdu(80, m_channel);
+        auto txCenterFreqs80MHz = ppdu80MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs80MHz.size(), 1, "1 segment is covered by 80 MHz");
+        NS_ASSERT(txCenterFreqs80MHz.front() == 5530);
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs80MHz.front(),
+                              5530,
+                              "Center frequency for 80 MHz shall be 5530 MHz");
+        auto ppdu40MHz = CreateDummyHePpdu(40, m_channel);
+        auto txCenterFreqs40MHz = ppdu40MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs40MHz.size(), 1, "1 segment is covered by 40 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs40MHz.front(),
+                              5510,
+                              "Center frequency for 40 MHz shall be 5510 MHz");
+        auto ppdu20MHz = CreateDummyHePpdu(20, m_channel);
+        auto txCenterFreqs20MHz = ppdu20MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs20MHz.size(), 1, "1 segment is covered by 20 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs20MHz.front(),
+                              5500,
+                              "Center frequency for 20 MHz shall be 5500 MHz");
+    }
+
+    // P20 is in first segment and segments are provided in decreasing frequency order
+    {
+        m_channel.Set({{106, 0, 80, WIFI_PHY_BAND_5GHZ}, {42, 0, 80, WIFI_PHY_BAND_5GHZ}},
+                      WIFI_STANDARD_UNSPECIFIED);
+        m_channel.SetPrimary20Index(3);
+
+        const auto indexPrimary160Mhz = m_channel.GetPrimaryChannelIndex(160);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary160Mhz, 0, "Primary 160 MHz channel shall have index 0");
+        const auto indexPrimary80Mhz = m_channel.GetPrimaryChannelIndex(80);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary80Mhz, 0, "Primary 80 MHz channel shall have index 0");
+        const auto indexPrimary40Mhz = m_channel.GetPrimaryChannelIndex(40);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary40Mhz, 1, "Primary 40 MHz channel shall have index 1");
+        const auto indexPrimary20Mhz = m_channel.GetPrimaryChannelIndex(20);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary20Mhz, 3, "Primary 20 MHz channel shall have index 3");
+
+        const auto indexSecondary80Mhz = m_channel.GetSecondaryChannelIndex(80);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary80Mhz,
+                              1,
+                              "Secondary 80 MHz channel shall have index 1");
+        const auto indexSecondary40Mhz = m_channel.GetSecondaryChannelIndex(40);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary40Mhz,
+                              0,
+                              "Secondary 40 MHz channel shall have index 0");
+        const auto indexSecondary20Mhz = m_channel.GetSecondaryChannelIndex(20);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary20Mhz,
+                              2,
+                              "Secondary 20 MHz channel shall have index 2");
+
+        const auto primary80MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(80);
+        NS_TEST_ASSERT_MSG_EQ(primary80MhzCenterFrequency,
+                              5210,
+                              "Primary 80 MHz channel center frequency shall be 5210 MHz");
+        const auto primary40MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(40);
+        NS_TEST_ASSERT_MSG_EQ(primary40MhzCenterFrequency,
+                              5230,
+                              "Primary 40 MHz channel center frequency shall be 5230 MHz");
+        const auto primary20MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(20);
+        NS_TEST_ASSERT_MSG_EQ(primary20MhzCenterFrequency,
+                              5240,
+                              "Primary 20 MHz channel center frequency shall be 5240 MHz");
+
+        const auto secondary80MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(80);
+        NS_TEST_ASSERT_MSG_EQ(secondary80MhzCenterFrequency,
+                              5530,
+                              "Secondary 80 MHz channel center frequency shall be 5530 MHz");
+        const auto secondary40MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(40);
+        NS_TEST_ASSERT_MSG_EQ(secondary40MhzCenterFrequency,
+                              5190,
+                              "Secondary 40 MHz channel center frequency shall be 5190 MHz");
+        const auto secondary20MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(20);
+        NS_TEST_ASSERT_MSG_EQ(secondary20MhzCenterFrequency,
+                              5220,
+                              "Secondary 20 MHz channel center frequency shall be 5220 MHz");
+
+        const auto primary80MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(80, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary80MhzChannelNumber,
+                              42,
+                              "Primary 80 MHz channel number shall be 42");
+        const auto primary40MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(40, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary40MhzChannelNumber,
+                              46,
+                              "Primary 40 MHz channel number shall be 46");
+        const auto primary20MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(20, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary20MhzChannelNumber,
+                              48,
+                              "Primary 20 MHz channel number shall be 48");
+
+        auto ppdu160MHz = CreateDummyHePpdu(160, m_channel);
+        auto txCenterFreqs160MHz = ppdu160MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.size(), 2, "2 segments are covered by 160 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.front(),
+                              5210,
+                              "Center frequency of first segment shall be 5210 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.back(),
+                              5530,
+                              "Center frequency of second segment shall be 5530 MHz");
+        auto ppdu80MHz = CreateDummyHePpdu(80, m_channel);
+        auto txCenterFreqs80MHz = ppdu80MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs80MHz.size(), 1, "1 segment is covered by 80 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs80MHz.front(),
+                              5210,
+                              "Center frequency for 80 MHz shall be 5210 MHz");
+        auto ppdu40MHz = CreateDummyHePpdu(40, m_channel);
+        auto txCenterFreqs40MHz = ppdu40MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs40MHz.size(), 1, "1 segment is covered by 40 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs40MHz.front(),
+                              5230,
+                              "Center frequency for 40 MHz shall be 5230 MHz");
+        auto ppdu20MHz = CreateDummyHePpdu(20, m_channel);
+        auto txCenterFreqs20MHz = ppdu20MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs20MHz.size(), 1, "1 segment is covered by 20 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs20MHz.front(),
+                              5240,
+                              "Center frequency for 20 MHz shall be 5240 MHz");
+    }
+
+    // P20 is in second segment and segments are provided in decreasing frequency order
+    {
+        m_channel.Set({{106, 0, 80, WIFI_PHY_BAND_5GHZ}, {42, 0, 80, WIFI_PHY_BAND_5GHZ}},
+                      WIFI_STANDARD_UNSPECIFIED);
+        m_channel.SetPrimary20Index(4);
+
+        const auto indexPrimary160Mhz = m_channel.GetPrimaryChannelIndex(160);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary160Mhz, 0, "Primary 160 MHz channel shall have index 0");
+        const auto indexPrimary80Mhz = m_channel.GetPrimaryChannelIndex(80);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary80Mhz, 1, "Primary 80 MHz channel shall have index 1");
+        const auto indexPrimary40Mhz = m_channel.GetPrimaryChannelIndex(40);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary40Mhz, 2, "Primary 40 MHz channel shall have index 2");
+        const auto indexPrimary20Mhz = m_channel.GetPrimaryChannelIndex(20);
+        NS_TEST_ASSERT_MSG_EQ(indexPrimary20Mhz, 4, "Primary 20 MHz channel shall have index 4");
+
+        const auto indexSecondary80Mhz = m_channel.GetSecondaryChannelIndex(80);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary80Mhz,
+                              0,
+                              "Secondary 80 MHz channel shall have index 0");
+        const auto indexSecondary40Mhz = m_channel.GetSecondaryChannelIndex(40);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary40Mhz,
+                              3,
+                              "Secondary 40 MHz channel shall have index 3");
+        const auto indexSecondary20Mhz = m_channel.GetSecondaryChannelIndex(20);
+        NS_TEST_ASSERT_MSG_EQ(indexSecondary20Mhz,
+                              5,
+                              "Secondary 20 MHz channel shall have index 5");
+
+        const auto primary80MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(80);
+        NS_TEST_ASSERT_MSG_EQ(primary80MhzCenterFrequency,
+                              5530,
+                              "Primary 80 MHz channel center frequency shall be 5530 MHz");
+        const auto primary40MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(40);
+        NS_TEST_ASSERT_MSG_EQ(primary40MhzCenterFrequency,
+                              5510,
+                              "Primary 40 MHz channel center frequency shall be 5510 MHz");
+        const auto primary20MhzCenterFrequency = m_channel.GetPrimaryChannelCenterFrequency(20);
+        NS_TEST_ASSERT_MSG_EQ(primary20MhzCenterFrequency,
+                              5500,
+                              "Primary 20 MHz channel center frequency shall be 5500 MHz");
+
+        const auto secondary80MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(80);
+        NS_TEST_ASSERT_MSG_EQ(secondary80MhzCenterFrequency,
+                              5210,
+                              "Secondary 80 MHz channel center frequency shall be 5210 MHz");
+        const auto secondary40MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(40);
+        NS_TEST_ASSERT_MSG_EQ(secondary40MhzCenterFrequency,
+                              5550,
+                              "Secondary 40 MHz channel center frequency shall be 5550 MHz");
+        const auto secondary20MhzCenterFrequency = m_channel.GetSecondaryChannelCenterFrequency(20);
+        NS_TEST_ASSERT_MSG_EQ(secondary20MhzCenterFrequency,
+                              5520,
+                              "Secondary 20 MHz channel center frequency shall be 5520 MHz");
+
+        const auto primary80MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(80, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary80MhzChannelNumber,
+                              106,
+                              "Primary 80 MHz channel number shall be 106");
+        const auto primary40MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(40, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary40MhzChannelNumber,
+                              102,
+                              "Primary 40 MHz channel number shall be 102");
+        const auto primary20MhzChannelNumber =
+            m_channel.GetPrimaryChannelNumber(20, WIFI_STANDARD_80211ax);
+        NS_TEST_ASSERT_MSG_EQ(primary20MhzChannelNumber,
+                              100,
+                              "Primary 20 MHz channel number shall be 100");
+
+        auto ppdu160MHz = CreateDummyHePpdu(160, m_channel);
+        auto txCenterFreqs160MHz = ppdu160MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.size(), 2, "2 segments are covered by 160 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.front(),
+                              5530,
+                              "Center frequency of first segment shall be 5530 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs160MHz.back(),
+                              5210,
+                              "Center frequency of second segment shall be 5210 MHz");
+        auto ppdu80MHz = CreateDummyHePpdu(80, m_channel);
+        auto txCenterFreqs80MHz = ppdu80MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs80MHz.size(), 1, "1 segment is covered by 80 MHz");
+        NS_ASSERT(txCenterFreqs80MHz.front() == 5530);
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs80MHz.front(),
+                              5530,
+                              "Center frequency for 80 MHz shall be 5530 MHz");
+        auto ppdu40MHz = CreateDummyHePpdu(40, m_channel);
+        auto txCenterFreqs40MHz = ppdu40MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs40MHz.size(), 1, "1 segment is covered by 40 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs40MHz.front(),
+                              5510,
+                              "Center frequency for 40 MHz shall be 5510 MHz");
+        auto ppdu20MHz = CreateDummyHePpdu(20, m_channel);
+        auto txCenterFreqs20MHz = ppdu20MHz->GetTxCenterFreqs();
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs20MHz.size(), 1, "1 segment is covered by 20 MHz");
+        NS_TEST_ASSERT_MSG_EQ(txCenterFreqs20MHz.front(),
+                              5500,
+                              "Center frequency for 20 MHz shall be 5500 MHz");
+    }
+
+    Simulator::Destroy();
+}
+
+/**
+ * \ingroup wifi-test
+ * \ingroup tests
+ *
+ * \brief wifi operating channel test suite
+ */
+class WifiOperatingChannelTestSuite : public TestSuite
+{
+  public:
+    WifiOperatingChannelTestSuite();
+};
+
+WifiOperatingChannelTestSuite::WifiOperatingChannelTestSuite()
+    : TestSuite("wifi-operating-channel", Type::UNIT)
+{
+    AddTestCase(new SetWifiOperatingChannelTest(), TestCase::Duration::QUICK);
+    AddTestCase(new PhyChannelSettingsToOperatingChannelTest(), TestCase::Duration::QUICK);
+    AddTestCase(new WifiPhyChannel80Plus80Test(), TestCase::Duration::QUICK);
+}
+
+static WifiOperatingChannelTestSuite g_wifiOperatingChannelTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-phy-cca-test.cc ns-3.43/src/wifi/test/wifi-phy-cca-test.cc
--- ns-3.42/src/wifi/test/wifi-phy-cca-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-phy-cca-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -50,17 +39,17 @@
 
 NS_LOG_COMPONENT_DEFINE("WifiPhyCcaTest");
 
-constexpr uint32_t P20_CENTER_FREQUENCY = 5180; // MHz
-constexpr uint32_t S20_CENTER_FREQUENCY = P20_CENTER_FREQUENCY + 20;
-constexpr uint32_t P40_CENTER_FREQUENCY = P20_CENTER_FREQUENCY + 10;
-constexpr uint32_t S40_CENTER_FREQUENCY = P40_CENTER_FREQUENCY + 40;
-constexpr uint32_t P80_CENTER_FREQUENCY = P40_CENTER_FREQUENCY + 20;
-constexpr uint32_t S80_CENTER_FREQUENCY = P80_CENTER_FREQUENCY + 80;
-constexpr uint32_t P160_CENTER_FREQUENCY = P80_CENTER_FREQUENCY + 40;
+constexpr MHz_u P20_CENTER_FREQUENCY = 5180;
+constexpr MHz_u S20_CENTER_FREQUENCY = P20_CENTER_FREQUENCY + 20;
+constexpr MHz_u P40_CENTER_FREQUENCY = P20_CENTER_FREQUENCY + 10;
+constexpr MHz_u S40_CENTER_FREQUENCY = P40_CENTER_FREQUENCY + 40;
+constexpr MHz_u P80_CENTER_FREQUENCY = P40_CENTER_FREQUENCY + 20;
+constexpr MHz_u S80_CENTER_FREQUENCY = P80_CENTER_FREQUENCY + 80;
+constexpr MHz_u P160_CENTER_FREQUENCY = P80_CENTER_FREQUENCY + 40;
 const Time smallDelta = NanoSeconds(1);
 // add small delta to be right after aCCATime, since test checks are scheduled before wifi events
 const Time aCcaTime = MicroSeconds(4) + smallDelta;
-const std::map<uint16_t, Time> PpduDurations = {
+const std::map<MHz_u, Time> PpduDurations = {
     {20, NanoSeconds(1009600)},
     {40, NanoSeconds(533600)},
     {80, NanoSeconds(275200)},
@@ -100,25 +89,25 @@
     Ptr<OfdmPpdu> CreateDummyNonHtPpdu(const WifiPhyOperatingChannel& channel);
     /**
      * Create a HT PPDU
-     * \param bandwidth the bandwidth used for the transmission the PPDU in MHz
+     * \param bandwidth the bandwidth used for the transmission the PPDU
      * \param channel the operating channel of the PHY used for the transmission
      * \return a HT PPDU
      */
-    Ptr<HtPpdu> CreateDummyHtPpdu(uint16_t bandwidth, const WifiPhyOperatingChannel& channel);
+    Ptr<HtPpdu> CreateDummyHtPpdu(MHz_u bandwidth, const WifiPhyOperatingChannel& channel);
     /**
      * Create a VHT PPDU
-     * \param bandwidth the bandwidth used for the transmission the PPDU in MHz
+     * \param bandwidth the bandwidth used for the transmission the PPDU
      * \param channel the operating channel of the PHY used for the transmission
      * \return a VHT PPDU
      */
-    Ptr<VhtPpdu> CreateDummyVhtPpdu(uint16_t bandwidth, const WifiPhyOperatingChannel& channel);
+    Ptr<VhtPpdu> CreateDummyVhtPpdu(MHz_u bandwidth, const WifiPhyOperatingChannel& channel);
     /**
      * Create a HE PPDU
-     * \param bandwidth the bandwidth used for the transmission the PPDU in MHz
+     * \param bandwidth the bandwidth used for the transmission the PPDU
      * \param channel the operating channel of the PHY used for the transmission
      * \return a HE PPDU
      */
-    Ptr<HePpdu> CreateDummyHePpdu(uint16_t bandwidth, const WifiPhyOperatingChannel& channel);
+    Ptr<HePpdu> CreateDummyHePpdu(MHz_u bandwidth, const WifiPhyOperatingChannel& channel);
 
     /**
      * Function to verify the CCA threshold that is being reported by a given PHY entity upon
@@ -127,34 +116,33 @@
      * \param ppdu the incoming PPDU or signal (if nullptr)
      * \param channelType the channel list type that indicates which channel the PPDU or the
      * signal occupies
-     * \param expectedCcaThresholdDbm the CCA threshold in dBm that is expected to be reported
+     * \param expectedCcaThreshold the CCA threshold that is expected to be reported
      */
     void VerifyCcaThreshold(const Ptr<PhyEntity> phy,
                             const Ptr<const WifiPpdu> ppdu,
                             WifiChannelListType channelType,
-                            double expectedCcaThresholdDbm);
+                            dBm_u expectedCcaThreshold);
 
     Ptr<WifiNetDevice> m_device;              ///< The WifiNetDevice
     Ptr<SpectrumWifiPhy> m_phy;               ///< The spectrum PHY
     Ptr<ObssPdAlgorithm> m_obssPdAlgorithm;   ///< The OBSS-PD algorithm
     Ptr<VhtConfiguration> m_vhtConfiguration; ///< The VHT configuration
 
-    double m_CcaEdThresholdDbm; ///< The current CCA-ED threshold for a 20 MHz subchannel (in dBm)
-    double m_CcaSensitivityDbm; ///< The current CCA sensitivity threshold for signals that occupy
-                                ///< the primary 20 MHz channel (in dBm)
+    dBm_u m_CcaEdThreshold; ///< The current CCA-ED threshold for a 20 MHz subchannel
+    dBm_u m_CcaSensitivity; ///< The current CCA sensitivity threshold for signals that occupy the
+                            ///< primary 20 MHz channel
 
     VhtConfiguration::SecondaryCcaSensitivityThresholds
         m_secondaryCcaSensitivityThresholds; ///< The current CCA sensitivity thresholds for signals
-                                             ///< that do not occupy the primary 20 MHz channel (in
-                                             ///< dBm)
+                                             ///< that do not occupy the primary 20 MHz channel
 
-    double m_obssPdLevel; ///< The current OBSS-PD level (in dBm)
+    dBm_u m_obssPdLevel; ///< The current OBSS-PD level
 };
 
 WifiPhyCcaThresholdsTest::WifiPhyCcaThresholdsTest()
     : TestCase("Wi-Fi PHY CCA thresholds test"),
-      m_CcaEdThresholdDbm{-62.0},
-      m_CcaSensitivityDbm{-82.0},
+      m_CcaEdThreshold{-62.0},
+      m_CcaSensitivity{-82.0},
       m_secondaryCcaSensitivityThresholds{-72.0, -72.0, -69.0},
       m_obssPdLevel{-82.0}
 {
@@ -173,38 +161,64 @@
 Ptr<OfdmPpdu>
 WifiPhyCcaThresholdsTest::CreateDummyNonHtPpdu(const WifiPhyOperatingChannel& channel)
 {
-    WifiTxVector txVector =
-        WifiTxVector(OfdmPhy::GetOfdmRate6Mbps(), 0, WIFI_PREAMBLE_LONG, 800, 1, 1, 0, 20, false);
+    WifiTxVector txVector = WifiTxVector(OfdmPhy::GetOfdmRate6Mbps(),
+                                         0,
+                                         WIFI_PREAMBLE_LONG,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         20,
+                                         false);
     Ptr<WifiPsdu> psdu = CreateDummyPsdu();
     return Create<OfdmPpdu>(psdu, txVector, channel, 0);
 }
 
 Ptr<HtPpdu>
-WifiPhyCcaThresholdsTest::CreateDummyHtPpdu(uint16_t bandwidth,
-                                            const WifiPhyOperatingChannel& channel)
+WifiPhyCcaThresholdsTest::CreateDummyHtPpdu(MHz_u bandwidth, const WifiPhyOperatingChannel& channel)
 {
-    WifiTxVector txVector =
-        WifiTxVector(HtPhy::GetHtMcs0(), 0, WIFI_PREAMBLE_HT_MF, 800, 1, 1, 0, bandwidth, false);
+    WifiTxVector txVector = WifiTxVector(HtPhy::GetHtMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_HT_MF,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         bandwidth,
+                                         false);
     Ptr<WifiPsdu> psdu = CreateDummyPsdu();
     return Create<HtPpdu>(psdu, txVector, channel, MicroSeconds(100), 0);
 }
 
 Ptr<VhtPpdu>
-WifiPhyCcaThresholdsTest::CreateDummyVhtPpdu(uint16_t bandwidth,
+WifiPhyCcaThresholdsTest::CreateDummyVhtPpdu(MHz_u bandwidth,
                                              const WifiPhyOperatingChannel& channel)
 {
-    WifiTxVector txVector =
-        WifiTxVector(VhtPhy::GetVhtMcs0(), 0, WIFI_PREAMBLE_VHT_SU, 800, 1, 1, 0, bandwidth, false);
+    WifiTxVector txVector = WifiTxVector(VhtPhy::GetVhtMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_VHT_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         bandwidth,
+                                         false);
     Ptr<WifiPsdu> psdu = CreateDummyPsdu();
     return Create<VhtPpdu>(psdu, txVector, channel, MicroSeconds(100), 0);
 }
 
 Ptr<HePpdu>
-WifiPhyCcaThresholdsTest::CreateDummyHePpdu(uint16_t bandwidth,
-                                            const WifiPhyOperatingChannel& channel)
+WifiPhyCcaThresholdsTest::CreateDummyHePpdu(MHz_u bandwidth, const WifiPhyOperatingChannel& channel)
 {
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, bandwidth, false);
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         bandwidth,
+                                         false);
     Ptr<WifiPsdu> psdu = CreateDummyPsdu();
     return Create<HePpdu>(psdu, txVector, channel, MicroSeconds(100), 0);
 }
@@ -213,20 +227,20 @@
 WifiPhyCcaThresholdsTest::VerifyCcaThreshold(const Ptr<PhyEntity> phy,
                                              const Ptr<const WifiPpdu> ppdu,
                                              WifiChannelListType channelType,
-                                             double expectedCcaThresholdDbm)
+                                             dBm_u expectedCcaThreshold)
 {
-    NS_LOG_FUNCTION(this << phy << channelType << expectedCcaThresholdDbm);
-    double actualThresholdDbm = phy->GetCcaThreshold(ppdu, channelType);
+    NS_LOG_FUNCTION(this << phy << channelType << expectedCcaThreshold);
+    const auto actualThreshold = phy->GetCcaThreshold(ppdu, channelType);
     NS_LOG_INFO((ppdu == nullptr ? "any signal" : "a PPDU")
-                << " in " << channelType << " channel: " << actualThresholdDbm << "dBm");
-    NS_TEST_EXPECT_MSG_EQ_TOL(actualThresholdDbm,
-                              expectedCcaThresholdDbm,
+                << " in " << channelType << " channel: " << actualThreshold << "dBm");
+    NS_TEST_EXPECT_MSG_EQ_TOL(actualThreshold,
+                              expectedCcaThreshold,
                               1e-6,
                               "Actual CCA threshold for "
                                   << (ppdu == nullptr ? "any signal" : "a PPDU") << " in "
-                                  << channelType << " channel " << actualThresholdDbm
+                                  << channelType << " channel " << actualThreshold
                                   << "dBm does not match expected threshold "
-                                  << expectedCcaThresholdDbm << "dBm");
+                                  << expectedCcaThreshold << "dBm");
 }
 
 void
@@ -246,8 +260,9 @@
     m_phy->SetInterferenceHelper(CreateObject<InterferenceHelper>());
     m_phy->AddChannel(CreateObject<MultiModelSpectrumChannel>());
 
-    auto channelNum = std::get<0>(
-        *WifiPhyOperatingChannel::FindFirst(0, 0, 160, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ));
+    auto channelNum =
+        WifiPhyOperatingChannel::FindFirst(0, 0, 160, WIFI_STANDARD_80211ax, WIFI_PHY_BAND_5GHZ)
+            ->number;
     m_phy->SetOperatingChannel(WifiPhy::ChannelTuple{channelNum, 160, WIFI_PHY_BAND_5GHZ, 0});
     m_phy->ConfigureStandard(WIFI_STANDARD_80211ax);
 
@@ -266,8 +281,8 @@
 void
 WifiPhyCcaThresholdsTest::RunOne()
 {
-    m_phy->SetCcaEdThreshold(m_CcaEdThresholdDbm);
-    m_phy->SetCcaSensitivityThreshold(m_CcaSensitivityDbm);
+    m_phy->SetCcaEdThreshold(m_CcaEdThreshold);
+    m_phy->SetCcaSensitivityThreshold(m_CcaSensitivity);
     m_vhtConfiguration->SetSecondaryCcaSensitivityThresholds(m_secondaryCcaSensitivityThresholds);
     m_obssPdAlgorithm->SetObssPdLevel(m_obssPdLevel);
 
@@ -275,7 +290,7 @@
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_OFDM),
                        nullptr,
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaEdThresholdDbm);
+                       m_CcaEdThreshold);
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
@@ -284,7 +299,7 @@
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_OFDM),
                        CreateDummyNonHtPpdu(m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
@@ -292,13 +307,13 @@
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HT),
                        nullptr,
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaEdThresholdDbm);
+                       m_CcaEdThreshold);
 
     // HT PHY: any signal in primary channel (20 MHz) if power above CCA-ED threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HT),
                        nullptr,
                        WIFI_CHANLIST_SECONDARY,
-                       m_CcaEdThresholdDbm);
+                       m_CcaEdThreshold);
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
@@ -307,14 +322,14 @@
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HT),
                        CreateDummyHtPpdu(20, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     // HT PHY: 40 MHz HT PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
     // threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HT),
                        CreateDummyHtPpdu(40, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
@@ -322,25 +337,25 @@
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        nullptr,
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaEdThresholdDbm);
+                       m_CcaEdThreshold);
 
     // VHT PHY: any signal in secondary channel (20 MHz) if power above CCA-ED threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        nullptr,
                        WIFI_CHANLIST_SECONDARY,
-                       m_CcaEdThresholdDbm);
+                       m_CcaEdThreshold);
 
     // VHT PHY: any signal in secondary40 channel (40 MHz) if power above CCA-ED threshold + 3dB
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        nullptr,
                        WIFI_CHANLIST_SECONDARY40,
-                       m_CcaEdThresholdDbm + 3);
+                       m_CcaEdThreshold + static_cast<dB_u>(3.0));
 
     // VHT PHY: any signal in secondary80 channel (80 MHz) if power above CCA-ED threshold + 6dB
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        nullptr,
                        WIFI_CHANLIST_SECONDARY80,
-                       m_CcaEdThresholdDbm + 6);
+                       m_CcaEdThreshold + static_cast<dB_u>(6.0));
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
@@ -349,28 +364,28 @@
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        CreateDummyVhtPpdu(20, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     // VHT PHY: 40 MHz VHT PPDU in primary channel (20 MHz) if power in primary above CCA
     // sensitivity threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        CreateDummyVhtPpdu(40, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     // VHT PHY: 80 MHz VHT PPDU in primary channel (20 MHz) if power in primary above CCA
     // sensitivity threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        CreateDummyVhtPpdu(80, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     // VHT PHY: 160 MHz VHT PPDU in primary channel (20 MHz) if power in primary above CCA
     // sensitivity threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_VHT),
                        CreateDummyVhtPpdu(160, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
@@ -422,25 +437,25 @@
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        nullptr,
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaEdThresholdDbm);
+                       m_CcaEdThreshold);
 
     // HE PHY: any signal in secondary channel (20 MHz) if power above CCA-ED threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        nullptr,
                        WIFI_CHANLIST_SECONDARY,
-                       m_CcaEdThresholdDbm);
+                       m_CcaEdThreshold);
 
     // HE PHY: any signal in secondary40 channel (40 MHz) if power above CCA-ED threshold + 3dB
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        nullptr,
                        WIFI_CHANLIST_SECONDARY40,
-                       m_CcaEdThresholdDbm + 3);
+                       m_CcaEdThreshold + static_cast<dB_u>(3.0));
 
     // HE PHY: any signal in secondary80 channel (80 MHz) if power above CCA-ED threshold + 6dB
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        nullptr,
                        WIFI_CHANLIST_SECONDARY80,
-                       m_CcaEdThresholdDbm + 6);
+                       m_CcaEdThreshold + static_cast<dB_u>(6.0));
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
@@ -449,28 +464,28 @@
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(20, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     // HE PHY: 40 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
     // threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(40, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     // HE PHY: 80 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
     // threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(80, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     // HE PHY: 160 MHz HE PPDU in primary channel (20 MHz) if power in primary above CCA sensitivity
     // threshold
     VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
                        CreateDummyHePpdu(160, m_phy->GetOperatingChannel()),
                        WIFI_CHANLIST_PRIMARY,
-                       m_CcaSensitivityDbm);
+                       m_CcaSensitivity);
 
     //-----------------------------------------------------------------------------------------------------------------------------------
 
@@ -493,11 +508,11 @@
     // HE PHY: 40 MHz HE PPDU in secondary40 channel (40 MHz) if power above the max between the CCA
     // sensitivity threshold corresponding to a 40 MHz PPDU that does not occupy the primary 20 MHz
     // and the OBSS-PD level plus 3 dB
-    VerifyCcaThreshold(
-        m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
-        CreateDummyHePpdu(40, m_phy->GetOperatingChannel()),
-        WIFI_CHANLIST_SECONDARY40,
-        std::max(m_obssPdLevel + 3.0, std::get<1>(m_secondaryCcaSensitivityThresholds)));
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
+                       CreateDummyHePpdu(40, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY40,
+                       std::max(m_obssPdLevel + static_cast<dB_u>(3.0),
+                                std::get<1>(m_secondaryCcaSensitivityThresholds)));
 
     // HE PHY: 20 MHz HE PPDU in secondary80 channel (80 MHz) if power above the max between the CCA
     // sensitivity threshold corresponding to a 20 MHz PPDU that does not occupy the primary 20 MHz
@@ -510,77 +525,77 @@
     // HE PHY: 40 MHz HE PPDU in secondary80 channel (80 MHz) if power above the max between the CCA
     // sensitivity threshold corresponding to a 40 MHz PPDU that does not occupy the primary 20 MHz
     // and the OBSS-PD level plus 3 dB
-    VerifyCcaThreshold(
-        m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
-        CreateDummyHePpdu(40, m_phy->GetOperatingChannel()),
-        WIFI_CHANLIST_SECONDARY80,
-        std::max(m_obssPdLevel + 3.0, std::get<1>(m_secondaryCcaSensitivityThresholds)));
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
+                       CreateDummyHePpdu(40, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY80,
+                       std::max(m_obssPdLevel + static_cast<dB_u>(3.0),
+                                std::get<1>(m_secondaryCcaSensitivityThresholds)));
 
     // HE PHY: 80 MHz HE PPDU in secondary80 channel (80 MHz) if power above the max between the CCA
     // sensitivity threshold corresponding to a 80 MHz PPDU that does not occupy the primary 20 MHz
     // and the OBSS-PD level plus 6 dB
-    VerifyCcaThreshold(
-        m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
-        CreateDummyHePpdu(80, m_phy->GetOperatingChannel()),
-        WIFI_CHANLIST_SECONDARY80,
-        std::max(m_obssPdLevel + 6.0, std::get<2>(m_secondaryCcaSensitivityThresholds)));
+    VerifyCcaThreshold(m_phy->GetPhyEntity(WIFI_MOD_CLASS_HE),
+                       CreateDummyHePpdu(80, m_phy->GetOperatingChannel()),
+                       WIFI_CHANLIST_SECONDARY80,
+                       std::max(m_obssPdLevel + static_cast<dB_u>(6.0),
+                                std::get<2>(m_secondaryCcaSensitivityThresholds)));
 }
 
 void
 WifiPhyCcaThresholdsTest::DoRun()
 {
     // default attributes
-    m_CcaEdThresholdDbm = -62.0;
-    m_CcaSensitivityDbm = -82.0;
+    m_CcaEdThreshold = -62.0;
+    m_CcaSensitivity = -82.0;
     m_secondaryCcaSensitivityThresholds = std::make_tuple(-72.0, -72.0, -69.0);
     m_obssPdLevel = -82.0;
     RunOne();
 
     // default attributes with OBSS-PD level set to -80 dBm
-    m_CcaEdThresholdDbm = -62.0;
-    m_CcaSensitivityDbm = -82.0;
+    m_CcaEdThreshold = -62.0;
+    m_CcaSensitivity = -82.0;
     m_secondaryCcaSensitivityThresholds = std::make_tuple(-72.0, -72.0, -69.0);
     m_obssPdLevel = -80.0;
     RunOne();
 
     // default attributes with OBSS-PD level set to -70 dBm
-    m_CcaEdThresholdDbm = -62.0;
-    m_CcaSensitivityDbm = -82.0;
+    m_CcaEdThreshold = -62.0;
+    m_CcaSensitivity = -82.0;
     m_secondaryCcaSensitivityThresholds = std::make_tuple(-72.0, -72.0, -69.0);
     m_obssPdLevel = -70.0;
     RunOne();
 
     // CCA-ED set to -65 dBm
-    m_CcaEdThresholdDbm = -65.0;
-    m_CcaSensitivityDbm = -82.0;
+    m_CcaEdThreshold = -65.0;
+    m_CcaSensitivity = -82.0;
     m_secondaryCcaSensitivityThresholds = std::make_tuple(-72.0, -72.0, -69.0);
     m_obssPdLevel = -82.0;
     RunOne();
 
     // CCA sensitivity for signals in primary set to -75 dBm
-    m_CcaEdThresholdDbm = -62.0;
-    m_CcaSensitivityDbm = -75.0;
+    m_CcaEdThreshold = -62.0;
+    m_CcaSensitivity = -75.0;
     m_secondaryCcaSensitivityThresholds = std::make_tuple(-72.0, -72.0, -69.0);
     m_obssPdLevel = -82.0;
     RunOne();
 
     // custom CCA sensitivities for signals not in primary
-    m_CcaEdThresholdDbm = -62.0;
-    m_CcaSensitivityDbm = -72.0;
+    m_CcaEdThreshold = -62.0;
+    m_CcaSensitivity = -72.0;
     m_secondaryCcaSensitivityThresholds = std::make_tuple(-70.0, -70.0, -70.0);
     m_obssPdLevel = -82.0;
     RunOne();
 
     // custom CCA sensitivities for signals not in primary with OBSS-PD level set to -80 dBm
-    m_CcaEdThresholdDbm = -62.0;
-    m_CcaSensitivityDbm = -72.0;
+    m_CcaEdThreshold = -62.0;
+    m_CcaSensitivity = -72.0;
     m_secondaryCcaSensitivityThresholds = std::make_tuple(-70.0, -70.0, -70.0);
     m_obssPdLevel = -80.0;
     RunOne();
 
     // custom CCA sensitivities for signals not in primary with OBSS-PD level set to -70 dBm
-    m_CcaEdThresholdDbm = -62.0;
-    m_CcaSensitivityDbm = -72.0;
+    m_CcaEdThreshold = -62.0;
+    m_CcaSensitivity = -72.0;
     m_secondaryCcaSensitivityThresholds = std::make_tuple(-70.0, -70.0, -70.0);
     m_obssPdLevel = -70.0;
     RunOne();
@@ -614,9 +629,9 @@
         NS_LOG_FUNCTION(this);
     }
 
-    void NotifyTxStart(Time duration, double txPowerDbm) override
+    void NotifyTxStart(Time duration, dBm_u txPower) override
     {
-        NS_LOG_FUNCTION(this << duration << txPowerDbm);
+        NS_LOG_FUNCTION(this << duration << txPower);
     }
 
     void NotifyCcaBusyStart(Time duration,
@@ -687,24 +702,24 @@
 
     /**
      * Send an HE SU PPDU
-     * \param txPowerDbm the transmit power in dBm
+     * \param txPower the transmit power
      * \param frequency the center frequency the transmitter is operating on
-     * \param bandwidth the bandwidth to use for the transmission in MHz
+     * \param bandwidth the bandwidth to use for the transmission
      */
-    void SendHeSuPpdu(double txPowerDbm, uint16_t frequency, uint16_t bandwidth);
+    void SendHeSuPpdu(dBm_u txPower, MHz_u frequency, MHz_u bandwidth);
 
     /**
      * Start to generate a signal
      * \param signalGenerator the signal generator to use
-     * \param txPowerDbm the transmit power in dBm
-     * \param frequency the center frequency of the signal to send in MHz
-     * \param bandwidth the bandwidth of the signal to send in MHz
+     * \param txPower the transmit power
+     * \param frequency the center frequency of the signal to send
+     * \param bandwidth the bandwidth of the signal to send
      * \param duration the duration of the signal
      */
     void StartSignal(Ptr<WaveformGenerator> signalGenerator,
-                     double txPowerDbm,
-                     uint16_t frequency,
-                     uint16_t bandwidth,
+                     dBm_u txPower,
+                     MHz_u frequency,
+                     MHz_u bandwidth,
                      Time duration);
     /**
      * Stop to generate a signal
@@ -742,11 +757,11 @@
      */
     struct TxSignalInfo
     {
-        double power{0.0};          //!< transmit power to use in dBm
+        dBm_u power{0.0};           //!< transmit power to use
         Time startTime{Seconds(0)}; //!< time at which transmission will be started
         Time duration{Seconds(0)};  //!< the duration of the transmission
-        uint16_t centerFreq{0};     //!< center frequency to use in MHz
-        uint16_t bandwidth{0};      //!< bandwidth to use in MHz
+        MHz_u centerFreq{0};        //!< center frequency to use
+        MHz_u bandwidth{0};         //!< bandwidth to use
     };
 
     /**
@@ -754,10 +769,10 @@
      */
     struct TxPpduInfo
     {
-        double power{0.0};          //!< transmit power to use in dBm
+        dBm_u power{0.0};           //!< transmit power to use
         Time startTime{Seconds(0)}; //!< time at which transmission will be started
-        uint16_t centerFreq{0};     //!< center frequency to use in MHz
-        uint16_t bandwidth{0};      //!< bandwidth to use in MHz
+        MHz_u centerFreq{0};        //!< center frequency to use
+        MHz_u bandwidth{0};         //!< bandwidth to use
     };
 
     /**
@@ -815,8 +830,8 @@
     std::shared_ptr<CcaTestPhyListener>
         m_rxPhyStateListener; ///< Listener for PHY state transitions
 
-    uint16_t m_frequency;    ///< Operating frequency in MHz
-    uint16_t m_channelWidth; ///< Operating channel width in MHz
+    MHz_u m_frequency;    ///< Operating frequency
+    MHz_u m_channelWidth; ///< Operating channel width
 };
 
 WifiPhyCcaIndicationTest::WifiPhyCcaIndicationTest()
@@ -829,12 +844,12 @@
 
 void
 WifiPhyCcaIndicationTest::StartSignal(Ptr<WaveformGenerator> signalGenerator,
-                                      double txPowerDbm,
-                                      uint16_t frequency,
-                                      uint16_t bandwidth,
+                                      dBm_u txPower,
+                                      MHz_u frequency,
+                                      MHz_u bandwidth,
                                       Time duration)
 {
-    NS_LOG_FUNCTION(this << signalGenerator << txPowerDbm << frequency << bandwidth << duration);
+    NS_LOG_FUNCTION(this << signalGenerator << txPower << frequency << bandwidth << duration);
 
     BandInfo bandInfo;
     bandInfo.fc = frequency * 1e6;
@@ -845,7 +860,7 @@
 
     Ptr<SpectrumModel> spectrumSignal = Create<SpectrumModel>(bands);
     Ptr<SpectrumValue> signalPsd = Create<SpectrumValue>(spectrumSignal);
-    *signalPsd = DbmToW(txPowerDbm) / (bandwidth * 1e6);
+    *signalPsd = DbmToW(txPower) / (bandwidth * 1e6);
 
     signalGenerator->SetTxPowerSpectralDensity(signalPsd);
     signalGenerator->SetPeriod(duration);
@@ -861,20 +876,28 @@
 }
 
 void
-WifiPhyCcaIndicationTest::SendHeSuPpdu(double txPowerDbm, uint16_t frequency, uint16_t bandwidth)
+WifiPhyCcaIndicationTest::SendHeSuPpdu(dBm_u txPower, MHz_u frequency, MHz_u bandwidth)
 {
-    NS_LOG_FUNCTION(this << txPowerDbm);
+    NS_LOG_FUNCTION(this << txPower);
 
-    auto channelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                      frequency,
-                                                                      bandwidth,
-                                                                      WIFI_STANDARD_80211ax,
-                                                                      WIFI_PHY_BAND_5GHZ));
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         frequency,
+                                                         bandwidth,
+                                                         WIFI_STANDARD_80211ax,
+                                                         WIFI_PHY_BAND_5GHZ)
+                          ->number;
     m_txPhy->SetOperatingChannel(
         WifiPhy::ChannelTuple{channelNum, bandwidth, WIFI_PHY_BAND_5GHZ, 0});
 
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, bandwidth, false);
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         bandwidth,
+                                         false);
 
     Ptr<Packet> pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
@@ -882,8 +905,8 @@
     hdr.SetQosTid(0);
     Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
 
-    m_txPhy->SetTxPowerStart(txPowerDbm);
-    m_txPhy->SetTxPowerEnd(txPowerDbm);
+    m_txPhy->SetTxPowerStart(txPower);
+    m_txPhy->SetTxPowerEnd(txPower);
 
     m_txPhy->Send(psdu, txVector);
 }
@@ -1069,11 +1092,12 @@
     m_rxPhy->AssignStreams(streamNumber);
     m_txPhy->AssignStreams(streamNumber);
 
-    auto channelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                      m_frequency,
-                                                                      m_channelWidth,
-                                                                      WIFI_STANDARD_80211ax,
-                                                                      WIFI_PHY_BAND_5GHZ));
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         m_frequency,
+                                                         m_channelWidth,
+                                                         WIFI_STANDARD_80211ax,
+                                                         WIFI_PHY_BAND_5GHZ)
+                          ->number;
 
     m_rxPhy->SetOperatingChannel(
         WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-phy-mu-mimo-test.cc ns-3.43/src/wifi/test/wifi-phy-mu-mimo-test.cc
--- ns-3.42/src/wifi/test/wifi-phy-mu-mimo-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-phy-mu-mimo-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2022 DERONNE SOFTWARE ENGINEERING
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -49,8 +38,8 @@
 
 NS_LOG_COMPONENT_DEFINE("WifiPhyMuMimoTest");
 
-constexpr uint32_t DEFAULT_FREQUENCY = 5180;   // MHz
-constexpr uint16_t DEFAULT_CHANNEL_WIDTH = 20; // MHz
+constexpr MHz_u DEFAULT_FREQUENCY = 5180;
+constexpr MHz_u DEFAULT_CHANNEL_WIDTH = 20;
 
 /**
  * \ingroup wifi-test
@@ -69,12 +58,12 @@
     /**
      * Build a TXVECTOR for DL MU with the given bandwidth and user information.
      *
-     * \param bw the channel width of the PPDU in MHz
+     * \param bw the channel width of the PPDU
      * \param userInfos the list of HE MU specific user transmission parameters
      *
      * \return the configured MU TXVECTOR
      */
-    static WifiTxVector BuildTxVector(uint16_t bw, const std::list<HeMuUserInfo>& userInfos);
+    static WifiTxVector BuildTxVector(MHz_u bw, const std::list<HeMuUserInfo>& userInfos);
 };
 
 TestDlMuTxVector::TestDlMuTxVector()
@@ -83,7 +72,7 @@
 }
 
 WifiTxVector
-TestDlMuTxVector::BuildTxVector(uint16_t bw, const std::list<HeMuUserInfo>& userInfos)
+TestDlMuTxVector::BuildTxVector(MHz_u bw, const std::list<HeMuUserInfo>& userInfos)
 {
     WifiTxVector txVector;
     txVector.SetPreambleType(WIFI_PREAMBLE_HE_MU);
@@ -495,8 +484,8 @@
     Ptr<MuMimoSpectrumWifiPhy> m_phySta3; ///< PHY of STA 3
 
     uint8_t m_nss;               ///< number of spatial streams per STA
-    uint16_t m_frequency;        ///< frequency in MHz
-    uint16_t m_channelWidth;     ///< channel width in MHz
+    MHz_u m_frequency;           ///< frequency
+    MHz_u m_channelWidth;        ///< channel width
     Time m_expectedPpduDuration; ///< expected duration to send MU PPDU
 };
 
@@ -541,7 +530,7 @@
     WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
                                          0,
                                          WIFI_PREAMBLE_HE_MU,
-                                         800,
+                                         NanoSeconds(800),
                                          1,
                                          1,
                                          0,
@@ -800,11 +789,12 @@
     m_phySta1->AssignStreams(streamNumber);
     m_phySta2->AssignStreams(streamNumber);
 
-    auto channelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                      m_frequency,
-                                                                      m_channelWidth,
-                                                                      WIFI_STANDARD_80211ax,
-                                                                      WIFI_PHY_BAND_5GHZ));
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         m_frequency,
+                                                         m_channelWidth,
+                                                         WIFI_STANDARD_80211ax,
+                                                         WIFI_PHY_BAND_5GHZ)
+                          ->number;
 
     m_phyAp->SetOperatingChannel(
         WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
@@ -1265,8 +1255,8 @@
     std::vector<uint32_t> m_countRxBytesFromStas;   ///< count RX bytes from STAs
 
     Time m_delayStart;           ///< delay between the start of each HE TB PPDUs
-    uint16_t m_frequency;        ///< frequency in MHz
-    uint16_t m_channelWidth;     ///< channel width in MHz
+    MHz_u m_frequency;           ///< frequency
+    MHz_u m_channelWidth;        ///< channel width
     Time m_expectedPpduDuration; ///< expected duration to send MU PPDU
 };
 
@@ -1294,7 +1284,7 @@
     WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
                                          0,
                                          WIFI_PREAMBLE_HE_SU,
-                                         800,
+                                         NanoSeconds(800),
                                          1,
                                          1,
                                          0,
@@ -1329,7 +1319,7 @@
     WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
                                          0,
                                          WIFI_PREAMBLE_HE_TB,
-                                         1600,
+                                         NanoSeconds(1600),
                                          1,
                                          nss,
                                          0,
@@ -1353,7 +1343,7 @@
     WifiTxVector txVector(HePhy::GetHeMcs7(),
                           0,
                           WIFI_PREAMBLE_HE_TB,
-                          1600,
+                          NanoSeconds(1600),
                           1,
                           1,
                           0,
@@ -1421,7 +1411,7 @@
                                        std::vector<bool> /*statusPerMpdu*/)
 {
     NS_LOG_FUNCTION(this << *psdu << psdu->GetAddr2() << RatioToDb(rxSignalInfo.snr) << txVector);
-    NS_TEST_ASSERT_MSG_EQ((RatioToDb(rxSignalInfo.snr) > 0), true, "Incorrect SNR value");
+    NS_TEST_ASSERT_MSG_EQ((RatioToDb(rxSignalInfo.snr) > dB_u{0.0}), true, "Incorrect SNR value");
     for (std::size_t index = 0; index < m_countRxSuccessFromStas.size(); ++index)
     {
         std::ostringstream addr;
@@ -1708,11 +1698,12 @@
         phy->AssignStreams(streamNumber);
     }
 
-    auto channelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                      m_frequency,
-                                                                      m_channelWidth,
-                                                                      WIFI_STANDARD_80211ax,
-                                                                      WIFI_PHY_BAND_5GHZ));
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         m_frequency,
+                                                         m_channelWidth,
+                                                         WIFI_STANDARD_80211ax,
+                                                         WIFI_PHY_BAND_5GHZ)
+                          ->number;
 
     m_phyAp->SetOperatingChannel(
         WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-phy-ofdma-test.cc ns-3.43/src/wifi/test/wifi-phy-ofdma-test.cc
--- ns-3.42/src/wifi/test/wifi-phy-ofdma-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-phy-ofdma-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2019 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -61,11 +50,11 @@
 NS_LOG_COMPONENT_DEFINE("WifiPhyOfdmaTest");
 
 static const uint8_t DEFAULT_CHANNEL_NUMBER = 36;
-static const uint32_t DEFAULT_FREQUENCY = 5180; // MHz
+static const MHz_u DEFAULT_FREQUENCY = 5180;
 static const WifiPhyBand DEFAULT_WIFI_BAND = WIFI_PHY_BAND_5GHZ;
-static const uint16_t DEFAULT_CHANNEL_WIDTH = 20; // MHz
-static const uint16_t DEFAULT_GUARD_WIDTH =
-    DEFAULT_CHANNEL_WIDTH; // MHz (expanded to channel width to model spectrum mask)
+static const MHz_u DEFAULT_CHANNEL_WIDTH = 20;
+static const MHz_u DEFAULT_GUARD_WIDTH =
+    DEFAULT_CHANNEL_WIDTH; // expanded to channel width to model spectrum mask
 
 /**
  * HE PHY slightly modified so as to return a given
@@ -186,14 +175,14 @@
     /**
      * Wrapper to InterferenceHelper method.
      *
-     * \param energyW the minimum energy (W) requested
+     * \param energy the minimum energy requested
      * \param band identify the requested band
      *
      * \returns the expected amount of time the observed
      *          energy on the medium for a given band will
      *          be higher than the requested threshold.
      */
-    Time GetEnergyDuration(double energyW, WifiSpectrumBandInfo band);
+    Time GetEnergyDuration(Watt_u energy, WifiSpectrumBandInfo band);
 
     /**
      * \return a const pointer to the HE PHY instance
@@ -279,9 +268,9 @@
 }
 
 Time
-OfdmaSpectrumWifiPhy::GetEnergyDuration(double energyW, WifiSpectrumBandInfo band)
+OfdmaSpectrumWifiPhy::GetEnergyDuration(Watt_u energy, WifiSpectrumBandInfo band)
 {
-    return m_interference->GetEnergyDuration(energyW, band);
+    return m_interference->GetEnergyDuration(energy, band);
 }
 
 Ptr<const HePhy>
@@ -442,8 +431,8 @@
     Ptr<OfdmaSpectrumWifiPhy> m_phySta3;    ///< PHY of STA 3
     Ptr<WaveformGenerator> m_phyInterferer; ///< PHY of interferer
 
-    uint16_t m_frequency;        ///< frequency in MHz
-    uint16_t m_channelWidth;     ///< channel width in MHz
+    MHz_u m_frequency;           ///< frequency
+    MHz_u m_channelWidth;        ///< channel width
     Time m_expectedPpduDuration; ///< expected duration to send MU PPDU
 };
 
@@ -483,16 +472,16 @@
 {
     NS_LOG_FUNCTION(this << rxStaId1 << rxStaId2);
     WifiConstPsduMap psdus;
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_MU,
-                                         800,
-                                         1,
-                                         1,
-                                         0,
-                                         m_channelWidth,
-                                         false,
-                                         false);
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_MU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          m_channelWidth,
+                          false,
+                          false};
     HeRu::RuType ruType = HeRu::RU_106_TONE;
     if (m_channelWidth == 20)
     {
@@ -816,11 +805,12 @@
     m_phySta2->AssignStreams(streamNumber);
     m_phySta3->AssignStreams(streamNumber);
 
-    auto channelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                      m_frequency,
-                                                                      m_channelWidth,
-                                                                      WIFI_STANDARD_80211ax,
-                                                                      WIFI_PHY_BAND_5GHZ));
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         m_frequency,
+                                                         m_channelWidth,
+                                                         WIFI_STANDARD_80211ax,
+                                                         WIFI_PHY_BAND_5GHZ)
+                          ->number;
 
     m_phyAp->SetOperatingChannel(
         WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
@@ -959,9 +949,9 @@
     Bands bands;
     bands.push_back(bandInfo);
 
-    Ptr<SpectrumModel> SpectrumInterferenceRu1 = Create<SpectrumModel>(bands);
-    Ptr<SpectrumValue> interferencePsdRu1 = Create<SpectrumValue>(SpectrumInterferenceRu1);
-    double interferencePower = 0.1; // watts
+    auto SpectrumInterferenceRu1 = Create<SpectrumModel>(bands);
+    auto interferencePsdRu1 = Create<SpectrumValue>(SpectrumInterferenceRu1);
+    Watt_u interferencePower{0.1};
     *interferencePsdRu1 = interferencePower / ((m_channelWidth / 2) * 20e6);
 
     Simulator::Schedule(Seconds(3.0) + MicroSeconds(50),
@@ -1313,8 +1303,8 @@
     Ptr<OfdmaSpectrumWifiPhy> m_phySta2;    ///< PHY of STA 2
     Ptr<WaveformGenerator> m_phyInterferer; ///< PHY of interferer
 
-    uint16_t m_frequency;    ///< frequency in MHz
-    uint16_t m_channelWidth; ///< channel width in MHz
+    MHz_u m_frequency;    ///< frequency
+    MHz_u m_channelWidth; ///< channel width
 
     uint8_t m_indexSubchannel; ///< Index of the subchannel (starting from 0) that should contain an
                                ///< interference and be punctured during the test run
@@ -1357,16 +1347,16 @@
 {
     NS_LOG_FUNCTION(this << rxStaId1 << rxStaId2);
     WifiConstPsduMap psdus;
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_MU,
-                                         800,
-                                         1,
-                                         1,
-                                         0,
-                                         m_channelWidth,
-                                         false,
-                                         false);
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_MU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          m_channelWidth,
+                          false,
+                          false};
 
     HeRu::RuType ruType =
         puncturedSubchannels.empty()
@@ -1636,11 +1626,12 @@
     m_phySta1->AssignStreams(streamNumber);
     m_phySta2->AssignStreams(streamNumber);
 
-    auto channelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                      m_frequency,
-                                                                      m_channelWidth,
-                                                                      WIFI_STANDARD_80211ax,
-                                                                      WIFI_PHY_BAND_5GHZ));
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         m_frequency,
+                                                         m_channelWidth,
+                                                         WIFI_STANDARD_80211ax,
+                                                         WIFI_PHY_BAND_5GHZ)
+                          ->number;
 
     m_phyAp->SetOperatingChannel(
         WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
@@ -1660,9 +1651,9 @@
     Bands bands;
     bands.push_back(bandInfo);
 
-    Ptr<SpectrumModel> spectrumInterference = Create<SpectrumModel>(bands);
-    Ptr<SpectrumValue> interferencePsd = Create<SpectrumValue>(spectrumInterference);
-    double interferencePower = 0.1; // watts
+    auto spectrumInterference = Create<SpectrumModel>(bands);
+    auto interferencePsd = Create<SpectrumValue>(spectrumInterference);
+    Watt_u interferencePower{0.1};
     *interferencePsd = interferencePower / 10e6;
 
     Simulator::Schedule(Seconds(0.0),
@@ -1744,7 +1735,8 @@
     // Send MU PPDU with two PSDUs addressed to STA 1 and STA 2 with preamble puncturing:
     // the punctured 20 MHz subchannel is the one that has interference
     std::vector<bool> puncturedSubchannels;
-    for (std::size_t i = 0; i < (m_channelWidth / 20); ++i)
+    const std::size_t num20MhzSubchannels = m_channelWidth / 20;
+    for (std::size_t i = 0; i < num20MhzSubchannels; ++i)
     {
         if (i == m_indexSubchannel)
         {
@@ -1917,11 +1909,12 @@
     m_phyAp->SetErrorRateModel(apErrorModel);
     m_phyAp->AddChannel(spectrumChannel);
     m_phyAp->ConfigureStandard(WIFI_STANDARD_80211ax);
-    auto channelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                      DEFAULT_FREQUENCY,
-                                                                      DEFAULT_CHANNEL_WIDTH,
-                                                                      WIFI_STANDARD_80211ax,
-                                                                      WIFI_PHY_BAND_5GHZ));
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         DEFAULT_FREQUENCY,
+                                                         DEFAULT_CHANNEL_WIDTH,
+                                                         WIFI_STANDARD_80211ax,
+                                                         WIFI_PHY_BAND_5GHZ)
+                          ->number;
     m_phyAp->SetOperatingChannel(
         WifiPhy::ChannelTuple{channelNum, DEFAULT_CHANNEL_WIDTH, WIFI_PHY_BAND_5GHZ, 0});
     m_phyAp->SetDevice(apDev);
@@ -2047,16 +2040,16 @@
 TestUlOfdmaPpduUid::SendMuPpdu()
 {
     WifiConstPsduMap psdus;
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_MU,
-                                         800,
-                                         1,
-                                         1,
-                                         0,
-                                         DEFAULT_CHANNEL_WIDTH,
-                                         false,
-                                         false);
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_MU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          DEFAULT_CHANNEL_WIDTH,
+                          false,
+                          false};
 
     uint16_t rxStaId1 = 1;
     HeRu::RuSpec ru1(HeRu::RU_106_TONE, 1, true);
@@ -2099,18 +2092,18 @@
     WifiConstPsduMap psdus1;
     WifiConstPsduMap psdus2;
 
-    WifiTxVector txVector1 = WifiTxVector(HePhy::GetHeMcs7(),
-                                          0,
-                                          WIFI_PREAMBLE_HE_TB,
-                                          1600,
-                                          1,
-                                          1,
-                                          0,
-                                          DEFAULT_CHANNEL_WIDTH,
-                                          false,
-                                          false);
-    WifiTxVector txVector2 = txVector1;
-    WifiTxVector trigVector = txVector2;
+    WifiTxVector txVector1{HePhy::GetHeMcs7(),
+                           0,
+                           WIFI_PREAMBLE_HE_TB,
+                           NanoSeconds(1600),
+                           1,
+                           1,
+                           0,
+                           DEFAULT_CHANNEL_WIDTH,
+                           false,
+                           false};
+    WifiTxVector txVector2{txVector1};
+    WifiTxVector trigVector{txVector2};
 
     uint16_t rxStaId1 = 1;
     HeRu::RuSpec ru1(HeRu::RU_106_TONE, 1, false);
@@ -2121,13 +2114,13 @@
     trigVector.SetMode(HePhy::GetHeMcs7(), rxStaId1);
     trigVector.SetNss(1, rxStaId1);
 
-    Ptr<Packet> pkt1 = Create<Packet>(1000);
+    auto pkt1 = Create<Packet>(1000);
     WifiMacHeader hdr1;
     hdr1.SetType(WIFI_MAC_QOSDATA);
     hdr1.SetQosTid(0);
     hdr1.SetAddr1(Mac48Address("00:00:00:00:00:00"));
     hdr1.SetSequenceNumber(1);
-    Ptr<WifiPsdu> psdu1 = Create<WifiPsdu>(pkt1, hdr1);
+    auto psdu1 = Create<WifiPsdu>(pkt1, hdr1);
     psdus1.insert(std::make_pair(rxStaId1, psdu1));
 
     uint16_t rxStaId2 = 2;
@@ -2139,24 +2132,24 @@
     trigVector.SetMode(HePhy::GetHeMcs9(), rxStaId2);
     trigVector.SetNss(1, rxStaId2);
 
-    Ptr<Packet> pkt2 = Create<Packet>(1500);
+    auto pkt2 = Create<Packet>(1500);
     WifiMacHeader hdr2;
     hdr2.SetType(WIFI_MAC_QOSDATA);
     hdr2.SetQosTid(0);
     hdr2.SetAddr1(Mac48Address("00:00:00:00:00:00"));
     hdr2.SetSequenceNumber(2);
-    Ptr<WifiPsdu> psdu2 = Create<WifiPsdu>(pkt2, hdr2);
+    auto psdu2 = Create<WifiPsdu>(pkt2, hdr2);
     psdus2.insert(std::make_pair(rxStaId2, psdu2));
 
-    Time txDuration1 = m_phySta1->CalculateTxDuration(psdu1->GetSize(),
-                                                      txVector1,
-                                                      m_phySta1->GetPhyBand(),
-                                                      rxStaId1);
-    Time txDuration2 = m_phySta2->CalculateTxDuration(psdu2->GetSize(),
-                                                      txVector2,
-                                                      m_phySta1->GetPhyBand(),
-                                                      rxStaId2);
-    Time txDuration = std::max(txDuration1, txDuration2);
+    const auto txDuration1 = m_phySta1->CalculateTxDuration(psdu1->GetSize(),
+                                                            txVector1,
+                                                            m_phySta1->GetPhyBand(),
+                                                            rxStaId1);
+    const auto txDuration2 = m_phySta2->CalculateTxDuration(psdu2->GetSize(),
+                                                            txVector2,
+                                                            m_phySta1->GetPhyBand(),
+                                                            rxStaId2);
+    const auto txDuration = std::max(txDuration1, txDuration2);
 
     txVector1.SetLength(
         HePhy::ConvertHeTbPpduDurationToLSigLength(txDuration, txVector1, m_phySta1->GetPhyBand())
@@ -2176,24 +2169,24 @@
 TestUlOfdmaPpduUid::SendSuPpdu(uint16_t txStaId)
 {
     WifiConstPsduMap psdus;
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_SU,
-                                         800,
-                                         1,
-                                         1,
-                                         0,
-                                         DEFAULT_CHANNEL_WIDTH,
-                                         false,
-                                         false);
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_SU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          DEFAULT_CHANNEL_WIDTH,
+                          false,
+                          false};
 
-    Ptr<Packet> pkt = Create<Packet>(1000);
+    auto pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
     hdr.SetQosTid(0);
     hdr.SetAddr1(Mac48Address::GetBroadcast());
     hdr.SetSequenceNumber(1);
-    Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
+    auto psdu = Create<WifiPsdu>(pkt, hdr);
     psdus.insert(std::make_pair(SU_STA_ID, psdu));
 
     switch (txStaId)
@@ -2275,10 +2268,10 @@
      * \param uid the UID used to identify a set of HE TB PPDUs belonging to the same UL-MU
      * transmission
      * \param staId the STA ID
-     * \param txPowerWatts the TX power in watts
+     * \param txPower the TX power
      * \param payloadSize the size of the payload in bytes
      */
-    void RxHeTbPpdu(uint64_t uid, uint16_t staId, double txPowerWatts, size_t payloadSize);
+    void RxHeTbPpdu(uint64_t uid, uint16_t staId, Watt_u txPower, size_t payloadSize);
 
     /**
      * Receive OFDMA part of HE TB PPDU function.
@@ -2332,7 +2325,7 @@
       m_trigVector(HePhy::GetHeMcs7(),
                    0,
                    WIFI_PREAMBLE_HE_TB,
-                   1600,
+                   NanoSeconds(1600),
                    1,
                    1,
                    0,
@@ -2390,20 +2383,20 @@
 void
 TestMultipleHeTbPreambles::RxHeTbPpdu(uint64_t uid,
                                       uint16_t staId,
-                                      double txPowerWatts,
+                                      Watt_u txPower,
                                       size_t payloadSize)
 {
     WifiConstPsduMap psdus;
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_TB,
-                                         1600,
-                                         1,
-                                         1,
-                                         0,
-                                         DEFAULT_CHANNEL_WIDTH,
-                                         false,
-                                         false);
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_TB,
+                          NanoSeconds(1600),
+                          1,
+                          1,
+                          0,
+                          DEFAULT_CHANNEL_WIDTH,
+                          false,
+                          false};
 
     HeRu::RuSpec ru(HeRu::RU_106_TONE, staId, false);
     txVector.SetRu(ru, staId);
@@ -2412,35 +2405,36 @@
 
     m_trigVector.SetHeMuUserInfo(staId, {ru, 7, 1});
 
-    Ptr<Packet> pkt = Create<Packet>(payloadSize);
+    auto pkt = Create<Packet>(payloadSize);
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
     hdr.SetQosTid(0);
     hdr.SetAddr1(Mac48Address("00:00:00:00:00:00"));
     hdr.SetSequenceNumber(1);
-    Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
+    auto psdu = Create<WifiPsdu>(pkt, hdr);
     psdus.insert(std::make_pair(staId, psdu));
 
-    Time ppduDuration =
+    auto ppduDuration =
         m_phy->CalculateTxDuration(psdu->GetSize(), txVector, m_phy->GetPhyBand(), staId);
-    Ptr<HePpdu> ppdu = Create<HePpdu>(psdus,
-                                      txVector,
-                                      m_phy->GetOperatingChannel(),
-                                      ppduDuration,
-                                      uid,
-                                      HePpdu::PSD_NON_HE_PORTION);
+    auto ppdu = Create<HePpdu>(psdus,
+                               txVector,
+                               m_phy->GetOperatingChannel(),
+                               ppduDuration,
+                               uid,
+                               HePpdu::PSD_NON_HE_PORTION);
 
     // Send non-OFDMA part
-    Time nonOfdmaDuration = m_phy->GetHePhy()->CalculateNonHeDurationForHeTb(txVector);
-    uint32_t centerFrequency = m_phy->GetHePhy()->GetCenterFrequencyForNonHePart(txVector, staId);
-    uint16_t ruWidth = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
-    uint16_t channelWidth = ruWidth < 20 ? 20 : ruWidth;
+    const auto nonOfdmaDuration = m_phy->GetHePhy()->CalculateNonHeDurationForHeTb(txVector);
+    const auto centerFrequency =
+        m_phy->GetHePhy()->GetCenterFrequenciesForNonHePart(ppdu, staId).front();
+    MHz_u ruWidth = HeRu::GetBandwidth(txVector.GetRu(staId).GetRuType());
+    MHz_u channelWidth = ruWidth < 20 ? 20 : ruWidth;
     Ptr<SpectrumValue> rxPsd = WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(
         centerFrequency,
         channelWidth,
-        txPowerWatts,
+        txPower,
         m_phy->GetGuardBandwidth(channelWidth));
-    Ptr<WifiSpectrumSignalParameters> rxParams = Create<WifiSpectrumSignalParameters>();
+    auto rxParams = Create<WifiSpectrumSignalParameters>();
     rxParams->psd = rxPsd;
     rxParams->txPhy = nullptr;
     rxParams->duration = nonOfdmaDuration;
@@ -2457,16 +2451,16 @@
     m_phy->StartRx(rxParams, nullptr);
 
     // Schedule OFDMA part
-    Ptr<HePpdu> ppduOfdma = DynamicCast<HePpdu>(ppdu->Copy()); // since flag will be modified
+    auto ppduOfdma = DynamicCast<HePpdu>(ppdu->Copy()); // since flag will be modified
     ppduOfdma->SetTxPsdFlag(HePpdu::PSD_HE_PORTION);
     const auto band = m_phy->GetHePhy()->GetRuBandForRx(txVector, staId);
-    Ptr<SpectrumValue> rxPsdOfdma =
-        WifiSpectrumValueHelper::CreateHeMuOfdmTxPowerSpectralDensity(DEFAULT_FREQUENCY,
+    auto rxPsdOfdma =
+        WifiSpectrumValueHelper::CreateHeMuOfdmTxPowerSpectralDensity({DEFAULT_FREQUENCY},
                                                                       DEFAULT_CHANNEL_WIDTH,
-                                                                      txPowerWatts,
+                                                                      txPower,
                                                                       DEFAULT_GUARD_WIDTH,
                                                                       band.indices);
-    Ptr<WifiSpectrumSignalParameters> rxParamsOfdma = Create<WifiSpectrumSignalParameters>();
+    auto rxParamsOfdma = Create<WifiSpectrumSignalParameters>();
     rxParamsOfdma->psd = rxPsd;
     rxParamsOfdma->txPhy = nullptr;
     rxParamsOfdma->duration = ppduDuration - nonOfdmaDuration;
@@ -2545,7 +2539,7 @@
     int64_t streamNumber = 0;
     m_phy->AssignStreams(streamNumber);
 
-    double txPowerWatts = 0.01;
+    Watt_u txPower{0.01};
 
     {
         // Verify a single UL MU transmission with two stations belonging to the same BSS
@@ -2555,14 +2549,14 @@
                             this,
                             uids[0],
                             1,
-                            txPowerWatts,
+                            txPower,
                             1001);
         Simulator::Schedule(Seconds(1) + NanoSeconds(100),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[0],
                             2,
-                            txPowerWatts,
+                            txPower,
                             1002);
         // Check that we received a single UL MU transmission with the corresponding UID
         Simulator::Schedule(Seconds(1.0) + MicroSeconds(1),
@@ -2583,28 +2577,28 @@
                             this,
                             uids[0],
                             1,
-                            txPowerWatts,
+                            txPower,
                             1001);
         Simulator::Schedule(Seconds(2) + NanoSeconds(100),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[0],
                             2,
-                            txPowerWatts,
+                            txPower,
                             1002);
         Simulator::Schedule(Seconds(2) + NanoSeconds(200),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[1],
                             1,
-                            txPowerWatts / 2,
+                            txPower / 2,
                             1003);
         Simulator::Schedule(Seconds(2) + NanoSeconds(300),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[1],
                             2,
-                            txPowerWatts / 2,
+                            txPower / 2,
                             1004);
         // Check that we received the correct reception of 2 UL MU transmissions with the
         // corresponding UIDs
@@ -2627,28 +2621,28 @@
                             this,
                             uids[0],
                             1,
-                            txPowerWatts / 2,
+                            txPower / 2,
                             1001);
         Simulator::Schedule(Seconds(3) + NanoSeconds(100),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[0],
                             2,
-                            txPowerWatts / 2,
+                            txPower / 2,
                             1002);
         Simulator::Schedule(Seconds(3) + NanoSeconds(200),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[1],
                             1,
-                            txPowerWatts,
+                            txPower,
                             1003);
         Simulator::Schedule(Seconds(3) + NanoSeconds(300),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[1],
                             2,
-                            txPowerWatts,
+                            txPower,
                             1004);
         // Check that we received the correct reception of 2 UL MU transmissions with the
         // corresponding UIDs
@@ -2671,28 +2665,28 @@
                             this,
                             uids[0],
                             1,
-                            txPowerWatts,
+                            txPower,
                             1001);
         Simulator::Schedule(Seconds(4) + NanoSeconds(100),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[0],
                             2,
-                            txPowerWatts,
+                            txPower,
                             1002);
         Simulator::Schedule(Seconds(4) + MicroSeconds(5),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[1],
                             1,
-                            txPowerWatts,
+                            txPower,
                             1003);
         Simulator::Schedule(Seconds(4) + MicroSeconds(5) + NanoSeconds(100),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[1],
                             2,
-                            txPowerWatts,
+                            txPower,
                             1004);
         // Check that we received the correct reception of the first UL MU transmission with the
         // corresponding UID (second one dropped)
@@ -2719,28 +2713,28 @@
                             this,
                             uids[0],
                             1,
-                            txPowerWatts,
+                            txPower,
                             1001);
         Simulator::Schedule(Seconds(5) + NanoSeconds(100),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[0],
                             2,
-                            txPowerWatts,
+                            txPower,
                             1002);
         Simulator::Schedule(Seconds(5) + MicroSeconds(50),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[1],
                             1,
-                            txPowerWatts,
+                            txPower,
                             1003);
         Simulator::Schedule(Seconds(5) + MicroSeconds(50) + NanoSeconds(100),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[1],
                             2,
-                            txPowerWatts,
+                            txPower,
                             1004);
         // Check that we received the correct reception of the first UL MU transmission with the
         // corresponding UID (second one dropped)
@@ -2767,14 +2761,14 @@
                             this,
                             uids[0],
                             1,
-                            txPowerWatts,
+                            txPower,
                             1001);
         Simulator::Schedule(Seconds(6) + NanoSeconds(500),
                             &TestMultipleHeTbPreambles::RxHeTbPpdu,
                             this,
                             uids[0],
                             2,
-                            txPowerWatts,
+                            txPower,
                             1002);
         // Check that we received a single UL MU transmission with the corresponding UID
         Simulator::Schedule(Seconds(6.0) + MicroSeconds(1),
@@ -2832,9 +2826,9 @@
         m_lastRxSuccess = false;
     }
 
-    void NotifyTxStart(Time duration, double txPowerDbm) override
+    void NotifyTxStart(Time duration, dBm_u txPower) override
     {
-        NS_LOG_FUNCTION(this << duration << txPowerDbm);
+        NS_LOG_FUNCTION(this << duration << txPower);
     }
 
     void NotifyCcaBusyStart(Time duration,
@@ -3009,9 +3003,9 @@
     /**
      * Set the PSD limit
      * \param phy the PHY
-     * \param psdLimit the PSD limit in dBm/MHz
+     * \param psdLimit the PSD limit
      */
-    void SetPsdLimit(Ptr<WifiPhy> phy, double psdLimit);
+    void SetPsdLimit(Ptr<WifiPhy> phy, dBm_per_MHz_u psdLimit);
 
     /**
      * Generate interference function
@@ -3053,20 +3047,20 @@
      * Check the received power for the non-OFDMA of the HE TB PPDUs over the given band
      * \param phy the PHY
      * \param band the indices of the band over which the power is measured
-     * \param expectedRxPower the expected received power in W
+     * \param expectedRxPower the expected received power
      */
     void CheckNonOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy> phy,
                               WifiSpectrumBandInfo band,
-                              double expectedRxPower);
+                              Watt_u expectedRxPower);
     /**
      * Check the received power for the OFDMA part of the HE TB PPDUs over the given band
      * \param phy the PHY
      * \param band the indices of the band over which the power is measured
-     * \param expectedRxPower the expected received power in W
+     * \param expectedRxPower the expected received power
      */
     void CheckOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy> phy,
                            WifiSpectrumBandInfo band,
-                           double expectedRxPower);
+                           Watt_u expectedRxPower);
 
     /**
      * Verify all events are cleared at end of TX or RX
@@ -3161,16 +3155,16 @@
      * Schedule power measurement related checks.
      *
      * \param delay the reference delay used to schedule the events
-     * \param rxPowerNonOfdmaRu1 the received power (in watts) on the non-OFDMA part of RU1
-     * \param rxPowerNonOfdmaRu2 the received power (in watts) on the non-OFDMA part of RU2
-     * \param rxPowerOfdmaRu1 the received power (in watts) on RU1
-     * \param rxPowerOfdmaRu2 the received power (in watts) on RU2
+     * \param rxPowerNonOfdmaRu1 the received power on the non-OFDMA part of RU1
+     * \param rxPowerNonOfdmaRu2 the received power on the non-OFDMA part of RU2
+     * \param rxPowerOfdmaRu1 the received power on RU1
+     * \param rxPowerOfdmaRu2 the received power on RU2
      */
     void SchedulePowerMeasurementChecks(Time delay,
-                                        double rxPowerNonOfdmaRu1,
-                                        double rxPowerNonOfdmaRu2,
-                                        double rxPowerOfdmaRu1,
-                                        double rxPowerOfdmaRu2);
+                                        Watt_u rxPowerNonOfdmaRu1,
+                                        Watt_u rxPowerNonOfdmaRu2,
+                                        Watt_u rxPowerOfdmaRu1,
+                                        Watt_u rxPowerOfdmaRu2);
     /**
      * Log scenario description
      *
@@ -3195,8 +3189,8 @@
     uint32_t m_countRxBytesFromSta1;   ///< count RX bytes from STA 1
     uint32_t m_countRxBytesFromSta2;   ///< count RX bytes from STA 2
 
-    uint16_t m_frequency;        ///< frequency in MHz
-    uint16_t m_channelWidth;     ///< channel width in MHz
+    MHz_u m_frequency;           ///< frequency
+    MHz_u m_channelWidth;        ///< channel width
     Time m_expectedPpduDuration; ///< expected duration to send MU PPDU
 };
 
@@ -3223,20 +3217,20 @@
     NS_LOG_FUNCTION(this << txStaId << payloadSize << uid << +bssColor);
     WifiConstPsduMap psdus;
 
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_SU,
-                                         800,
-                                         1,
-                                         1,
-                                         0,
-                                         m_channelWidth,
-                                         false,
-                                         false,
-                                         false,
-                                         bssColor);
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_SU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          m_channelWidth,
+                          false,
+                          false,
+                          false,
+                          bssColor};
 
-    Ptr<Packet> pkt = Create<Packet>(payloadSize);
+    auto pkt = Create<Packet>(payloadSize);
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
     hdr.SetQosTid(0);
@@ -3245,7 +3239,7 @@
     addr << "00:00:00:00:00:0" << txStaId;
     hdr.SetAddr2(Mac48Address(addr.str().c_str()));
     hdr.SetSequenceNumber(1);
-    Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
+    auto psdu = Create<WifiPsdu>(pkt, hdr);
     psdus.insert(std::make_pair(SU_STA_ID, psdu));
 
     Ptr<OfdmaSpectrumWifiPhy> phy;
@@ -3274,20 +3268,20 @@
                                                    std::size_t index,
                                                    uint8_t bssColor) const
 {
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_TB,
-                                         1600,
-                                         1,
-                                         1,
-                                         0,
-                                         m_channelWidth,
-                                         false,
-                                         false,
-                                         false,
-                                         bssColor);
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_TB,
+                          NanoSeconds(1600),
+                          1,
+                          1,
+                          0,
+                          m_channelWidth,
+                          false,
+                          false,
+                          false,
+                          bssColor};
 
-    HeRu::RuType ruType = HeRu::RU_106_TONE;
+    auto ruType = HeRu::RU_106_TONE;
     if (m_channelWidth == 20)
     {
         ruType = HeRu::RU_106_TONE;
@@ -3309,7 +3303,7 @@
         NS_ASSERT_MSG(false, "Unsupported channel width");
     }
 
-    bool primary80MHz = true;
+    auto primary80MHz = true;
     if (m_channelWidth == 160 && index == 2)
     {
         primary80MHz = false;
@@ -3325,7 +3319,7 @@
 void
 TestUlOfdmaPhyTransmission::SetTrigVector(uint8_t bssColor, TrigVectorInfo error)
 {
-    uint16_t channelWidth = m_channelWidth;
+    auto channelWidth = m_channelWidth;
     if (error == CHANNEL_WIDTH)
     {
         channelWidth = (channelWidth == 160 ? 20 : channelWidth * 2);
@@ -3334,7 +3328,7 @@
     WifiTxVector txVector(HePhy::GetHeMcs7(),
                           0,
                           WIFI_PREAMBLE_HE_TB,
-                          1600,
+                          NanoSeconds(1600),
                           1,
                           1,
                           0,
@@ -3535,11 +3529,11 @@
 void
 TestUlOfdmaPhyTransmission::CheckNonOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy> phy,
                                                  WifiSpectrumBandInfo band,
-                                                 double expectedRxPower)
+                                                 Watt_u expectedRxPower)
 {
-    Ptr<Event> event = phy->GetCurrentEvent();
+    auto event = phy->GetCurrentEvent();
     NS_ASSERT(event);
-    auto rxPower = event->GetRxPowerW(band);
+    auto rxPower = event->GetRxPower(band);
     NS_LOG_FUNCTION(this << band << expectedRxPower << rxPower);
     // Since there is out of band emission due to spectrum mask, the tolerance cannot be very low
     NS_TEST_ASSERT_MSG_EQ_TOL(rxPower,
@@ -3553,7 +3547,7 @@
 void
 TestUlOfdmaPhyTransmission::CheckOfdmaRxPower(Ptr<OfdmaSpectrumWifiPhy> phy,
                                               WifiSpectrumBandInfo band,
-                                              double expectedRxPower)
+                                              Watt_u expectedRxPower)
 {
     /**
      * The current event cannot be used since it points to the preamble part of the HE TB PPDU.
@@ -3691,7 +3685,7 @@
 }
 
 void
-TestUlOfdmaPhyTransmission::SetPsdLimit(Ptr<WifiPhy> phy, double psdLimit)
+TestUlOfdmaPhyTransmission::SetPsdLimit(Ptr<WifiPhy> phy, dBm_per_MHz_u psdLimit)
 {
     NS_LOG_FUNCTION(this << phy << psdLimit);
     phy->SetAttribute("PowerDensityLimit", DoubleValue(psdLimit));
@@ -3975,22 +3969,22 @@
 
 void
 TestUlOfdmaPhyTransmission::SchedulePowerMeasurementChecks(Time delay,
-                                                           double rxPowerNonOfdmaRu1,
-                                                           double rxPowerNonOfdmaRu2,
-                                                           double rxPowerOfdmaRu1,
-                                                           double rxPowerOfdmaRu2)
-{
-    Time detectionDuration = WifiPhy::GetPreambleDetectionDuration();
-    WifiTxVector txVectorSta1 = GetTxVectorForHeTbPpdu(1, 1, 0);
-    WifiTxVector txVectorSta2 = GetTxVectorForHeTbPpdu(2, 2, 0);
-    Ptr<const HePhy> hePhy = m_phyAp->GetHePhy();
-    Time nonOfdmaDuration = hePhy->CalculateNonHeDurationForHeTb(txVectorSta2);
+                                                           Watt_u rxPowerNonOfdmaRu1,
+                                                           Watt_u rxPowerNonOfdmaRu2,
+                                                           Watt_u rxPowerOfdmaRu1,
+                                                           Watt_u rxPowerOfdmaRu2)
+{
+    const auto detectionDuration = WifiPhy::GetPreambleDetectionDuration();
+    const auto txVectorSta1 = GetTxVectorForHeTbPpdu(1, 1, 0);
+    const auto txVectorSta2 = GetTxVectorForHeTbPpdu(2, 2, 0);
+    const auto hePhy = m_phyAp->GetHePhy();
+    const auto nonOfdmaDuration = hePhy->CalculateNonHeDurationForHeTb(txVectorSta2);
     NS_ASSERT(nonOfdmaDuration == hePhy->CalculateNonHeDurationForHeTb(txVectorSta1));
 
-    std::vector<double> rxPowerNonOfdma{rxPowerNonOfdmaRu1, rxPowerNonOfdmaRu2};
+    std::vector<Watt_u> rxPowerNonOfdma{rxPowerNonOfdmaRu1, rxPowerNonOfdmaRu2};
     std::vector<WifiSpectrumBandInfo> nonOfdmaBand{hePhy->GetNonOfdmaBand(txVectorSta1, 1),
                                                    hePhy->GetNonOfdmaBand(txVectorSta2, 2)};
-    std::vector<double> rxPowerOfdma{rxPowerOfdmaRu1, rxPowerOfdmaRu2};
+    std::vector<Watt_u> rxPowerOfdma{rxPowerOfdmaRu1, rxPowerOfdmaRu2};
     std::vector<WifiSpectrumBandInfo> ofdmaBand{hePhy->GetRuBandForRx(txVectorSta1, 1),
                                                 hePhy->GetRuBandForRx(txVectorSta2, 2)};
 
@@ -4074,7 +4068,7 @@
          * power received from other transmitting STA (STA 1).
          * Cannot use CheckNonOfdmaRxPower method since current event not set.
          */
-        double rxPowerNonOfdmaSta1Only =
+        const auto rxPowerNonOfdmaSta1Only =
             (m_channelWidth >= 40)
                 ? rxPowerNonOfdma[0]
                 : rxPowerNonOfdma[0] / 2; // both STAs transmit over the same 20 MHz channel
@@ -4122,11 +4116,12 @@
     m_phySta2->AssignStreams(streamNumber);
     m_phySta3->AssignStreams(streamNumber);
 
-    auto channelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                      m_frequency,
-                                                                      m_channelWidth,
-                                                                      WIFI_STANDARD_80211ax,
-                                                                      WIFI_PHY_BAND_5GHZ));
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         m_frequency,
+                                                         m_channelWidth,
+                                                         WIFI_STANDARD_80211ax,
+                                                         WIFI_PHY_BAND_5GHZ)
+                          ->number;
 
     m_phyAp->SetOperatingChannel(
         WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, 0});
@@ -4288,7 +4283,7 @@
 
     Ptr<SpectrumModel> SpectrumInterferenceRu1 = Create<SpectrumModel>(bands);
     Ptr<SpectrumValue> interferencePsdRu1 = Create<SpectrumValue>(SpectrumInterferenceRu1);
-    double interferencePower = 0.1; // watts
+    Watt_u interferencePower{0.1};
     *interferencePsdRu1 = interferencePower / ((m_channelWidth / 2) * 20e6);
 
     Simulator::Schedule(delay + MicroSeconds(50),
@@ -4554,7 +4549,7 @@
                         &TestUlOfdmaPhyTransmission::LogScenario,
                         this,
                         "Measure power for reception of HE TB PPDU only on RU 2");
-    double rxPower =
+    auto rxPower =
         DbmToW(19); // 16+1 dBm at STAs and +2 at AP (no loss since all devices are colocated)
     SchedulePowerMeasurementChecks(delay,
                                    (m_channelWidth >= 40) ? 0.0 : rxPower,
@@ -4595,7 +4590,7 @@
                   ? DbmToW(19)
                   : DbmToW(18.0103); // 15.0103+1 dBm at STA 2 and +2 at AP for non-OFDMA
                                      // transmitted only on one 20 MHz channel
-    double rxPowerOfdma = rxPower;
+    auto rxPowerOfdma = rxPower;
     if (m_channelWidth <= 40)
     {
         rxPowerOfdma = (m_channelWidth == 20)
@@ -4635,9 +4630,9 @@
                         this,
                         "Measure power for reception of HE TB PPDU on both RUs");
     rxPower = DbmToW(19); // 16+1 dBm at STAs and +2 at AP (no loss since all devices are colocated)
-    double rxPowerNonOfdma = (m_channelWidth >= 40)
-                                 ? rxPower
-                                 : rxPower * 2; // both STAs transmit over the same 20 MHz channel
+    const auto rxPowerNonOfdma =
+        (m_channelWidth >= 40) ? rxPower
+                               : rxPower * 2; // both STAs transmit over the same 20 MHz channel
     SchedulePowerMeasurementChecks(delay, rxPowerNonOfdma, rxPowerNonOfdma, rxPower, rxPower);
     ScheduleTest(delay,
                  true,
@@ -4883,24 +4878,24 @@
 {
     WifiConstPsduMap psdus;
 
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_TB,
-                                         1600,
-                                         1,
-                                         1,
-                                         0,
-                                         DEFAULT_CHANNEL_WIDTH,
-                                         false,
-                                         false,
-                                         true);
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_TB,
+                          NanoSeconds(1600),
+                          1,
+                          1,
+                          0,
+                          DEFAULT_CHANNEL_WIDTH,
+                          false,
+                          false,
+                          true};
 
     HeRu::RuSpec ru(HeRu::RU_106_TONE, index, false);
     txVector.SetRu(ru, txStaId);
     txVector.SetMode(HePhy::GetHeMcs7(), txStaId);
     txVector.SetNss(1, txStaId);
 
-    Ptr<Packet> pkt = Create<Packet>(payloadSize);
+    auto pkt = Create<Packet>(payloadSize);
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
     hdr.SetQosTid(0);
@@ -4909,7 +4904,7 @@
     addr << "00:00:00:00:00:0" << txStaId;
     hdr.SetAddr2(Mac48Address(addr.str().c_str()));
     hdr.SetSequenceNumber(1);
-    Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
+    auto psdu = Create<WifiPsdu>(pkt, hdr);
     psdus.insert(std::make_pair(txStaId, psdu));
 
     Ptr<OfdmaSpectrumWifiPhy> phy;
@@ -5095,11 +5090,12 @@
     m_phyAp->AddChannel(spectrumChannel);
     m_phyAp->ConfigureStandard(WIFI_STANDARD_80211ax);
     m_phyAp->AssignStreams(streamNumber);
-    auto channelNum = std::get<0>(*WifiPhyOperatingChannel::FindFirst(0,
-                                                                      DEFAULT_FREQUENCY,
-                                                                      DEFAULT_CHANNEL_WIDTH,
-                                                                      WIFI_STANDARD_80211ax,
-                                                                      WIFI_PHY_BAND_5GHZ));
+    auto channelNum = WifiPhyOperatingChannel::FindFirst(0,
+                                                         DEFAULT_FREQUENCY,
+                                                         DEFAULT_CHANNEL_WIDTH,
+                                                         WIFI_STANDARD_80211ax,
+                                                         WIFI_PHY_BAND_5GHZ)
+                          ->number;
 
     m_phyAp->SetOperatingChannel(
         WifiPhy::ChannelTuple{channelNum, DEFAULT_CHANNEL_WIDTH, WIFI_PHY_BAND_5GHZ, 0});
@@ -5181,17 +5177,17 @@
 void
 TestPhyPaddingExclusion::SetTrigVector(Time ppduDuration)
 {
-    WifiTxVector trigVector(HePhy::GetHeMcs7(),
+    WifiTxVector trigVector{HePhy::GetHeMcs7(),
                             0,
                             WIFI_PREAMBLE_HE_TB,
-                            1600,
+                            NanoSeconds(1600),
                             1,
                             1,
                             0,
                             DEFAULT_CHANNEL_WIDTH,
                             false,
                             false,
-                            true);
+                            true};
     trigVector.SetRu(HeRu::RuSpec(HeRu::RU_106_TONE, 1, false), 1);
     trigVector.SetMode(HePhy::GetHeMcs7(), 1);
     trigVector.SetNss(1, 1);
@@ -5290,7 +5286,7 @@
 
     Ptr<SpectrumModel> SpectrumInterferenceRu1 = Create<SpectrumModel>(bands);
     Ptr<SpectrumValue> interferencePsdRu1 = Create<SpectrumValue>(SpectrumInterferenceRu1);
-    double interferencePower = 0.1; // watts
+    Watt_u interferencePower{0.1};
     *interferencePsdRu1 = interferencePower / ((DEFAULT_CHANNEL_WIDTH / 2) * 20e6);
 
     Simulator::Schedule(Seconds(2.0) + MicroSeconds(50) + expectedPpduDuration,
@@ -5395,18 +5391,18 @@
 
     Ptr<SpectrumWifiPhy> m_phyAp; ///< PHY of AP
 
-    double m_txPowerAp;      ///< transmit power (in dBm) of AP
-    double m_txPowerStart;   ///< minimum transmission power (in dBm) for STAs
-    double m_txPowerEnd;     ///< maximum transmission power (in dBm) for STAs
+    dBm_u m_txPowerAp;       ///< transmit power of AP
+    dBm_u m_txPowerStart;    ///< minimum transmission power for STAs
+    dBm_u m_txPowerEnd;      ///< maximum transmission power for STAs
     uint8_t m_txPowerLevels; ///< number of transmission power levels for STAs
 
-    double m_requestedRssiSta1; ///< requested RSSI (in dBm) from STA 1 at AP for HE TB PPDUs
-    double m_requestedRssiSta2; ///< requested RSSI (in dBm) from STA 2 at AP for HE TB PPDUs
+    dBm_u m_requestedRssiSta1; ///< requested RSSI from STA 1 at AP for HE TB PPDUs
+    dBm_u m_requestedRssiSta2; ///< requested RSSI from STA 2 at AP for HE TB PPDUs
 
-    double m_rssiSta1; ///< expected RSSI (in dBm) from STA 1 at AP for HE TB PPDUs
-    double m_rssiSta2; ///< expected RSSI (in dBm) from STA 2 at AP for HE TB PPDUs
+    dBm_u m_rssiSta1; ///< expected RSSI from STA 1 at AP for HE TB PPDUs
+    dBm_u m_rssiSta2; ///< expected RSSI from STA 2 at AP for HE TB PPDUs
 
-    double m_tol; ///< tolerance (in dB) between received and expected RSSIs
+    dB_u m_tol; ///< tolerance between received and expected RSSIs
 };
 
 TestUlOfdmaPowerControl::TestUlOfdmaPowerControl()
@@ -5451,7 +5447,7 @@
     muBar.SetMoreTF(true);
     muBar.SetCsRequired(true);
     muBar.SetUlBandwidth(DEFAULT_CHANNEL_WIDTH);
-    muBar.SetGiAndLtfType(1600, 2);
+    muBar.SetGiAndLtfType(NanoSeconds(1600), 2);
     muBar.SetApTxPower(static_cast<int8_t>(m_txPowerAp));
     muBar.SetUlSpatialReuse(60500);
 
@@ -5490,33 +5486,33 @@
         ++index;
     }
 
-    WifiTxVector tbTxVector = muBar.GetHeTbTxVector(staIds.front());
+    WifiTxVector tbTxVector{muBar.GetHeTbTxVector(staIds.front())};
     muBar.SetUlLength(HePhy::ConvertHeTbPpduDurationToLSigLength(MicroSeconds(128),
                                                                  tbTxVector,
                                                                  WIFI_PHY_BAND_5GHZ)
                           .first);
 
     WifiConstPsduMap psdus;
-    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
-                                         0,
-                                         WIFI_PREAMBLE_HE_SU,
-                                         800,
-                                         1,
-                                         1,
-                                         0,
-                                         DEFAULT_CHANNEL_WIDTH,
-                                         false,
-                                         false,
-                                         false,
-                                         m_bssColor);
+    WifiTxVector txVector{HePhy::GetHeMcs7(),
+                          0,
+                          WIFI_PREAMBLE_HE_SU,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          DEFAULT_CHANNEL_WIDTH,
+                          false,
+                          false,
+                          false,
+                          m_bssColor};
 
-    Ptr<Packet> bar = Create<Packet>();
+    auto bar = Create<Packet>();
     bar->AddHeader(muBar);
 
-    Mac48Address receiver = Mac48Address::GetBroadcast();
+    auto receiver = Mac48Address::GetBroadcast();
     if (staIds.size() == 1)
     {
-        uint16_t aidSta1 = DynamicCast<StaWifiMac>(m_sta1Dev->GetMac())->GetAssociationId();
+        const auto aidSta1 = DynamicCast<StaWifiMac>(m_sta1Dev->GetMac())->GetAssociationId();
         if (staIds.front() == aidSta1)
         {
             receiver = Mac48Address::ConvertFrom(m_sta1Dev->GetAddress());
@@ -5538,10 +5534,10 @@
     hdr.SetDsFrom();
     hdr.SetNoRetry();
     hdr.SetNoMoreFragments();
-    Ptr<WifiPsdu> psdu = Create<WifiPsdu>(bar, hdr);
+    auto psdu = Create<WifiPsdu>(bar, hdr);
 
-    Time nav = m_apDev->GetPhy()->GetSifs();
-    uint16_t staId = staIds.front(); // either will do
+    auto nav = m_apDev->GetPhy()->GetSifs();
+    const auto staId = staIds.front(); // either will do
     nav += m_phyAp->CalculateTxDuration(GetBlockAckSize(BlockAckType::COMPRESSED),
                                         tbTxVector,
                                         DEFAULT_WIFI_BAND,
@@ -5559,9 +5555,9 @@
                                                std::vector<bool> /*statusPerMpdu*/)
 {
     NS_TEST_ASSERT_MSG_EQ(txVector.GetPreambleType(), WIFI_PREAMBLE_HE_TB, "HE TB PPDU expected");
-    double rssi = rxSignalInfo.rssi;
+    const auto rssi = rxSignalInfo.rssi;
     NS_ASSERT(psdu->GetNMpdus() == 1);
-    WifiMacHeader hdr = psdu->GetHeader(0);
+    const auto& hdr = psdu->GetHeader(0);
     NS_TEST_ASSERT_MSG_EQ(hdr.GetType(), WIFI_MAC_CTL_BACKRESP, "Block ACK expected");
     if (hdr.GetAddr2() == m_sta1Dev->GetAddress())
     {
@@ -5598,15 +5594,14 @@
 void
 TestUlOfdmaPowerControl::DoSetup()
 {
-    Ptr<Node> apNode = CreateObject<Node>();
+    auto apNode = CreateObject<Node>();
     NodeContainer staNodes;
     staNodes.Create(2);
 
-    Ptr<MultiModelSpectrumChannel> spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
-    Ptr<MatrixPropagationLossModel> lossModel = CreateObject<MatrixPropagationLossModel>();
+    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+    auto lossModel = CreateObject<MatrixPropagationLossModel>();
     spectrumChannel->AddPropagationLossModel(lossModel);
-    Ptr<ConstantSpeedPropagationDelayModel> delayModel =
-        CreateObject<ConstantSpeedPropagationDelayModel>();
+    auto delayModel = CreateObject<ConstantSpeedPropagationDelayModel>();
     spectrumChannel->SetPropagationDelayModel(delayModel);
 
     SpectrumWifiPhyHelper spectrumPhy;
@@ -5624,8 +5619,8 @@
 
     WifiMacHelper mac;
     mac.SetType("ns3::StaWifiMac");
-    NetDeviceContainer staDevs = wifi.Install(spectrumPhy, mac, staNodes);
-    wifi.AssignStreams(staDevs, 0);
+    auto staDevs = wifi.Install(spectrumPhy, mac, staNodes);
+    WifiHelper::AssignStreams(staDevs, 0);
     m_sta1Dev = DynamicCast<WifiNetDevice>(staDevs.Get(0));
     NS_ASSERT(m_sta1Dev);
     m_sta2Dev = DynamicCast<WifiNetDevice>(staDevs.Get(1));
@@ -5649,7 +5644,7 @@
 
     MobilityHelper mobility;
     mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
-    Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
+    auto positionAlloc = CreateObject<ListPositionAllocator>();
     positionAlloc->Add(Vector(0.0, 0.0, 0.0));
     positionAlloc->Add(Vector(1.0, 0.0, 0.0)); // put close enough in order to use MCS
     positionAlloc->Add(
@@ -5686,8 +5681,8 @@
     RngSeedManager::SetRun(1);
     int64_t streamNumber = 0;
 
-    Ptr<WifiPhy> phySta1 = m_sta1Dev->GetPhy();
-    Ptr<WifiPhy> phySta2 = m_sta2Dev->GetPhy();
+    auto phySta1 = m_sta1Dev->GetPhy();
+    auto phySta2 = m_sta2Dev->GetPhy();
 
     m_phyAp->AssignStreams(streamNumber);
     phySta1->AssignStreams(streamNumber);
@@ -5705,7 +5700,7 @@
     phySta2->SetAttribute("TxPowerEnd", DoubleValue(m_txPowerEnd));
     phySta2->SetAttribute("TxPowerLevels", UintegerValue(m_txPowerLevels));
 
-    Time relativeStart = MilliSeconds(0);
+    Time relativeStart{};
     if (setupBa)
     {
         // Set up BA for each station once the association phase has ended
@@ -5722,7 +5717,7 @@
     }
     else
     {
-        Ptr<ApWifiMac> apMac = DynamicCast<ApWifiMac>(m_apDev->GetMac());
+        auto apMac = DynamicCast<ApWifiMac>(m_apDev->GetMac());
         NS_ASSERT(apMac);
         apMac->SetAttribute("BeaconGeneration", BooleanValue(false));
     }
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-phy-reception-test.cc ns-3.43/src/wifi/test/wifi-phy-reception-test.cc
--- ns-3.42/src/wifi/test/wifi-phy-reception-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-phy-reception-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -59,10 +48,9 @@
 NS_LOG_COMPONENT_DEFINE("WifiPhyReceptionTest");
 
 static const uint8_t CHANNEL_NUMBER = 36;
-static const uint32_t FREQUENCY = 5180;   // MHz
-static const uint16_t CHANNEL_WIDTH = 20; // MHz
-static const uint16_t GUARD_WIDTH =
-    CHANNEL_WIDTH; // MHz (expanded to channel width to model spectrum mask)
+static const MHz_u FREQUENCY = 5180;
+static const MHz_u CHANNEL_WIDTH = 20;
+static const MHz_u GUARD_WIDTH = CHANNEL_WIDTH; // expanded to channel width to model spectrum mask
 
 /**
  * \ingroup wifi-test
@@ -90,11 +78,11 @@
 
     /**
      * Send packet function
-     * \param rxPowerDbm the transmit power in dBm
+     * \param rxPower the transmit power
      * \param packetSize the size of the packet in bytes
      * \param mcs the MCS to transmit the packet
      */
-    void SendPacket(double rxPowerDbm, uint32_t packetSize, uint8_t mcs);
+    void SendPacket(dBm_u rxPower, uint32_t packetSize, uint8_t mcs);
 
     /**
      * Schedule now to check  the PHY state
@@ -117,10 +105,17 @@
 }
 
 void
-WifiPhyReceptionTest::SendPacket(double rxPowerDbm, uint32_t packetSize, uint8_t mcs)
+WifiPhyReceptionTest::SendPacket(dBm_u rxPower, uint32_t packetSize, uint8_t mcs)
 {
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs(mcs), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, false);
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs(mcs),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         20,
+                                         false);
 
     Ptr<Packet> pkt = Create<Packet>(packetSize);
     WifiMacHeader hdr;
@@ -137,7 +132,7 @@
     Ptr<SpectrumValue> txPowerSpectrum =
         WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(FREQUENCY,
                                                                     CHANNEL_WIDTH,
-                                                                    DbmToW(rxPowerDbm),
+                                                                    DbmToW(rxPower),
                                                                     GUARD_WIDTH);
 
     Ptr<WifiSpectrumSignalParameters> txParams = Create<WifiSpectrumSignalParameters>();
@@ -304,7 +299,7 @@
     m_phy->AssignStreams(streamNumber);
 
     // RX power > CCA-ED > CCA-PD
-    double rxPowerDbm = -50;
+    dBm_u rxPower = -50;
 
     // CASE 1: send one packet and check PHY state:
     // All reception stages should succeed and PHY state should be RX for the duration of the packet
@@ -313,7 +308,7 @@
     Simulator::Schedule(Seconds(1.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -361,13 +356,13 @@
     Simulator::Schedule(Seconds(2.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(2.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, no preamble is successfully detected and STA PHY STATE should move from IDLE to
@@ -407,13 +402,13 @@
     Simulator::Schedule(Seconds(3.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(3.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 3,
+                        rxPower - 3,
                         1000,
                         7);
     // At 4us, no preamble is successfully detected, hence STA PHY STATE should move from IDLE to
@@ -452,13 +447,13 @@
     Simulator::Schedule(Seconds(4.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(4.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 6,
+                        rxPower - 6,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -516,13 +511,13 @@
     Simulator::Schedule(Seconds(5.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(5.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 3,
+                        rxPower + static_cast<dB_u>(3.0),
                         1000,
                         7);
     // At 6us (hence 4us after the last signal is received), no preamble is successfully detected,
@@ -554,7 +549,7 @@
                         1);
 
     // CCA-PD < RX power < CCA-ED
-    rxPowerDbm = -70;
+    rxPower = -70;
 
     // CASE 6: send one packet and check PHY state:
     // All reception stages should succeed and PHY state should be RX for the duration of the packet
@@ -563,7 +558,7 @@
     Simulator::Schedule(Seconds(6.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -611,13 +606,13 @@
     Simulator::Schedule(Seconds(7.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(7.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, STA PHY STATE should stay IDLE
@@ -643,13 +638,13 @@
     Simulator::Schedule(Seconds(8.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(8.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 3,
+                        rxPower - 3,
                         1000,
                         7);
     // At 4us, STA PHY STATE should stay IDLE
@@ -673,13 +668,13 @@
     Simulator::Schedule(Seconds(9.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(9.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 6,
+                        rxPower - 6,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -727,13 +722,13 @@
     Simulator::Schedule(Seconds(10.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(10.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 3,
+                        rxPower + static_cast<dB_u>(3.0),
                         1000,
                         7);
     // At 4us, STA PHY STATE should stay IDLE
@@ -753,12 +748,12 @@
     // detection (-82 dBm) and check PHY state: preamble detection should succeed and PHY state
     // should move to RX.
 
-    rxPowerDbm = -81;
+    rxPower = -81;
 
     Simulator::Schedule(Seconds(11.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -792,7 +787,7 @@
                         WifiPhyState::IDLE);
 
     // RX power < CCA-PD < CCA-ED
-    rxPowerDbm = -83;
+    rxPower = -83;
 
     // CASE 12: send one packet with a power slightly below the minimum RSSI needed for the preamble
     // detection (-82 dBm) and check PHY state: preamble detection should fail and PHY should be
@@ -801,7 +796,7 @@
     Simulator::Schedule(Seconds(12.0),
                         &TestThresholdPreambleDetectionWithoutFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, STA PHY state should be IDLE
@@ -924,7 +919,7 @@
     m_phy->AssignStreams(streamNumber);
 
     // RX power > CCA-ED > CCA-PD
-    double rxPowerDbm = -50;
+    dBm_u rxPower = -50;
 
     // CASE 1: send one packet and check PHY state:
     // All reception stages should succeed and PHY state should be RX for the duration of the packet
@@ -933,7 +928,7 @@
     Simulator::Schedule(Seconds(1.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -981,13 +976,13 @@
     Simulator::Schedule(Seconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(2.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, no preamble is successfully detected, hence STA PHY STATE should move from IDLE to
@@ -1027,13 +1022,13 @@
     Simulator::Schedule(Seconds(3.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(3.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 3,
+                        rxPower - 3,
                         1000,
                         7);
     // At 4us, no preamble is successfully detected, hence STA PHY STATE should move from IDLE to
@@ -1072,13 +1067,13 @@
     Simulator::Schedule(Seconds(4.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(4.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 6,
+                        rxPower - 6,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -1136,13 +1131,13 @@
     Simulator::Schedule(Seconds(5.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(5.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 3,
+                        rxPower + static_cast<dB_u>(3.0),
                         1000,
                         7);
     // At 4us, STA PHY STATE should stay IDLE
@@ -1186,13 +1181,13 @@
     Simulator::Schedule(Seconds(6.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(6.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1000,
                         7);
     // At 4us, STA PHY STATE should stay IDLE
@@ -1246,13 +1241,13 @@
     Simulator::Schedule(Seconds(7.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(7.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, no preamble is successfully detected, hence STA PHY STATE should move from IDLE to
@@ -1292,13 +1287,13 @@
     Simulator::Schedule(Seconds(8.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(8.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 3,
+                        rxPower - 3,
                         1000,
                         7);
     // At 4us, no preamble is successfully detected, hence STA PHY STATE should move from IDLE to
@@ -1336,13 +1331,13 @@
     Simulator::Schedule(Seconds(9.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(9.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 6,
+                        rxPower - 6,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -1390,13 +1385,13 @@
     Simulator::Schedule(Seconds(10.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(10.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 3,
+                        rxPower + static_cast<dB_u>(3.0),
                         1000,
                         7);
     // At 4us, no preamble is successfully detected, hence STA PHY STATE should move from IDLE to
@@ -1435,13 +1430,13 @@
     Simulator::Schedule(Seconds(11.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(11.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -1481,7 +1476,7 @@
                         4);
 
     // CCA-PD < RX power < CCA-ED
-    rxPowerDbm = -70;
+    rxPower = -70;
 
     // CASE 12: send one packet and check PHY state:
     // All reception stages should succeed and PHY state should be RX for the duration of the packet
@@ -1490,7 +1485,7 @@
     Simulator::Schedule(Seconds(12.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -1538,13 +1533,13 @@
     Simulator::Schedule(Seconds(13.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(13.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 4us, STA PHY STATE should stay IDLE
@@ -1570,13 +1565,13 @@
     Simulator::Schedule(Seconds(14.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(14.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 3,
+                        rxPower - 3,
                         1000,
                         7);
     // At 4us, STA PHY STATE should stay IDLE
@@ -1600,13 +1595,13 @@
     Simulator::Schedule(Seconds(15.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(15.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm - 6,
+                        rxPower - 6,
                         1000,
                         7);
     // At 4us, preamble should be successfully detected and STA PHY STATE should move from IDLE to
@@ -1656,13 +1651,13 @@
     Simulator::Schedule(Seconds(16.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(16.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 3,
+                        rxPower + static_cast<dB_u>(3.0),
                         1000,
                         7);
     // At 4us, STA PHY STATE should stay IDLE
@@ -1692,13 +1687,13 @@
     Simulator::Schedule(Seconds(17.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(17.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1000,
                         7);
     // At 4us, STA PHY STATE should stay IDLE
@@ -1743,19 +1738,19 @@
                         2,
                         6);
 
-    rxPowerDbm = -50;
+    rxPower = -50;
     // CASE 18: send two packets with second one 50 dB higher within the 4us window
 
     Simulator::Schedule(Seconds(18.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(18.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 50,
+                        rxPower + static_cast<dB_u>(50.0),
                         1000,
                         7);
     // The second packet should be received successfully
@@ -1770,13 +1765,13 @@
     Simulator::Schedule(Seconds(19.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(19.0) + MicroSeconds(2.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 10,
+                        rxPower + static_cast<dB_u>(10.0),
                         1000,
                         7);
     // The second packet should be captured, but not decoded since SNR to low for used MCS
@@ -1791,13 +1786,13 @@
     Simulator::Schedule(Seconds(20.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(20.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 50,
+                        rxPower + static_cast<dB_u>(50.0),
                         1000,
                         7);
     // The second packet should be received successfully, same as in CASE 13
@@ -1812,13 +1807,13 @@
     Simulator::Schedule(Seconds(21.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     Simulator::Schedule(Seconds(21.0),
                         &TestThresholdPreambleDetectionWithFrameCapture::SendPacket,
                         this,
-                        rxPowerDbm + 10,
+                        rxPower + static_cast<dB_u>(10.0),
                         1000,
                         7);
     // The second packet should be captured, but not decoded since SNR to low for used MCS, same as
@@ -1989,7 +1984,7 @@
     RngSeedManager::SetSeed(1);
     RngSeedManager::SetRun(1);
     int64_t streamNumber = 2;
-    double rxPowerDbm = -30;
+    dBm_u rxPower = -30;
     m_phy->AssignStreams(streamNumber);
 
     // CASE 1: send two packets with same power within the capture window:
@@ -1998,13 +1993,13 @@
     Simulator::Schedule(Seconds(1.0),
                         &TestSimpleFrameCaptureModel::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         0);
     Simulator::Schedule(Seconds(1.0) + MicroSeconds(10.0),
                         &TestSimpleFrameCaptureModel::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1500,
                         0);
     Simulator::Schedule(Seconds(1.1), &TestSimpleFrameCaptureModel::Expect1500BPacketDropped, this);
@@ -2016,13 +2011,13 @@
     Simulator::Schedule(Seconds(2.0),
                         &TestSimpleFrameCaptureModel::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         0);
     Simulator::Schedule(Seconds(2.0) + MicroSeconds(10.0),
                         &TestSimpleFrameCaptureModel::SendPacket,
                         this,
-                        rxPowerDbm - 6,
+                        rxPower - 6,
                         1500,
                         0);
     Simulator::Schedule(Seconds(2.1),
@@ -2037,13 +2032,13 @@
     Simulator::Schedule(Seconds(3.0),
                         &TestSimpleFrameCaptureModel::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         0);
     Simulator::Schedule(Seconds(3.0) + MicroSeconds(10.0),
                         &TestSimpleFrameCaptureModel::SendPacket,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1500,
                         0);
     Simulator::Schedule(Seconds(3.1), &TestSimpleFrameCaptureModel::Expect1000BPacketDropped, this);
@@ -2059,13 +2054,13 @@
     Simulator::Schedule(Seconds(4.0),
                         &TestSimpleFrameCaptureModel::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         0);
     Simulator::Schedule(Seconds(4.0) + MicroSeconds(25.0),
                         &TestSimpleFrameCaptureModel::SendPacket,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1500,
                         0);
     Simulator::Schedule(Seconds(4.1), &TestSimpleFrameCaptureModel::Expect1500BPacketDropped, this);
@@ -2104,22 +2099,17 @@
     m_phy->AssignStreams(streamNumber);
 
     // RX power > CCA-ED
-    double rxPowerDbm = -50;
+    dBm_u rxPower = -50;
 
     // CASE 1: send one packet followed by a second one with same power between the end of the 4us
     // preamble detection window and the start of L-SIG of the first packet: reception should be
     // aborted since L-SIG cannot be decoded (SNR too low).
 
-    Simulator::Schedule(Seconds(1.0),
-                        &TestPhyHeadersReception::SendPacket,
-                        this,
-                        rxPowerDbm,
-                        1000,
-                        7);
+    Simulator::Schedule(Seconds(1.0), &TestPhyHeadersReception::SendPacket, this, rxPower, 1000, 7);
     Simulator::Schedule(Seconds(1.0) + MicroSeconds(10),
                         &TestPhyHeadersReception::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 10 us, STA PHY STATE should be CCA_BUSY.
@@ -2148,16 +2138,11 @@
     // preamble detection window and the start of L-SIG of the first packet: reception should not be
     // aborted since L-SIG can be decoded (SNR high enough).
 
-    Simulator::Schedule(Seconds(2.0),
-                        &TestPhyHeadersReception::SendPacket,
-                        this,
-                        rxPowerDbm,
-                        1000,
-                        7);
+    Simulator::Schedule(Seconds(2.0), &TestPhyHeadersReception::SendPacket, this, rxPower, 1000, 7);
     Simulator::Schedule(Seconds(2.0) + MicroSeconds(10),
                         &TestPhyHeadersReception::SendPacket,
                         this,
-                        rxPowerDbm - 3,
+                        rxPower - 3,
                         1000,
                         7);
     // At 10 us, STA PHY STATE should be CCA_BUSY.
@@ -2199,16 +2184,11 @@
     // the start of HE-SIG of the first packet: PHY header reception should not succeed but PHY
     // should stay in RX state for the duration estimated from L-SIG.
 
-    Simulator::Schedule(Seconds(3.0),
-                        &TestPhyHeadersReception::SendPacket,
-                        this,
-                        rxPowerDbm,
-                        1000,
-                        7);
+    Simulator::Schedule(Seconds(3.0), &TestPhyHeadersReception::SendPacket, this, rxPower, 1000, 7);
     Simulator::Schedule(Seconds(3.0) + MicroSeconds(25),
                         &TestPhyHeadersReception::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 44us (end of PHY header), STA PHY STATE should not have moved to RX (HE-SIG failed) and be
@@ -2240,16 +2220,11 @@
     // CASE 4: send one packet followed by a second one 3 dB weaker between the end of L-SIG and the
     // start of HE-SIG of the first packet: PHY header reception should succeed.
 
-    Simulator::Schedule(Seconds(4.0),
-                        &TestPhyHeadersReception::SendPacket,
-                        this,
-                        rxPowerDbm,
-                        1000,
-                        7);
+    Simulator::Schedule(Seconds(4.0), &TestPhyHeadersReception::SendPacket, this, rxPower, 1000, 7);
     Simulator::Schedule(Seconds(4.0) + MicroSeconds(25),
                         &TestPhyHeadersReception::SendPacket,
                         this,
-                        rxPowerDbm - 3,
+                        rxPower - 3,
                         1000,
                         7);
     // At 10 us, STA PHY STATE should be CCA_BUSY.
@@ -2288,22 +2263,17 @@
                         WifiPhyState::IDLE);
 
     // RX power < CCA-ED
-    rxPowerDbm = -70;
+    rxPower = -70;
 
     // CASE 5: send one packet followed by a second one with same power between the end of the 4us
     // preamble detection window and the start of L-SIG of the first packet: reception should be
     // aborted since L-SIG cannot be decoded (SNR too low).
 
-    Simulator::Schedule(Seconds(5.0),
-                        &TestPhyHeadersReception::SendPacket,
-                        this,
-                        rxPowerDbm,
-                        1000,
-                        7);
+    Simulator::Schedule(Seconds(5.0), &TestPhyHeadersReception::SendPacket, this, rxPower, 1000, 7);
     Simulator::Schedule(Seconds(5.0) + MicroSeconds(10),
                         &TestPhyHeadersReception::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 10 us, STA PHY STATE should be CCA_BUSY.
@@ -2322,16 +2292,11 @@
     // preamble detection window and the start of L-SIG of the first packet: reception should not be
     // aborted since L-SIG can be decoded (SNR high enough).
 
-    Simulator::Schedule(Seconds(6.0),
-                        &TestPhyHeadersReception::SendPacket,
-                        this,
-                        rxPowerDbm,
-                        1000,
-                        7);
+    Simulator::Schedule(Seconds(6.0), &TestPhyHeadersReception::SendPacket, this, rxPower, 1000, 7);
     Simulator::Schedule(Seconds(6.0) + MicroSeconds(10),
                         &TestPhyHeadersReception::SendPacket,
                         this,
-                        rxPowerDbm - 3,
+                        rxPower - 3,
                         1000,
                         7);
     // At 10 us, STA PHY STATE should be CCA_BUSY.
@@ -2370,16 +2335,11 @@
     // the start of HE-SIG of the first packet: PHY header reception should not succeed but PHY
     // should stay in RX state for the duration estimated from L-SIG.
 
-    Simulator::Schedule(Seconds(7.0),
-                        &TestPhyHeadersReception::SendPacket,
-                        this,
-                        rxPowerDbm,
-                        1000,
-                        7);
+    Simulator::Schedule(Seconds(7.0), &TestPhyHeadersReception::SendPacket, this, rxPower, 1000, 7);
     Simulator::Schedule(Seconds(7.0) + MicroSeconds(25),
                         &TestPhyHeadersReception::SendPacket,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000,
                         7);
     // At 10 us, STA PHY STATE should be CCA_BUSY.
@@ -2409,16 +2369,11 @@
     // CASE 8: send one packet followed by a second one 3 dB weaker between the end of L-SIG and the
     // start of HE-SIG of the first packet: PHY header reception should succeed.
 
-    Simulator::Schedule(Seconds(8.0),
-                        &TestPhyHeadersReception::SendPacket,
-                        this,
-                        rxPowerDbm,
-                        1000,
-                        7);
+    Simulator::Schedule(Seconds(8.0), &TestPhyHeadersReception::SendPacket, this, rxPower, 1000, 7);
     Simulator::Schedule(Seconds(8.0) + MicroSeconds(25),
                         &TestPhyHeadersReception::SendPacket,
                         this,
-                        rxPowerDbm - 3,
+                        rxPower - 3,
                         1000,
                         7);
     // At 10 us, STA PHY STATE should be CCA_BUSY.
@@ -2513,11 +2468,11 @@
     /**
      * Send A-MPDU with 3 MPDUs of different size (i-th MSDU will have 100 bytes more than
      * (i-1)-th).
-     * \param rxPowerDbm the transmit power in dBm
+     * \param rxPower the transmit power
      * \param referencePacketSize the reference size of the packets in bytes (i-th MSDU will have
      * 100 bytes more than (i-1)-th)
      */
-    void SendAmpduWithThreeMpdus(double rxPowerDbm, uint32_t referencePacketSize);
+    void SendAmpduWithThreeMpdus(dBm_u rxPower, uint32_t referencePacketSize);
 
     /**
      * Check the RX success bitmap for A-MPDU 1
@@ -2771,10 +2726,17 @@
 }
 
 void
-TestAmpduReception::SendAmpduWithThreeMpdus(double rxPowerDbm, uint32_t referencePacketSize)
+TestAmpduReception::SendAmpduWithThreeMpdus(dBm_u rxPower, uint32_t referencePacketSize)
 {
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, true);
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         20,
+                                         true);
 
     WifiMacHeader hdr;
     hdr.SetType(WIFI_MAC_QOSDATA);
@@ -2796,7 +2758,7 @@
     Ptr<SpectrumValue> txPowerSpectrum =
         WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(FREQUENCY,
                                                                     CHANNEL_WIDTH,
-                                                                    DbmToW(rxPowerDbm),
+                                                                    DbmToW(rxPower),
                                                                     GUARD_WIDTH);
 
     Ptr<WifiSpectrumSignalParameters> txParams = Create<WifiSpectrumSignalParameters>();
@@ -2835,7 +2797,7 @@
     RngSeedManager::SetSeed(1);
     RngSeedManager::SetRun(2);
     int64_t streamNumber = 1;
-    double rxPowerDbm = -30;
+    dBm_u rxPower = -30;
     m_phy->AssignStreams(streamNumber);
 
     /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -2848,14 +2810,14 @@
     Simulator::Schedule(Seconds(1.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm - 100,
+                        rxPower - 100,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(1.0) + MicroSeconds(2),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been ignored.
@@ -2898,14 +2860,14 @@
     Simulator::Schedule(Seconds(2.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(2.0) + MicroSeconds(2),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm - 100,
+                        rxPower - 100,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received.
@@ -2948,14 +2910,14 @@
     Simulator::Schedule(Seconds(3.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm - 100,
+                        rxPower - 100,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(3.0) + MicroSeconds(10),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been ignored.
@@ -2998,14 +2960,14 @@
     Simulator::Schedule(Seconds(4.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(4.0) + MicroSeconds(10),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm - 100,
+                        rxPower - 100,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received.
@@ -3048,14 +3010,14 @@
     Simulator::Schedule(Seconds(5.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm - 100,
+                        rxPower - 100,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(5.0) + MicroSeconds(100),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been ignored.
@@ -3098,14 +3060,14 @@
     Simulator::Schedule(Seconds(6.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(6.0) + MicroSeconds(100),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm - 100,
+                        rxPower - 100,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received.
@@ -3147,14 +3109,14 @@
     Simulator::Schedule(Seconds(7.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm - 100,
+                        rxPower - 100,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(7.0) + NanoSeconds(1100000),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been ignored.
@@ -3196,14 +3158,14 @@
     Simulator::Schedule(Seconds(8.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(8.0) + NanoSeconds(1100000),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm - 100,
+                        rxPower - 100,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received.
@@ -3246,14 +3208,14 @@
     Simulator::Schedule(Seconds(9.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(9.0) + MicroSeconds(2),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 3,
+                        rxPower + static_cast<dB_u>(3.0),
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been dropped.
@@ -3296,14 +3258,14 @@
     Simulator::Schedule(Seconds(10.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(10.0) + MicroSeconds(2),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been dropped (preamble detection failed).
@@ -3346,14 +3308,14 @@
     Simulator::Schedule(Seconds(11.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 3,
+                        rxPower + static_cast<dB_u>(3.0),
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(11.0) + MicroSeconds(2),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received with errors.
@@ -3396,14 +3358,14 @@
     Simulator::Schedule(Seconds(12.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(12.0) + MicroSeconds(10),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 3,
+                        rxPower + static_cast<dB_u>(3.0),
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received with errors (PHY header reception failed and
@@ -3448,14 +3410,14 @@
     Simulator::Schedule(Seconds(13.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(13.0) + MicroSeconds(10),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received with errors (PHY header reception failed and
@@ -3499,14 +3461,14 @@
     Simulator::Schedule(Seconds(14.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 3,
+                        rxPower + static_cast<dB_u>(3.0),
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(14.0) + MicroSeconds(10),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received with errors.
@@ -3549,14 +3511,14 @@
     Simulator::Schedule(Seconds(15.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(15.0) + MicroSeconds(10),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been dropped because PHY reception switched to A-MPDU 2.
@@ -3599,14 +3561,14 @@
     Simulator::Schedule(Seconds(16.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(16.0) + MicroSeconds(10),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been successfully received.
@@ -3649,14 +3611,14 @@
     Simulator::Schedule(Seconds(17.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(17.0) + MicroSeconds(25),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received with errors.
@@ -3700,14 +3662,14 @@
     Simulator::Schedule(Seconds(18.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(18.0) + MicroSeconds(25),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been successfully received.
@@ -3750,14 +3712,14 @@
     Simulator::Schedule(Seconds(19.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(19.0) + MicroSeconds(25),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received with errors.
@@ -3800,14 +3762,14 @@
     Simulator::Schedule(Seconds(20.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(20.0) + MicroSeconds(100),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received with errors.
@@ -3851,14 +3813,14 @@
     Simulator::Schedule(Seconds(21.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm + 6,
+                        rxPower + static_cast<dB_u>(6.0),
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(21.0) + MicroSeconds(100),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been successfully received.
@@ -3901,14 +3863,14 @@
     Simulator::Schedule(Seconds(22.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(22.0) + MicroSeconds(100),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // All MPDUs of A-MPDU 1 should have been received with errors.
@@ -3950,14 +3912,14 @@
     Simulator::Schedule(Seconds(23.0),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1000);
 
     // A-MPDU 2
     Simulator::Schedule(Seconds(23.0) + NanoSeconds(1100000),
                         &TestAmpduReception::SendAmpduWithThreeMpdus,
                         this,
-                        rxPowerDbm,
+                        rxPower,
                         1300);
 
     // The first MPDU of A-MPDU 1 should have been successfully received (no interference).
@@ -4129,7 +4091,7 @@
     }
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(m_apDevices, streamNumber);
+    WifiHelper::AssignStreams(m_apDevices, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -4225,10 +4187,10 @@
     /**
      * Function to create a PPDU
      *
-     * \param centerFreqMhz the center frequency used for the transmission of the PPDU (in MHz)
-     * \param bandwidthMhz the bandwidth used for the transmission of the PPDU (in MHz)
+     * \param centerFreq the center frequency used for the transmission of the PPDU
+     * \param bandwidth the bandwidth used for the transmission of the PPDU
      */
-    void SendPpdu(uint16_t centerFreqMhz, uint16_t bandwidthMhz);
+    void SendPpdu(MHz_u centerFreq, MHz_u bandwidth);
 
     /**
      * Function called upon a PSDU received successfully
@@ -4298,10 +4260,17 @@
 }
 
 void
-TestUnsupportedBandwidthReception::SendPpdu(uint16_t centerFreqMhz, uint16_t bandwidthMhz)
+TestUnsupportedBandwidthReception::SendPpdu(MHz_u centerFreq, MHz_u bandwidth)
 {
-    auto txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, bandwidthMhz, false);
+    auto txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                 0,
+                                 WIFI_PREAMBLE_HE_SU,
+                                 NanoSeconds(800),
+                                 1,
+                                 1,
+                                 0,
+                                 bandwidth,
+                                 false);
 
     auto pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
@@ -4315,11 +4284,10 @@
 
     auto ppdu = Create<HePpdu>(psdu, txVector, m_txPhy->GetOperatingChannel(), txDuration, 0);
 
-    auto txPowerSpectrum =
-        WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(centerFreqMhz,
-                                                                    bandwidthMhz,
-                                                                    DbmToW(-50),
-                                                                    bandwidthMhz);
+    auto txPowerSpectrum = WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(centerFreq,
+                                                                                       bandwidth,
+                                                                                       DbmToW(-50),
+                                                                                       bandwidth);
 
     auto txParams = Create<WifiSpectrumSignalParameters>();
     txParams->psd = txPowerSpectrum;
@@ -4506,27 +4474,27 @@
     /**
      * Function to create a PPDU
      *
-     * \param ppduCenterFreqMhz the center frequency used for the transmission of the PPDU (in MHz)
+     * \param ppduCenterFreq the center frequency used for the transmission of the PPDU
      * \return the created PPDU
      */
-    Ptr<HePpdu> CreatePpdu(uint16_t ppduCenterFreqMhz);
+    Ptr<HePpdu> CreatePpdu(MHz_u ppduCenterFreq);
 
     /**
      * Run one function
      *
      * \param band the PHY band to use
-     * \param phyCenterFreqMhz the operating center frequency of the PHY (in MHz)
+     * \param phyCenterFreq the operating center frequency of the PHY
      * \param p20Index the primary20 index
-     * \param ppduCenterFreqMhz the center frequency used for the transmission of the PPDU (in MHz)
+     * \param ppduCenterFreq the center frequency used for the transmission of the PPDU
      * \param expectedP20Overlap flag whether the primary 20 MHz channel is expected to be fully
      * covered by the bandwidth of the incoming PPDU
      * \param expectedP20Covered flag whether the
      * primary 20 MHz channel is expected to overlap with the bandwidth of the incoming PPDU
      */
     void RunOne(WifiPhyBand band,
-                uint16_t phyCenterFreqMhz,
+                MHz_u phyCenterFreq,
                 uint8_t p20Index,
-                uint16_t ppduCenterFreqMhz,
+                MHz_u ppduCenterFreq,
                 bool expectedP20Overlap,
                 bool expectedP20Covered);
 
@@ -4541,23 +4509,30 @@
 }
 
 Ptr<HePpdu>
-TestPrimary20CoveredByPpdu::CreatePpdu(uint16_t ppduCenterFreqMhz)
+TestPrimary20CoveredByPpdu::CreatePpdu(MHz_u ppduCenterFreq)
 {
-    [[maybe_unused]] auto [channelNumber, centerFreq, channelWidth, type, phyBand] =
-        (*WifiPhyOperatingChannel::FindFirst(0,
-                                             ppduCenterFreqMhz,
-                                             0,
-                                             WIFI_STANDARD_80211ax,
-                                             m_rxPhy->GetPhyBand()));
-    m_txPhy->SetOperatingChannel(WifiPhy::ChannelTuple{channelNumber, channelWidth, phyBand, 0});
-    auto txVector =
-        WifiTxVector(HePhy::GetHeMcs7(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, channelWidth, false);
+    const auto& channelInfo = (*WifiPhyOperatingChannel::FindFirst(0,
+                                                                   ppduCenterFreq,
+                                                                   0,
+                                                                   WIFI_STANDARD_80211ax,
+                                                                   m_rxPhy->GetPhyBand()));
+    m_txPhy->SetOperatingChannel(
+        WifiPhy::ChannelTuple{channelInfo.number, channelInfo.width, channelInfo.band, 0});
+    auto txVector = WifiTxVector(HePhy::GetHeMcs7(),
+                                 0,
+                                 WIFI_PREAMBLE_HE_SU,
+                                 NanoSeconds(800),
+                                 1,
+                                 1,
+                                 0,
+                                 channelInfo.width,
+                                 false);
 
     auto pkt = Create<Packet>(1000);
     WifiMacHeader hdr(WIFI_MAC_QOSDATA);
 
     auto psdu = Create<WifiPsdu>(pkt, hdr);
-    auto txDuration = m_txPhy->CalculateTxDuration(psdu->GetSize(), txVector, phyBand);
+    auto txDuration = m_txPhy->CalculateTxDuration(psdu->GetSize(), txVector, channelInfo.band);
 
     return Create<HePpdu>(psdu, txVector, m_txPhy->GetOperatingChannel(), txDuration, 0);
 }
@@ -4593,22 +4568,22 @@
 
 void
 TestPrimary20CoveredByPpdu::RunOne(WifiPhyBand band,
-                                   uint16_t phyCenterFreqMhz,
+                                   MHz_u phyCenterFreq,
                                    uint8_t p20Index,
-                                   uint16_t ppduCenterFreqMhz,
+                                   MHz_u ppduCenterFreq,
                                    bool expectedP20Overlap,
                                    bool expectedP20Covered)
 {
-    [[maybe_unused]] const auto [channelNumber, centerFreq, channelWidth, type, phyBand] =
-        (*WifiPhyOperatingChannel::FindFirst(0, phyCenterFreqMhz, 0, WIFI_STANDARD_80211ax, band));
+    const auto& channelInfo =
+        (*WifiPhyOperatingChannel::FindFirst(0, phyCenterFreq, 0, WIFI_STANDARD_80211ax, band));
 
     m_rxPhy->SetOperatingChannel(
-        WifiPhy::ChannelTuple{channelNumber, channelWidth, band, p20Index});
+        WifiPhy::ChannelTuple{channelInfo.number, channelInfo.width, channelInfo.band, p20Index});
     auto p20CenterFreq = m_rxPhy->GetOperatingChannel().GetPrimaryChannelCenterFrequency(20);
     auto p20MinFreq = p20CenterFreq - 10;
     auto p20MaxFreq = p20CenterFreq + 10;
 
-    auto ppdu = CreatePpdu(ppduCenterFreqMhz);
+    auto ppdu = CreatePpdu(ppduCenterFreq);
 
     auto p20Overlap = ppdu->DoesOverlapChannel(p20MinFreq, p20MaxFreq);
     NS_TEST_ASSERT_MSG_EQ(p20Overlap,
@@ -4696,7 +4671,7 @@
      * \param channel channel to be used by transmitter
      * \param expectedValue expected number of received packets
      */
-    TestSpectrumChannelWithBandwidthFilter(uint16_t channel, uint16_t expectedValue);
+    TestSpectrumChannelWithBandwidthFilter(uint8_t channel, uint16_t expectedValue);
 
   protected:
     void DoSetup() override;
@@ -4708,7 +4683,7 @@
      *
      * \param signal the arriving signal
      * \param senderNodeId node Id of the sender of the signal
-     * \param rxPower received signal power (dBm)
+     * \param rxPower received signal power
      * \param duration signal duration
      */
     void RxBegin(Ptr<const SpectrumSignalParameters> signal,
@@ -4733,12 +4708,12 @@
     Ptr<SpectrumWifiPhy> m_tx{nullptr}; ///< transmit function
     Ptr<SpectrumWifiPhy> m_rx{nullptr}; ///< receive function
     uint32_t m_countRxBegin{0};         ///< count of receive events
-    uint16_t m_channel{36};             ///< channel for packet transmission
+    uint8_t m_channel{36};              ///< channel for packet transmission
     uint16_t m_expectedValue{0};        ///< expected count of receive events
 };
 
 TestSpectrumChannelWithBandwidthFilter::TestSpectrumChannelWithBandwidthFilter(
-    uint16_t channel,
+    uint8_t channel,
     uint16_t expectedValue)
     : TestCase("Test for early discard of signal in single-model-spectrum-channel::StartTx()"),
       m_channel(channel),
@@ -4749,8 +4724,15 @@
 void
 TestSpectrumChannelWithBandwidthFilter::Send() const
 {
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs7(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, false);
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs7(),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         20,
+                                         false);
 
     Ptr<Packet> pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
@@ -4920,8 +4902,15 @@
 void
 TestPhyDropDueToTx::Send(Ptr<WifiPhy> phy) const
 {
-    const auto txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, false);
+    const auto txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                       0,
+                                       WIFI_PREAMBLE_HE_SU,
+                                       NanoSeconds(800),
+                                       1,
+                                       1,
+                                       0,
+                                       20,
+                                       false);
 
     auto pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-phy-rx-trace-helper-test.cc ns-3.43/src/wifi/test/wifi-phy-rx-trace-helper-test.cc
--- ns-3.42/src/wifi/test/wifi-phy-rx-trace-helper-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-phy-rx-trace-helper-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 #include "ns3/ampdu-tag.h"
 #include "ns3/ap-wifi-mac.h"
@@ -269,8 +258,15 @@
     tx_phy->SetTxPowerStart(txPower);
     tx_phy->SetTxPowerEnd(txPower);
 
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, true);
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         20,
+                                         true);
 
     std::vector<Ptr<WifiMpdu>> mpduList;
 
@@ -302,8 +298,15 @@
     tx_phy->SetTxPowerStart(txPower);
     tx_phy->SetTxPowerEnd(txPower);
 
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, true);
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         20,
+                                         true);
 
     std::vector<Ptr<WifiMpdu>> mpduList;
 
@@ -1129,8 +1132,15 @@
     tx_phy->SetTxPowerStart(txPower);
     tx_phy->SetTxPowerEnd(txPower);
 
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, true);
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         20,
+                                         true);
 
     std::vector<Ptr<WifiMpdu>> mpduList;
 
@@ -1166,7 +1176,7 @@
         WifiTxVector(HePhy::GetHeMcs0(),
                      0,
                      WIFI_PREAMBLE_HE_SU,
-                     800,
+                     NanoSeconds(800),
                      1,
                      1,
                      0,
@@ -1883,8 +1893,15 @@
 {
     propLoss->SetRss(rxPowerDbm);
 
-    WifiTxVector txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, true);
+    WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                         0,
+                                         WIFI_PREAMBLE_HE_SU,
+                                         NanoSeconds(800),
+                                         1,
+                                         1,
+                                         0,
+                                         20,
+                                         true);
 
     std::vector<Ptr<WifiMpdu>> mpduList;
 
@@ -1922,8 +1939,15 @@
 {
     propLoss->SetRss(rxPowerDbm);
 
-    auto txVector =
-        WifiTxVector(HePhy::GetHeMcs0(), 0, WIFI_PREAMBLE_HE_SU, 800, 1, 1, 0, 20, true);
+    auto txVector = WifiTxVector(HePhy::GetHeMcs0(),
+                                 0,
+                                 WIFI_PREAMBLE_HE_SU,
+                                 NanoSeconds(800),
+                                 1,
+                                 1,
+                                 0,
+                                 20,
+                                 true);
 
     std::vector<Ptr<WifiMpdu>> mpduList;
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-phy-thresholds-test.cc ns-3.43/src/wifi/test/wifi-phy-thresholds-test.cc
--- ns-3.42/src/wifi/test/wifi-phy-thresholds-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-phy-thresholds-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2018
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Sébastien Deronne <sebastien.deronne@gmail.com>
  */
@@ -40,8 +29,8 @@
 NS_LOG_COMPONENT_DEFINE("WifiPhyThresholdsTest");
 
 static const uint8_t CHANNEL_NUMBER = 36;
-static const uint32_t FREQUENCY = 5180;   // MHz
-static const uint16_t CHANNEL_WIDTH = 20; // MHz
+static const MHz_u FREQUENCY = 5180;
+static const MHz_u CHANNEL_WIDTH = 20;
 
 /**
  * \ingroup wifi-test
@@ -58,32 +47,28 @@
      * \param test_name the test name
      */
     WifiPhyThresholdsTest(std::string test_name);
-    /**
-     * Destructor
-     */
-    ~WifiPhyThresholdsTest() override;
 
   protected:
     /**
      * Make wifi signal function
-     * \param txPowerWatts the transmit power in watts
+     * \param txPower the transmit power
      * \param channel the operating channel of the PHY used for the transmission
      * \returns Ptr<SpectrumSignalParameters>
      */
-    virtual Ptr<SpectrumSignalParameters> MakeWifiSignal(double txPowerWatts,
+    virtual Ptr<SpectrumSignalParameters> MakeWifiSignal(Watt_u txPower,
                                                          const WifiPhyOperatingChannel& channel);
     /**
      * Make foreign signal function
-     * \param txPowerWatts the transmit power in watts
+     * \param txPower the transmit power
      * \returns Ptr<SpectrumSignalParameters>
      */
-    virtual Ptr<SpectrumSignalParameters> MakeForeignSignal(double txPowerWatts);
+    virtual Ptr<SpectrumSignalParameters> MakeForeignSignal(Watt_u txPower);
     /**
      * Send signal function
-     * \param txPowerWatts the transmit power in watts
+     * \param txPower the transmit power
      * \param wifiSignal whether the signal is a wifi signal or not
      */
-    virtual void SendSignal(double txPowerWatts, bool wifiSignal);
+    virtual void SendSignal(Watt_u txPower, bool wifiSignal);
     /**
      * PHY receive success callback function
      * \param psdu the PSDU
@@ -140,41 +125,37 @@
 {
 }
 
-WifiPhyThresholdsTest::~WifiPhyThresholdsTest()
-{
-}
-
 Ptr<SpectrumSignalParameters>
-WifiPhyThresholdsTest::MakeWifiSignal(double txPowerWatts, const WifiPhyOperatingChannel& channel)
+WifiPhyThresholdsTest::MakeWifiSignal(Watt_u txPower, const WifiPhyOperatingChannel& channel)
 {
-    WifiTxVector txVector = WifiTxVector(OfdmPhy::GetOfdmRate6Mbps(),
-                                         0,
-                                         WIFI_PREAMBLE_LONG,
-                                         800,
-                                         1,
-                                         1,
-                                         0,
-                                         CHANNEL_WIDTH,
-                                         false);
+    WifiTxVector txVector{OfdmPhy::GetOfdmRate6Mbps(),
+                          0,
+                          WIFI_PREAMBLE_LONG,
+                          NanoSeconds(800),
+                          1,
+                          1,
+                          0,
+                          CHANNEL_WIDTH,
+                          false};
 
-    Ptr<Packet> pkt = Create<Packet>(1000);
+    auto pkt = Create<Packet>(1000);
     WifiMacHeader hdr;
 
     hdr.SetType(WIFI_MAC_QOSDATA);
     hdr.SetQosTid(0);
 
-    Ptr<WifiPsdu> psdu = Create<WifiPsdu>(pkt, hdr);
-    Time txDuration = m_phy->CalculateTxDuration(psdu->GetSize(), txVector, m_phy->GetPhyBand());
-
-    Ptr<WifiPpdu> ppdu = Create<OfdmPpdu>(psdu, txVector, channel, 0);
-
-    Ptr<SpectrumValue> txPowerSpectrum =
-        WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(
-            channel.GetPrimaryChannelCenterFrequency(CHANNEL_WIDTH),
-            CHANNEL_WIDTH,
-            txPowerWatts,
-            CHANNEL_WIDTH);
-    Ptr<WifiSpectrumSignalParameters> txParams = Create<WifiSpectrumSignalParameters>();
+    auto psdu = Create<WifiPsdu>(pkt, hdr);
+    const auto txDuration =
+        m_phy->CalculateTxDuration(psdu->GetSize(), txVector, m_phy->GetPhyBand());
+
+    auto ppdu = Create<OfdmPpdu>(psdu, txVector, channel, 0);
+
+    auto txPowerSpectrum = WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(
+        channel.GetPrimaryChannelCenterFrequency(CHANNEL_WIDTH),
+        CHANNEL_WIDTH,
+        txPower,
+        CHANNEL_WIDTH);
+    auto txParams = Create<WifiSpectrumSignalParameters>();
     txParams->psd = txPowerSpectrum;
     txParams->txPhy = nullptr;
     txParams->duration = txDuration;
@@ -183,14 +164,14 @@
 }
 
 Ptr<SpectrumSignalParameters>
-WifiPhyThresholdsTest::MakeForeignSignal(double txPowerWatts)
+WifiPhyThresholdsTest::MakeForeignSignal(Watt_u txPower)
 {
-    Ptr<SpectrumValue> txPowerSpectrum =
+    auto txPowerSpectrum =
         WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(FREQUENCY,
                                                                     CHANNEL_WIDTH,
-                                                                    txPowerWatts,
+                                                                    txPower,
                                                                     CHANNEL_WIDTH);
-    Ptr<SpectrumSignalParameters> txParams = Create<SpectrumSignalParameters>();
+    auto txParams = Create<SpectrumSignalParameters>();
     txParams->psd = txPowerSpectrum;
     txParams->txPhy = nullptr;
     txParams->duration = Seconds(0.5);
@@ -198,15 +179,15 @@
 }
 
 void
-WifiPhyThresholdsTest::SendSignal(double txPowerWatts, bool wifiSignal)
+WifiPhyThresholdsTest::SendSignal(Watt_u txPower, bool wifiSignal)
 {
     if (wifiSignal)
     {
-        m_phy->StartRx(MakeWifiSignal(txPowerWatts, m_phy->GetOperatingChannel()), nullptr);
+        m_phy->StartRx(MakeWifiSignal(txPower, m_phy->GetOperatingChannel()), nullptr);
     }
     else
     {
-        m_phy->StartRx(MakeForeignSignal(txPowerWatts), nullptr);
+        m_phy->StartRx(MakeForeignSignal(txPower), nullptr);
     }
 }
 
@@ -256,13 +237,13 @@
 void
 WifiPhyThresholdsTest::DoSetup()
 {
-    Ptr<MultiModelSpectrumChannel> spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
-    Ptr<Node> node = CreateObject<Node>();
-    Ptr<WifiNetDevice> dev = CreateObject<WifiNetDevice>();
+    auto spectrumChannel = CreateObject<MultiModelSpectrumChannel>();
+    auto node = CreateObject<Node>();
+    auto dev = CreateObject<WifiNetDevice>();
     m_phy = CreateObject<SpectrumWifiPhy>();
-    Ptr<InterferenceHelper> interferenceHelper = CreateObject<InterferenceHelper>();
+    auto interferenceHelper = CreateObject<InterferenceHelper>();
     m_phy->SetInterferenceHelper(interferenceHelper);
-    Ptr<ErrorRateModel> error = CreateObject<NistErrorRateModel>();
+    auto error = CreateObject<NistErrorRateModel>();
     m_phy->SetErrorRateModel(error);
     m_phy->SetDevice(dev);
     m_phy->AddChannel(spectrumChannel);
@@ -299,7 +280,6 @@
 {
   public:
     WifiPhyThresholdsWeakWifiSignalTest();
-    ~WifiPhyThresholdsWeakWifiSignalTest() override;
     void DoRun() override;
 };
 
@@ -308,19 +288,15 @@
 {
 }
 
-WifiPhyThresholdsWeakWifiSignalTest::~WifiPhyThresholdsWeakWifiSignalTest()
-{
-}
-
 void
 WifiPhyThresholdsWeakWifiSignalTest::DoRun()
 {
-    double txPowerWatts = DbmToW(-110);
+    const auto txPower = DbmToW(-110);
 
     Simulator::Schedule(Seconds(1),
                         &WifiPhyThresholdsWeakWifiSignalTest::SendSignal,
                         this,
-                        txPowerWatts,
+                        txPower,
                         true);
 
     Simulator::Run();
@@ -365,12 +341,12 @@
 void
 WifiPhyThresholdsWeakForeignSignalTest::DoRun()
 {
-    double txPowerWatts = DbmToW(-90);
+    const auto txPower = DbmToW(-90);
 
     Simulator::Schedule(Seconds(1),
                         &WifiPhyThresholdsWeakForeignSignalTest::SendSignal,
                         this,
-                        txPowerWatts,
+                        txPower,
                         false);
 
     Simulator::Run();
@@ -414,12 +390,12 @@
 void
 WifiPhyThresholdsStrongWifiSignalTest::DoRun()
 {
-    double txPowerWatts = DbmToW(-60);
+    const auto txPower = DbmToW(-60);
 
     Simulator::Schedule(Seconds(1),
                         &WifiPhyThresholdsStrongWifiSignalTest::SendSignal,
                         this,
-                        txPowerWatts,
+                        txPower,
                         true);
 
     Simulator::Run();
@@ -467,12 +443,12 @@
 void
 WifiPhyThresholdsStrongForeignSignalTest::DoRun()
 {
-    double txPowerWatts = DbmToW(-60);
+    const auto txPower = DbmToW(-60);
 
     Simulator::Schedule(Seconds(1),
                         &WifiPhyThresholdsStrongForeignSignalTest::SendSignal,
                         this,
-                        txPowerWatts,
+                        txPower,
                         false);
 
     Simulator::Run();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-primary-channels-test.cc ns-3.43/src/wifi/test/wifi-primary-channels-test.cc
--- ns-3.42/src/wifi/test/wifi-primary-channels-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-primary-channels-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,23 +1,13 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
 
 #include "ns3/ap-wifi-mac.h"
+#include "ns3/attribute-container.h"
 #include "ns3/boolean.h"
 #include "ns3/config.h"
 #include "ns3/ctrl-headers.h"
@@ -64,10 +54,10 @@
     /**
      * Constructor
      *
-     * \param channelWidth the operating channel width (in MHz)
+     * \param channelWidth the operating channel width
      * \param useDistinctBssColors whether to set distinct BSS colors to BSSes
      */
-    WifiPrimaryChannelsTest(uint16_t channelWidth, bool useDistinctBssColors);
+    WifiPrimaryChannelsTest(MHz_u channelWidth, bool useDistinctBssColors);
     ~WifiPrimaryChannelsTest() override;
 
     /**
@@ -88,43 +78,40 @@
      * transmission channel width
      *
      * \param bss the given BSS
-     * \param txChannelWidth the given transmission channel width in MHz
+     * \param txChannelWidth the given transmission channel width
      */
-    void SendDlSuPpdu(uint8_t bss, uint16_t txChannelWidth);
+    void SendDlSuPpdu(uint8_t bss, MHz_u txChannelWidth);
     /**
      * Have the AP of the given BSS transmit a MU PPDU using the given
      * transmission channel width and RU type
      *
      * \param bss the given BSS
-     * \param txChannelWidth the given transmission channel width in MHz
+     * \param txChannelWidth the given transmission channel width
      * \param ruType the given RU type
      * \param nRus the number of RUs
      */
-    void SendDlMuPpdu(uint8_t bss, uint16_t txChannelWidth, HeRu::RuType ruType, std::size_t nRus);
+    void SendDlMuPpdu(uint8_t bss, MHz_u txChannelWidth, HeRu::RuType ruType, std::size_t nRus);
     /**
      * Have the AP of the given BSS transmit a Basic Trigger Frame. This method calls
      * DoSendHeTbPpdu to actually have STAs transmit HE TB PPDUs using the given
      * transmission channel width and RU type
      *
      * \param bss the given BSS
-     * \param txChannelWidth the given transmission channel width in MHz
+     * \param txChannelWidth the given transmission channel width
      * \param ruType the given RU type
      * \param nRus the number of RUs
      */
-    void SendHeTbPpdu(uint8_t bss, uint16_t txChannelWidth, HeRu::RuType ruType, std::size_t nRus);
+    void SendHeTbPpdu(uint8_t bss, MHz_u txChannelWidth, HeRu::RuType ruType, std::size_t nRus);
     /**
      * Have the STAs of the given BSS transmit an HE TB PPDU using the given
      * transmission channel width and RU type
      *
      * \param bss the given BSS
-     * \param txChannelWidth the given transmission channel width in MHz
+     * \param txChannelWidth the given transmission channel width
      * \param ruType the given RU type
      * \param nRus the number of RUs
      */
-    void DoSendHeTbPpdu(uint8_t bss,
-                        uint16_t txChannelWidth,
-                        HeRu::RuType ruType,
-                        std::size_t nRus);
+    void DoSendHeTbPpdu(uint8_t bss, MHz_u txChannelWidth, HeRu::RuType ruType, std::size_t nRus);
     /**
      * Callback invoked when a station receives a DL PPDU.
      *
@@ -167,9 +154,9 @@
      * they operate on, otherwise.
      *
      * \param txBss the set of BSSes that transmitted an SU PPDU
-     * \param txChannelWidth the given transmission channel width in MHz
+     * \param txChannelWidth the given transmission channel width
      */
-    void CheckReceivedSuPpdus(std::set<uint8_t> txBss, uint16_t txChannelWidth);
+    void CheckReceivedSuPpdus(std::set<uint8_t> txBss, MHz_u txChannelWidth);
     /**
      * Check that (i) all stations/APs belonging to the given BSSes received the DL/UL MU PPDUs
      * transmitted over the given channel width and RU width; and (ii) stations/APs belonging to
@@ -178,13 +165,13 @@
      * performed on a channel adjacent to the one they operate on, otherwise.
      *
      * \param txBss the set of BSSes that transmitted an SU PPDU
-     * \param txChannelWidth the given transmission channel width in MHz
+     * \param txChannelWidth the given transmission channel width
      * \param ruType the given RU type
      * \param nRus the number of RUs
      * \param isDlMu true for DL MU PPDU, false for HE TB PPDU
      */
     void CheckReceivedMuPpdus(std::set<uint8_t> txBss,
-                              uint16_t txChannelWidth,
+                              MHz_u txChannelWidth,
                               HeRu::RuType ruType,
                               std::size_t nRus,
                               bool isDlMu);
@@ -195,15 +182,15 @@
      * channel and all the primary20 channels are distinct).
      *
      * \param txBss the set of BSSes that transmitted a Trigger Frame
-     * \param txChannelWidth the given transmission channel width in MHz
+     * \param txChannelWidth the given transmission channel width
      */
-    void CheckReceivedTriggerFrames(std::set<uint8_t> txBss, uint16_t txChannelWidth);
+    void CheckReceivedTriggerFrames(std::set<uint8_t> txBss, MHz_u txChannelWidth);
 
   private:
     void DoSetup() override;
     void DoRun() override;
 
-    uint16_t m_channelWidth;                      ///< operating channel width in MHz
+    MHz_u m_channelWidth;                         ///< operating channel width
     bool m_useDistinctBssColors;                  ///< true to set distinct BSS colors to BSSes
     uint8_t m_nBss;                               ///< number of BSSes
     uint8_t m_nStationsPerBss;                    ///< number of stations per AP
@@ -219,7 +206,7 @@
     Time m_triggerTxDuration;                 ///< TX duration for Basic Trigger Frame
 };
 
-WifiPrimaryChannelsTest::WifiPrimaryChannelsTest(uint16_t channelWidth, bool useDistinctBssColors)
+WifiPrimaryChannelsTest::WifiPrimaryChannelsTest(MHz_u channelWidth, bool useDistinctBssColors)
     : TestCase("Check correct transmissions for various primary channel settings"),
       m_channelWidth(channelWidth),
       m_useDistinctBssColors(useDistinctBssColors)
@@ -333,7 +320,7 @@
 
     // we create as many stations per BSS as the number of 26-tone RUs in a channel
     // of the configured width
-    switch (m_channelWidth)
+    switch (static_cast<uint16_t>(m_channelWidth))
     {
     case 20:
         m_nStationsPerBss = 9;
@@ -390,13 +377,16 @@
                 "WaitBeaconTimeout",
                 TimeValue(MicroSeconds(102400))); // same as BeaconInterval
 
-    TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue> channelValue;
+    AttributeContainerValue<
+        TupleValue<UintegerValue, UintegerValue, EnumValue<WifiPhyBand>, UintegerValue>,
+        ';'>
+        channelValue;
 
     // Each BSS uses a distinct primary20 channel
     for (uint8_t bss = 0; bss < m_nBss; bss++)
     {
         channelValue.Set(
-            WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, bss});
+            WifiPhy::ChannelSegments{{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, bss}});
         phy.Set("ChannelSettings", channelValue);
 
         m_staDevices.push_back(wifi.Install(phy, mac, wifiStaNodes[bss]));
@@ -405,7 +395,7 @@
     for (uint8_t bss = 0; bss < m_nBss; bss++)
     {
         channelValue.Set(
-            WifiPhy::ChannelTuple{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, bss});
+            WifiPhy::ChannelSegments{{channelNum, m_channelWidth, WIFI_PHY_BAND_5GHZ, bss}});
         phy.Set("ChannelSettings", channelValue);
 
         mac.SetType("ns3::ApWifiMac",
@@ -420,10 +410,10 @@
     }
 
     // Assign fixed streams to random variables in use
-    streamNumber = wifi.AssignStreams(m_apDevices, streamNumber);
+    streamNumber = WifiHelper::AssignStreams(m_apDevices, streamNumber);
     for (uint8_t bss = 0; bss < m_nBss; bss++)
     {
-        streamNumber = wifi.AssignStreams(m_staDevices[bss], streamNumber);
+        streamNumber = WifiHelper::AssignStreams(m_staDevices[bss], streamNumber);
     }
 
     // set BSS color
@@ -469,7 +459,7 @@
     m_triggerTxVector = WifiTxVector(OfdmPhy::GetOfdmRate6Mbps(),
                                      0,
                                      WIFI_PREAMBLE_LONG,
-                                     800,
+                                     NanoSeconds(800),
                                      1,
                                      1,
                                      0,
@@ -618,7 +608,7 @@
     // To have simultaneous transmissions on adjacent channels, just initialize
     // nRounds to 1 and nApsPerRound to m_channelWidth / 20. Of course, the test
     // will fail because some stations will not receive some frames due to interfence
-    for (uint16_t txChannelWidth = 20, nRounds = 2, nApsPerRound = m_channelWidth / 20 / 2;
+    for (MHz_u txChannelWidth = 20, nRounds = 2, nApsPerRound = m_channelWidth / 20 / 2;
          txChannelWidth <= m_channelWidth;
          txChannelWidth *= 2, nRounds *= 2, nApsPerRound /= 2)
     {
@@ -654,7 +644,7 @@
      * channel width, every round is repeated as many times as the number of ways in
      * which we can partition the transmission channel width in equal sized RUs.
      */
-    for (uint16_t txChannelWidth = 20, nRounds = 2, nApsPerRound = m_channelWidth / 20 / 2;
+    for (MHz_u txChannelWidth = 20, nRounds = 2, nApsPerRound = m_channelWidth / 20 / 2;
          txChannelWidth <= m_channelWidth;
          txChannelWidth *= 2, nRounds *= 2, nApsPerRound /= 2)
     {
@@ -702,7 +692,7 @@
      * channel width, every round is repeated as many times as the number of ways in
      * which we can partition the transmission channel width in equal sized RUs.
      */
-    for (uint16_t txChannelWidth = 20, nRounds = 2, nApsPerRound = m_channelWidth / 20 / 2;
+    for (MHz_u txChannelWidth = 20, nRounds = 2, nApsPerRound = m_channelWidth / 20 / 2;
          txChannelWidth <= m_channelWidth;
          txChannelWidth *= 2, nRounds *= 2, nApsPerRound /= 2)
     {
@@ -762,7 +752,7 @@
 }
 
 void
-WifiPrimaryChannelsTest::SendDlSuPpdu(uint8_t bss, uint16_t txChannelWidth)
+WifiPrimaryChannelsTest::SendDlSuPpdu(uint8_t bss, MHz_u txChannelWidth)
 {
     NS_LOG_INFO("*** BSS " << +bss << " transmits on primary " << txChannelWidth << " MHz channel");
 
@@ -773,7 +763,7 @@
     WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs8(),
                                          0,
                                          WIFI_PREAMBLE_HE_SU,
-                                         800,
+                                         NanoSeconds(800),
                                          1,
                                          1,
                                          0,
@@ -795,7 +785,7 @@
 
 void
 WifiPrimaryChannelsTest::SendDlMuPpdu(uint8_t bss,
-                                      uint16_t txChannelWidth,
+                                      MHz_u txChannelWidth,
                                       HeRu::RuType ruType,
                                       std::size_t nRus)
 {
@@ -809,7 +799,7 @@
     WifiTxVector txVector = WifiTxVector(HePhy::GetHeMcs8(),
                                          0,
                                          WIFI_PREAMBLE_HE_MU,
-                                         800,
+                                         NanoSeconds(800),
                                          1,
                                          1,
                                          0,
@@ -840,7 +830,7 @@
     }
     txVector.SetSigBMode(VhtPhy::GetVhtMcs5());
     RuAllocation ruAllocations;
-    auto numRuAllocs = txChannelWidth / 20;
+    const std::size_t numRuAllocs = txChannelWidth / 20;
     ruAllocations.resize(numRuAllocs);
     auto IsOddNum = (nRus / numRuAllocs) % 2 == 1;
     auto ruAlloc = HeRu::GetEqualizedRuAllocation(ruType, IsOddNum);
@@ -852,7 +842,7 @@
 
 void
 WifiPrimaryChannelsTest::SendHeTbPpdu(uint8_t bss,
-                                      uint16_t txChannelWidth,
+                                      MHz_u txChannelWidth,
                                       HeRu::RuType ruType,
                                       std::size_t nRus)
 {
@@ -876,7 +866,7 @@
 
 void
 WifiPrimaryChannelsTest::DoSendHeTbPpdu(uint8_t bss,
-                                        uint16_t txChannelWidth,
+                                        MHz_u txChannelWidth,
                                         HeRu::RuType ruType,
                                         std::size_t nRus)
 {
@@ -895,7 +885,7 @@
     WifiTxVector trigVector(HePhy::GetHeMcs8(),
                             0,
                             WIFI_PREAMBLE_HE_TB,
-                            3200,
+                            NanoSeconds(3200),
                             1,
                             1,
                             0,
@@ -920,7 +910,7 @@
         WifiTxVector txVector(HePhy::GetHeMcs8(),
                               0,
                               WIFI_PREAMBLE_HE_TB,
-                              3200,
+                              NanoSeconds(3200),
                               1,
                               1,
                               0,
@@ -972,7 +962,7 @@
 }
 
 void
-WifiPrimaryChannelsTest::CheckReceivedSuPpdus(std::set<uint8_t> txBss, uint16_t txChannelWidth)
+WifiPrimaryChannelsTest::CheckReceivedSuPpdus(std::set<uint8_t> txBss, MHz_u txChannelWidth)
 {
     for (uint8_t bss = 0; bss < m_nBss; bss++)
     {
@@ -1051,7 +1041,7 @@
 
 void
 WifiPrimaryChannelsTest::CheckReceivedMuPpdus(std::set<uint8_t> txBss,
-                                              uint16_t txChannelWidth,
+                                              MHz_u txChannelWidth,
                                               HeRu::RuType ruType,
                                               std::size_t nRus,
                                               bool isDlMu)
@@ -1173,8 +1163,7 @@
 }
 
 void
-WifiPrimaryChannelsTest::CheckReceivedTriggerFrames(std::set<uint8_t> txBss,
-                                                    uint16_t txChannelWidth)
+WifiPrimaryChannelsTest::CheckReceivedTriggerFrames(std::set<uint8_t> txBss, MHz_u txChannelWidth)
 {
     for (uint8_t bss = 0; bss < m_nBss; bss++)
     {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-ru-allocation-test.cc ns-3.43/src/wifi/test/wifi-ru-allocation-test.cc
--- ns-3.42/src/wifi/test/wifi-ru-allocation-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-ru-allocation-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2023 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -45,14 +34,10 @@
      *
      * \param primary20 the index of the primary20 channel to configure
      * \param ru the given RU
-     * \param width the width in MHz of the channel to which the given RU refers to; normally,
-     *              it is the width in MHz of the PPDU for which the RU is allocated
-     * \param indices the expected indices
+     * \param width the width of the channel to which the given RU refers to; normally, it is the
+     * width of the PPDU for which the RU is allocated \param indices the expected indices
      */
-    void RunOne(uint8_t primary20,
-                HeRu::RuSpec ru,
-                uint16_t width,
-                const std::set<uint8_t>& indices);
+    void RunOne(uint8_t primary20, HeRu::RuSpec ru, MHz_u width, const std::set<uint8_t>& indices);
 
   private:
     void DoRun() override;
@@ -68,7 +53,7 @@
 void
 Wifi20MHzIndicesCoveringRuTest::RunOne(uint8_t primary20,
                                        HeRu::RuSpec ru,
-                                       uint16_t width,
+                                       MHz_u width,
                                        const std::set<uint8_t>& indices)
 {
     auto printToStr = [](const std::set<uint8_t>& s) {
@@ -103,7 +88,7 @@
 
     /* 20 MHz PPDU */
     {
-        const uint16_t width = 20;
+        const MHz_u width = 20;
         const uint8_t p20Index = 0;
 
         // All the 9 26-tone RUs are covered by the unique 20 MHz channel
@@ -133,7 +118,7 @@
     /* 20 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 2; p20Index++)
     {
-        const uint16_t width = 20;
+        const MHz_u width = 20;
 
         // All the 9 26-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
@@ -157,7 +142,7 @@
     /* 40 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 2; p20Index++)
     {
-        const uint16_t width = 40;
+        const MHz_u width = 40;
 
         // The first 9 26-tone RUs are covered by the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
@@ -205,7 +190,7 @@
     /* 20 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 4; p20Index++)
     {
-        const uint16_t width = 20;
+        const MHz_u width = 20;
 
         // All the 9 26-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
@@ -229,7 +214,7 @@
     /* 40 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 4; p20Index++)
     {
-        const uint16_t width = 40;
+        const MHz_u width = 40;
         // PPDU is transmitted on P40, which may be in the lower or higher 40 MHz
         const uint8_t p40Index = p20Index / 2;
         // RUs can be allocated in one (or both) of the two 20 MHz channels in P40
@@ -277,7 +262,7 @@
     /* 80 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 4; p20Index++)
     {
-        const uint16_t width = 80;
+        const MHz_u width = 80;
 
         // The first 9 26-tone RUs are in the first 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
@@ -365,7 +350,7 @@
     /* 20 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 8; p20Index++)
     {
-        const uint16_t width = 20;
+        const MHz_u width = 20;
 
         // All the 9 26-tone RUs are covered by the primary 20 MHz channel
         for (std::size_t idx = 1; idx <= 9; idx++)
@@ -389,7 +374,7 @@
     /* 40 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 8; p20Index++)
     {
-        const uint16_t width = 40;
+        const MHz_u width = 40;
         // PPDU is transmitted on P40, which is one of the four 40 MHz channels
         const uint8_t p40Index = p20Index / 2;
         // RUs can be allocated in one (or both) of the two 20 MHz channels in P40
@@ -437,7 +422,7 @@
     /* 80 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 8; p20Index++)
     {
-        const uint16_t width = 80;
+        const MHz_u width = 80;
         // PPDU is transmitted on P80, which is one of the two 80 MHz channels
         const uint8_t p80Index = p20Index / 4;
         // RUs can be allocated in one (or more) of the four 20 MHz channels in P80
@@ -530,7 +515,7 @@
     /* 160 MHz PPDU */
     for (uint8_t p20Index = 0; p20Index < 8; p20Index++)
     {
-        const uint16_t width = 160;
+        const MHz_u width = 160;
 
         for (auto primary80MHz : {true, false})
         {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-test.cc ns-3.43/src/wifi/test/wifi-test.cc
--- ns-3.42/src/wifi/test/wifi-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2005,2006 INRIA
  *               2010      NICTA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  *          Quincy Tse <quincy.tse@nicta.com.au>
@@ -24,9 +13,11 @@
 #include "ns3/ap-wifi-mac.h"
 #include "ns3/config.h"
 #include "ns3/constant-position-mobility-model.h"
+#include "ns3/constant-rate-wifi-manager.h"
 #include "ns3/error-model.h"
 #include "ns3/fcfs-wifi-queue-scheduler.h"
 #include "ns3/he-frame-exchange-manager.h"
+#include "ns3/he-phy.h"
 #include "ns3/header-serialization-test.h"
 #include "ns3/ht-configuration.h"
 #include "ns3/interference-helper.h"
@@ -43,7 +34,7 @@
 #include "ns3/spectrum-wifi-helper.h"
 #include "ns3/string.h"
 #include "ns3/test.h"
-#include "ns3/vht-phy.h"
+#include "ns3/uinteger.h"
 #include "ns3/waypoint-mobility-model.h"
 #include "ns3/wifi-default-ack-manager.h"
 #include "ns3/wifi-default-assoc-manager.h"
@@ -1449,7 +1440,7 @@
     wifiDevices = wifi.Install(phy, mac, wifiNodes);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(wifiDevices, streamNumber);
+    WifiHelper::AssignStreams(wifiDevices, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -1533,8 +1524,7 @@
      * A tuple of {starting frequency, channelWidth, Number of subbands in SpectrumModel, modulation
      * type}
      */
-    typedef std::tuple<double, uint16_t, uint32_t, WifiModulationClass>
-        FreqWidthSubbandModulationTuple;
+    typedef std::tuple<Hz_u, MHz_u, uint32_t, WifiModulationClass> FreqWidthSubbandModulationTuple;
     std::vector<FreqWidthSubbandModulationTuple>
         m_distinctTuples; ///< vector of distinct {starting frequency, channelWidth, Number of
                           ///< subbands in SpectrumModel, modulation type} tuples
@@ -1556,7 +1546,7 @@
                          Ptr<NetDevice> sourceDevice,
                          Address& destination) const;
 
-    uint16_t m_channelWidth; ///< channel width (in MHz)
+    MHz_u m_channelWidth; ///< channel width
 };
 
 Bug2843TestCase::Bug2843TestCase()
@@ -1575,7 +1565,7 @@
     // Extract starting frequency and number of subbands
     Ptr<const SpectrumModel> c = txParams->psd->GetSpectrumModel();
     std::size_t numBands = c->GetNumBands();
-    double startingFreq = c->Begin()->fl;
+    const Hz_u startingFreq = c->Begin()->fl;
 
     // Get channel bandwidth and modulation class
     Ptr<const WifiSpectrumSignalParameters> wifiTxParams =
@@ -1618,7 +1608,7 @@
 void
 Bug2843TestCase::DoRun()
 {
-    uint16_t channelWidth = 40; // at least 40 MHz expected here
+    MHz_u channelWidth = 40; // at least 40 MHz expected here
 
     NodeContainer wifiStaNode;
     wifiStaNode.Create(1);
@@ -2065,9 +2055,9 @@
     staDevice = wifi.Install(phy, mac, staNode);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(apDevice, streamNumber);
-    wifi.AssignStreams(apDeviceNearest, streamNumber + 1);
-    wifi.AssignStreams(staDevice, streamNumber + 2);
+    WifiHelper::AssignStreams(apDevice, streamNumber);
+    WifiHelper::AssignStreams(apDeviceNearest, streamNumber + 1);
+    WifiHelper::AssignStreams(staDevice, streamNumber + 2);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -2402,8 +2392,8 @@
     staDevice = wifi.Install(phy, mac, wifiStaNode);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(apDevice, streamNumber);
-    wifi.AssignStreams(staDevice, streamNumber);
+    WifiHelper::AssignStreams(apDevice, streamNumber);
+    WifiHelper::AssignStreams(staDevice, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -2683,8 +2673,8 @@
     staDevice = wifi.Install(phy, mac, wifiStaNode);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(apDevice, streamNumber);
-    wifi.AssignStreams(staDevice, streamNumber);
+    WifiHelper::AssignStreams(apDevice, streamNumber);
+    WifiHelper::AssignStreams(staDevice, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -2908,8 +2898,8 @@
     staDevice = wifi.Install(phy, mac, wifiStaNode);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(apDevice, streamNumber);
-    wifi.AssignStreams(staDevice, streamNumber);
+    WifiHelper::AssignStreams(apDevice, streamNumber);
+    WifiHelper::AssignStreams(staDevice, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -2973,9 +2963,9 @@
   private:
     /**
      * Change the configured channel width for all nodes
-     * \param channelWidth the channel width (in MHz)
+     * \param channelWidth the channel width
      */
-    void ChangeChannelWidth(uint16_t channelWidth);
+    void ChangeChannelWidth(MHz_u channelWidth);
 
     /**
      * Triggers the transmission of a 1000 Byte-long data packet from the source device
@@ -3015,10 +3005,11 @@
 }
 
 void
-IdealRateManagerChannelWidthTest::ChangeChannelWidth(uint16_t channelWidth)
+IdealRateManagerChannelWidthTest::ChangeChannelWidth(MHz_u channelWidth)
 {
     Config::Set("/NodeList/*/DeviceList/*/$ns3::WifiNetDevice/Phy/ChannelSettings",
-                StringValue("{0, " + std::to_string(channelWidth) + ", BAND_5GHZ, 0}"));
+                StringValue("{0, " + std::to_string(static_cast<uint16_t>(channelWidth)) +
+                            ", BAND_5GHZ, 0}"));
 }
 
 void
@@ -3079,8 +3070,8 @@
     staDevice = wifi.Install(phy, mac, wifiStaNode);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(apDevice, streamNumber);
-    wifi.AssignStreams(staDevice, streamNumber);
+    WifiHelper::AssignStreams(apDevice, streamNumber);
+    WifiHelper::AssignStreams(staDevice, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -3310,8 +3301,8 @@
     staDevice = wifi.Install(phy, mac, wifiStaNode);
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(apDevice, streamNumber);
-    wifi.AssignStreams(staDevice, streamNumber);
+    WifiHelper::AssignStreams(apDevice, streamNumber);
+    WifiHelper::AssignStreams(staDevice, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
@@ -3586,7 +3577,7 @@
     bool CheckDataRate(HeRu::RuType ruType,
                        std::string mcs,
                        uint8_t nss,
-                       uint16_t guardInterval,
+                       Time guardInterval,
                        uint16_t expectedDataRate);
     void DoRun() override;
 };
@@ -3600,12 +3591,26 @@
 HeRuMcsDataRateTestCase::CheckDataRate(HeRu::RuType ruType,
                                        std::string mcs,
                                        uint8_t nss,
-                                       uint16_t guardInterval,
+                                       Time guardInterval,
                                        uint16_t expectedDataRate)
 {
-    uint16_t approxWidth = HeRu::GetBandwidth(ruType);
+    uint8_t staId = 1;
+    auto txVector = WifiTxVector(HePhy::GetHeMcs(0),
+                                 0,
+                                 WIFI_PREAMBLE_HE_MU,
+                                 guardInterval,
+                                 1,
+                                 1,
+                                 0,
+                                 160,
+                                 false,
+                                 false);
     WifiMode mode(mcs);
-    uint64_t dataRate = round(mode.GetDataRate(approxWidth, guardInterval, nss) / 100000.0);
+    txVector.SetMode(mode, staId);
+    txVector.SetNss(nss, staId);
+    HeRu::RuSpec ru(ruType, 1, true);
+    txVector.SetRu(ru, staId);
+    uint64_t dataRate = round(mode.GetDataRate(txVector, staId) / 100000.0);
     NS_ABORT_MSG_IF(dataRate > 65535, "Rate is way too high");
     if (static_cast<uint16_t>(dataRate) != expectedDataRate)
     {
@@ -3624,18 +3629,18 @@
     bool retval = true;
 
     // 26-tone RU, browse over all MCSs, GIs and Nss's (up to 4, current max)
-    retval = retval && CheckDataRate(HeRu::RU_26_TONE, "HeMcs0", 1, 800, 9) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs1", 1, 1600, 17) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs2", 1, 3200, 23) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs3", 1, 3200, 30) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs4", 2, 1600, 100) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs5", 3, 1600, 200) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs6", 4, 1600, 300) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs7", 4, 3200, 300) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs8", 4, 1600, 400) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs9", 4, 3200, 400) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs10", 4, 1600, 500) &&
-             CheckDataRate(HeRu::RU_26_TONE, "HeMcs11", 4, 3200, 500);
+    retval = retval && CheckDataRate(HeRu::RU_26_TONE, "HeMcs0", 1, NanoSeconds(800), 9) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs1", 1, NanoSeconds(1600), 17) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs2", 1, NanoSeconds(3200), 23) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs3", 1, NanoSeconds(3200), 30) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs4", 2, NanoSeconds(1600), 100) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs5", 3, NanoSeconds(1600), 200) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs6", 4, NanoSeconds(1600), 300) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs7", 4, NanoSeconds(3200), 300) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs8", 4, NanoSeconds(1600), 400) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs9", 4, NanoSeconds(3200), 400) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs10", 4, NanoSeconds(1600), 500) &&
+             CheckDataRate(HeRu::RU_26_TONE, "HeMcs11", 4, NanoSeconds(3200), 500);
 
     NS_TEST_EXPECT_MSG_EQ(
         retval,
@@ -3643,12 +3648,12 @@
         "26-tone RU  data rate verification for different MCSs, GIs, and Nss's failed");
 
     // Check other RU sizes
-    retval = retval && CheckDataRate(HeRu::RU_52_TONE, "HeMcs2", 1, 1600, 50) &&
-             CheckDataRate(HeRu::RU_106_TONE, "HeMcs9", 1, 800, 500) &&
-             CheckDataRate(HeRu::RU_242_TONE, "HeMcs5", 1, 1600, 650) &&
-             CheckDataRate(HeRu::RU_484_TONE, "HeMcs3", 1, 1600, 650) &&
-             CheckDataRate(HeRu::RU_996_TONE, "HeMcs5", 1, 3200, 2450) &&
-             CheckDataRate(HeRu::RU_2x996_TONE, "HeMcs3", 1, 3200, 2450);
+    retval = retval && CheckDataRate(HeRu::RU_52_TONE, "HeMcs2", 1, NanoSeconds(1600), 50) &&
+             CheckDataRate(HeRu::RU_106_TONE, "HeMcs9", 1, NanoSeconds(800), 500) &&
+             CheckDataRate(HeRu::RU_242_TONE, "HeMcs5", 1, NanoSeconds(1600), 650) &&
+             CheckDataRate(HeRu::RU_484_TONE, "HeMcs3", 1, NanoSeconds(1600), 650) &&
+             CheckDataRate(HeRu::RU_996_TONE, "HeMcs5", 1, NanoSeconds(3200), 2450) &&
+             CheckDataRate(HeRu::RU_2x996_TONE, "HeMcs3", 1, NanoSeconds(3200), 2450);
 
     NS_TEST_EXPECT_MSG_EQ(retval,
                           true,
@@ -3806,6 +3811,151 @@
     TestHeaderSerialization(frame);
 }
 
+//-----------------------------------------------------------------------------
+
+/**
+ * Make sure that all DSSS modulation types work (see issue #1095).
+ *
+ * This test sends four packets from a STA to an AP, each with a different
+ * DSSS rate (1, 2, 5.5, and 11Mbps), and checks that all four are received.
+ */
+class DsssModulationTest : public TestCase
+{
+  public:
+    DsssModulationTest();
+
+    void DoRun() override;
+
+  private:
+    uint32_t m_received; ///< number of received packets
+
+    /**
+     * Trace sink to receive from the PacketSocket; the address parameter is unused
+     * \param context the context
+     * \param p the received packet
+     */
+    void Receive(std::string context, Ptr<const Packet> p, const Address&);
+};
+
+DsssModulationTest::DsssModulationTest()
+    : TestCase("Test case for Bug 730"),
+      m_received(0)
+{
+}
+
+void
+DsssModulationTest::Receive(std::string context, Ptr<const Packet> p, const Address&)
+{
+    m_received++;
+}
+
+void
+DsssModulationTest::DoRun()
+{
+    m_received = 0;
+
+    NodeContainer wifiStaNode;
+    wifiStaNode.Create(1);
+
+    NodeContainer wifiApNode;
+    wifiApNode.Create(1);
+
+    auto channel = YansWifiChannelHelper::Default();
+    YansWifiPhyHelper phy;
+    phy.SetChannel(channel.Create());
+
+    WifiHelper wifi;
+    wifi.SetStandard(WIFI_STANDARD_80211b);
+    wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager",
+                                 "DataMode",
+                                 StringValue("DsssRate1Mbps"),
+                                 "ControlMode",
+                                 StringValue("DsssRate1Mbps"));
+
+    WifiMacHelper mac;
+    auto ssid = Ssid("ns-3-ssid");
+    mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid), "ActiveProbing", BooleanValue(false));
+
+    NetDeviceContainer staDevices;
+    staDevices = wifi.Install(phy, mac, wifiStaNode);
+
+    mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid), "BeaconGeneration", BooleanValue(true));
+
+    NetDeviceContainer apDevices;
+    apDevices = wifi.Install(phy, mac, wifiApNode);
+    auto apRemoteStationManager = apDevices.Get(0)
+                                      ->GetObject<WifiNetDevice>()
+                                      ->GetRemoteStationManager()
+                                      ->GetObject<ConstantRateWifiManager>();
+    apRemoteStationManager->SetAttribute("DataMode", StringValue("DsssRate1Mbps"));
+
+    MobilityHelper mobility;
+    auto positionAlloc = CreateObject<ListPositionAllocator>();
+
+    positionAlloc->Add(Vector(0.0, 0.0, 0.0));
+    positionAlloc->Add(Vector(1.0, 0.0, 0.0));
+    mobility.SetPositionAllocator(positionAlloc);
+
+    mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
+    mobility.Install(wifiApNode);
+    mobility.Install(wifiStaNode);
+
+    auto apDevice = DynamicCast<WifiNetDevice>(apDevices.Get(0));
+    auto staDevice = DynamicCast<WifiNetDevice>(staDevices.Get(0));
+
+    PacketSocketAddress socket;
+    socket.SetSingleDevice(staDevice->GetIfIndex());
+    socket.SetPhysicalAddress(apDevice->GetAddress());
+    socket.SetProtocol(1);
+
+    // give packet socket powers to nodes.
+    PacketSocketHelper packetSocket;
+    packetSocket.Install(wifiStaNode);
+    packetSocket.Install(wifiApNode);
+
+    auto client = CreateObject<PacketSocketClient>();
+    client->SetAttribute("PacketSize", UintegerValue(1460));
+    client->SetAttribute("MaxPackets", UintegerValue(4));
+    client->SetRemote(socket);
+    wifiStaNode.Get(0)->AddApplication(client);
+    client->SetStartTime(Seconds(1));
+    client->SetStopTime(Seconds(4.5));
+
+    auto server = CreateObject<PacketSocketServer>();
+    server->SetLocal(socket);
+    wifiApNode.Get(0)->AddApplication(server);
+    server->SetStartTime(Seconds(0));
+    server->SetStopTime(Seconds(4.5));
+
+    Config::Connect("/NodeList/1/ApplicationList/0/$ns3::PacketSocketServer/Rx",
+                    MakeCallback(&DsssModulationTest::Receive, this));
+
+    // The PacketSocketClient starts at time 1s, and packets are sent at times 1s, 2s, 3s, 4s.
+    // Change the MCS in between these send times (e.g., at 1.5s, 2.5s, 3.5s)
+    Simulator::Schedule(
+        Seconds(1.5),
+        Config::Set,
+        "/NodeList/0/DeviceList/0/RemoteStationManager/$ns3::ConstantRateWifiManager/DataMode",
+        StringValue("DsssRate2Mbps"));
+    Simulator::Schedule(
+        Seconds(2.5),
+        Config::Set,
+        "/NodeList/0/DeviceList/0/RemoteStationManager/$ns3::ConstantRateWifiManager/DataMode",
+        StringValue("DsssRate5_5Mbps"));
+    Simulator::Schedule(
+        Seconds(3.5),
+        Config::Set,
+        "/NodeList/0/DeviceList/0/RemoteStationManager/$ns3::ConstantRateWifiManager/DataMode",
+        StringValue("DsssRate11Mbps"));
+
+    Simulator::Stop(Seconds(4.5));
+    Simulator::Run();
+
+    Simulator::Destroy();
+
+    NS_TEST_ASSERT_MSG_EQ(m_received, 4, "Did not receive four DSSS packets");
+}
+
 /**
  * \ingroup wifi-test
  * \ingroup tests
@@ -3839,6 +3989,7 @@
     AddTestCase(new IdealRateManagerMimoTest, TestCase::Duration::QUICK);
     AddTestCase(new HeRuMcsDataRateTestCase, TestCase::Duration::QUICK);
     AddTestCase(new WifiMgtHeaderTest, TestCase::Duration::QUICK);
+    AddTestCase(new DsssModulationTest, TestCase::Duration::QUICK);
 }
 
 static WifiTestSuite g_wifiTestSuite; ///< the test suite
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-transmit-mask-test.cc ns-3.43/src/wifi/test/wifi-transmit-mask-test.cc
--- ns-3.42/src/wifi/test/wifi-transmit-mask-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-transmit-mask-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2017 Orange Labs
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Rediet <getachew.redieteab@orange.com>
  */
@@ -21,10 +10,12 @@
 #include "ns3/log.h"
 #include "ns3/test.h"
 #include "ns3/wifi-phy-band.h"
+#include "ns3/wifi-phy-common.h"
 #include "ns3/wifi-spectrum-value-helper.h"
 #include "ns3/wifi-standards.h"
 
 #include <cmath>
+#include <vector>
 
 using namespace ns3;
 
@@ -41,12 +32,12 @@
 {
   public:
     /**
-     * typedef for a pair of sub-band index and relative power value (dBr)
+     * typedef for a pair of sub-band index and relative power value
      */
-    typedef std::pair<uint32_t, double> IndexPowerPair;
+    typedef std::pair<uint32_t, dBr_u> IndexPowerPair;
 
     /**
-     * typedef for a vector of pairs of sub-band index and relative power value (dBr)
+     * typedef for a vector of pairs of sub-band index and relative power value
      */
     typedef std::vector<IndexPowerPair> IndexPowerVect;
 
@@ -56,10 +47,11 @@
      * \param name test reference name
      * \param standard selected standard
      * \param band selected PHY band
-     * \param channelWidth channel width (in MHz)
+     * \param channelWidth total channel width
+     * \param centerFrequencies the center frequency per contiguous segment
      * \param maskRefs vector of expected power values and corresponding indexes of generated PSD
      *                     (only start and stop indexes/values given)
-     * \param tolerance tolerance (in dB)
+     * \param tolerance tolerance
      * \param precision precision (in decimals)
      * \param puncturedSubchannels bitmap indicating whether a 20 MHz subchannel is punctured or not
      * (only for 802.11ax and later)
@@ -67,9 +59,10 @@
     WifiOfdmMaskSlopesTestCase(const std::string& name,
                                WifiStandard standard,
                                WifiPhyBand band,
-                               uint16_t channelWidth,
+                               MHz_u channelWidth,
+                               const std::vector<MHz_u>& centerFrequencies,
                                const IndexPowerVect& maskRefs,
-                               double tolerance,
+                               dB_u tolerance,
                                std::size_t precision,
                                const std::vector<bool>& puncturedSubchannels = std::vector<bool>{});
     ~WifiOfdmMaskSlopesTestCase() override = default;
@@ -84,22 +77,23 @@
      *
      * \param vect vector of sub-band index and relative power value pairs to which interpolated
      values should be appended
-     * \param start pair of sub-band index and relative power value (dBr) for interval start
-     * \param stop pair of sub-band index and relative power value (dBr) for interval stop
+     * \param start pair of sub-band index and relative power value for interval start
+     * \param stop pair of sub-band index and relative power value for interval stop
     */
     void InterpolateAndAppendValues(IndexPowerVect& vect,
                                     IndexPowerPair start,
                                     IndexPowerPair stop) const;
 
-    WifiStandard m_standard; ///< the wifi standard to use for the test
-    WifiPhyBand m_band;      ///< the wifi PHY band to use for the test
-    uint16_t m_channelWidth; ///< the channel width in MHz to use for the test
+    WifiStandard m_standard;          ///< the wifi standard to test
+    WifiPhyBand m_band;               ///< the wifi PHY band to test
+    MHz_u m_channelWidth;             ///< the total channel width to test
+    std::vector<MHz_u> m_centerFreqs; ///< the center frequency per contiguous segment to test
     std::vector<bool>
         m_puncturedSubchannels; ///< bitmap indicating whether a 20 MHz subchannel is punctured or
                                 ///< not (only used for 802.11ax and later)
     Ptr<SpectrumValue> m_actualSpectrum; ///< actual spectrum value
     IndexPowerVect m_expectedPsd;        ///< expected power values
-    double m_tolerance;                  ///< tolerance (in dB)
+    dB_u m_tolerance;                    ///< tolerance
     std::size_t m_precision;             ///< precision for double calculations (in decimals)
 };
 
@@ -107,15 +101,17 @@
     const std::string& name,
     WifiStandard standard,
     WifiPhyBand band,
-    uint16_t channelWidth,
+    MHz_u channelWidth,
+    const std::vector<MHz_u>& centerFrequencies,
     const IndexPowerVect& maskRefs,
-    double tolerance,
+    dB_u tolerance,
     std::size_t precision,
     const std::vector<bool>& puncturedSubchannels)
     : TestCase(std::string("SpectrumValue ") + name),
       m_standard{standard},
       m_band{band},
       m_channelWidth{channelWidth},
+      m_centerFreqs{centerFrequencies},
       m_puncturedSubchannels{puncturedSubchannels},
       m_actualSpectrum{},
       m_expectedPsd{maskRefs},
@@ -130,38 +126,34 @@
 WifiOfdmMaskSlopesTestCase::DoSetup()
 {
     NS_LOG_FUNCTION(this);
+    NS_ASSERT(!m_centerFreqs.empty());
     NS_ASSERT(m_expectedPsd.size() % 2 == 0); // start/stop pairs expected
 
-    uint16_t freq = 0;
-    double outerBandMaximumRejection = 0.0;
+    dBr_u outerBandMaximumRejection = 0.0;
     switch (m_band)
     {
     default:
     case WIFI_PHY_BAND_5GHZ:
-        freq = 5170 + (m_channelWidth / 2); // so as to have 5180/5190/5210/5250 for 20/40/80/160
-        outerBandMaximumRejection = -40;    // in dBr
+        outerBandMaximumRejection = -40;
         break;
     case WIFI_PHY_BAND_2_4GHZ:
-        freq = 2402 + (m_channelWidth / 2); // so as to have 2412/2422 for 20/40
-        outerBandMaximumRejection = (m_standard >= WIFI_STANDARD_80211n) ? -45 : -40; // in dBr
+        outerBandMaximumRejection = (m_standard >= WIFI_STANDARD_80211n) ? -45 : -40;
         break;
     case WIFI_PHY_BAND_6GHZ:
-        freq = 5945 + (m_channelWidth / 2); // so as to have 5945/5955/5975/6015 for 20/40/80/160
-        outerBandMaximumRejection = -40;    // in dBr
+        outerBandMaximumRejection = -40;
         break;
     }
 
-    double refTxPowerW = 1; // have to work in dBr when comparing though
+    Watt_u refTxPower{1}; // have to work in dBr when comparing though
     switch (m_standard)
     {
     case WIFI_STANDARD_80211p:
         NS_ASSERT(m_band == WIFI_PHY_BAND_5GHZ);
         NS_ASSERT((m_channelWidth == 5) || (m_channelWidth == 10));
-        freq = 5860;
         m_actualSpectrum =
-            WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(freq,
+            WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(m_centerFreqs.front(),
                                                                       m_channelWidth,
-                                                                      refTxPowerW,
+                                                                      refTxPower,
                                                                       m_channelWidth,
                                                                       -20.0,
                                                                       -28.0,
@@ -172,9 +164,9 @@
         NS_ASSERT(m_band == WIFI_PHY_BAND_2_4GHZ);
         NS_ASSERT(m_channelWidth == 20);
         m_actualSpectrum =
-            WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(freq,
+            WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(m_centerFreqs.front(),
                                                                       m_channelWidth,
-                                                                      refTxPowerW,
+                                                                      refTxPower,
                                                                       m_channelWidth,
                                                                       -20.0,
                                                                       -28.0,
@@ -185,9 +177,9 @@
         NS_ASSERT(m_band == WIFI_PHY_BAND_5GHZ);
         NS_ASSERT(m_channelWidth == 20);
         m_actualSpectrum =
-            WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(freq,
+            WifiSpectrumValueHelper::CreateOfdmTxPowerSpectralDensity(m_centerFreqs.front(),
                                                                       m_channelWidth,
-                                                                      refTxPowerW,
+                                                                      refTxPower,
                                                                       m_channelWidth,
                                                                       -20.0,
                                                                       -28.0,
@@ -197,9 +189,9 @@
     case WIFI_STANDARD_80211n:
         NS_ASSERT(m_channelWidth == 20 || m_channelWidth == 40);
         m_actualSpectrum =
-            WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(freq,
+            WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(m_centerFreqs,
                                                                         m_channelWidth,
-                                                                        refTxPowerW,
+                                                                        refTxPower,
                                                                         m_channelWidth,
                                                                         -20.0,
                                                                         -28.0,
@@ -211,9 +203,9 @@
         NS_ASSERT(m_channelWidth == 20 || m_channelWidth == 40 || m_channelWidth == 80 ||
                   m_channelWidth == 160);
         m_actualSpectrum =
-            WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(freq,
+            WifiSpectrumValueHelper::CreateHtOfdmTxPowerSpectralDensity(m_centerFreqs,
                                                                         m_channelWidth,
-                                                                        refTxPowerW,
+                                                                        refTxPower,
                                                                         m_channelWidth,
                                                                         -20.0,
                                                                         -28.0,
@@ -222,13 +214,13 @@
 
     case WIFI_STANDARD_80211ax:
         NS_ASSERT((m_band != WIFI_PHY_BAND_2_4GHZ) ||
-                  (m_channelWidth != 160)); // not enough space in 2.4 GHz bands
+                  (m_channelWidth < 80)); // not enough space in 2.4 GHz bands
         NS_ASSERT(m_channelWidth == 20 || m_channelWidth == 40 || m_channelWidth == 80 ||
                   m_channelWidth == 160);
         m_actualSpectrum =
-            WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(freq,
+            WifiSpectrumValueHelper::CreateHeOfdmTxPowerSpectralDensity(m_centerFreqs,
                                                                         m_channelWidth,
-                                                                        refTxPowerW,
+                                                                        refTxPower,
                                                                         m_channelWidth,
                                                                         -20.0,
                                                                         -28.0,
@@ -284,22 +276,22 @@
 WifiOfdmMaskSlopesTestCase::DoRun()
 {
     NS_LOG_FUNCTION(this);
-    double currentPowerDbr = 0.0; // have to work in dBr so as to compare with expected slopes
-    double maxPowerW = (*m_actualSpectrum)[0];
+    dBr_u currentPower = 0.0; // have to work in dBr so as to compare with expected slopes
+    Watt_u maxPower = (*m_actualSpectrum)[0];
     for (auto&& vit = m_actualSpectrum->ConstValuesBegin();
          vit != m_actualSpectrum->ConstValuesEnd();
          ++vit)
     {
-        maxPowerW = std::max(maxPowerW, *vit);
+        maxPower = std::max(maxPower, *vit);
     }
 
     NS_LOG_INFO("Compare expected PSD");
     for (const auto& [subcarrier, expectedValue] : m_expectedPsd)
     {
-        currentPowerDbr = 10.0 * std::log10((*m_actualSpectrum)[subcarrier] / maxPowerW);
+        currentPower = 10.0 * std::log10((*m_actualSpectrum)[subcarrier] / maxPower);
         NS_LOG_LOGIC("For " << subcarrier << ", expected: " << expectedValue
-                            << " vs obtained: " << currentPowerDbr);
-        NS_TEST_EXPECT_MSG_EQ_TOL(currentPowerDbr,
+                            << " vs obtained: " << currentPower);
+        NS_TEST_EXPECT_MSG_EQ_TOL(currentPower,
                                   expectedValue,
                                   m_tolerance,
                                   "Spectrum value mismatch for subcarrier " << subcarrier);
@@ -330,8 +322,8 @@
     NS_LOG_INFO("Creating WifiTransmitMaskTestSuite");
 
     WifiOfdmMaskSlopesTestCase::IndexPowerVect maskSlopes;
-    double tol = 10e-2; // in dB
-    double prec = 10;   // in decimals
+    dB_u tol = 10e-2;
+    double prec = 10; // in decimals
 
     // ============================================================================================
     // 11p 5MHz
@@ -359,6 +351,7 @@
                                                WIFI_STANDARD_80211p,
                                                WIFI_PHY_BAND_5GHZ,
                                                5,
+                                               {5860},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -390,6 +383,7 @@
                                                WIFI_STANDARD_80211p,
                                                WIFI_PHY_BAND_5GHZ,
                                                10,
+                                               {5860},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -421,6 +415,7 @@
                                                WIFI_STANDARD_80211a,
                                                WIFI_PHY_BAND_5GHZ,
                                                20,
+                                               {5180},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -434,6 +429,7 @@
                                                WIFI_STANDARD_80211g,
                                                WIFI_PHY_BAND_2_4GHZ,
                                                20,
+                                               {2412},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -465,6 +461,7 @@
                                                WIFI_STANDARD_80211n,
                                                WIFI_PHY_BAND_2_4GHZ,
                                                20,
+                                               {2412},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -496,6 +493,7 @@
                                                WIFI_STANDARD_80211n,
                                                WIFI_PHY_BAND_5GHZ,
                                                20,
+                                               {5180},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -527,6 +525,7 @@
                                                WIFI_STANDARD_80211n,
                                                WIFI_PHY_BAND_2_4GHZ,
                                                40,
+                                               {2422},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -558,6 +557,7 @@
                                                WIFI_STANDARD_80211n,
                                                WIFI_PHY_BAND_5GHZ,
                                                40,
+                                               {5190},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -589,6 +589,7 @@
                                                WIFI_STANDARD_80211ac,
                                                WIFI_PHY_BAND_5GHZ,
                                                20,
+                                               {5180},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -620,6 +621,7 @@
                                                WIFI_STANDARD_80211ac,
                                                WIFI_PHY_BAND_5GHZ,
                                                40,
+                                               {5190},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -651,6 +653,7 @@
                                                WIFI_STANDARD_80211ac,
                                                WIFI_PHY_BAND_5GHZ,
                                                80,
+                                               {5210},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -682,6 +685,67 @@
                                                WIFI_STANDARD_80211ac,
                                                WIFI_PHY_BAND_5GHZ,
                                                160,
+                                               {5250},
+                                               maskSlopes,
+                                               tol,
+                                               prec),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11ac 80+80MHz
+    NS_LOG_FUNCTION("Check slopes for 11ac 80+80MHz");
+    maskSlopes = {
+        std::make_pair(0, -40.0),     // Outer band left (start)
+        std::make_pair(127, -28.094), // Outer band left (stop)
+        std::make_pair(128, -28.000), // Middle band left (start)
+        std::make_pair(252, -20.064), // Middle band left (stop)
+        std::make_pair(253, -20.0),   // Flat junction band left (start)
+        std::make_pair(253, -20.0),   // Flat junction band left (stop)
+        std::make_pair(254, -20.0),   // Inner band left for first segment (start)
+        std::make_pair(259, -3.333),  // Inner band left for first segment (stop)
+        std::make_pair(509, -3.333),  // Inner band right for first segment (start)
+        std::make_pair(514, -20.0),   // Inner band right for first segment (stop)
+        std::make_pair(515, -20.0),   // Flat junction band right for first segment (start)
+        std::make_pair(515, -20.0),   // Flat junction band right for first segment (stop)
+        std::make_pair(516, -20.01),  // start linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(516, -20.01),  // start linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(639, -24.99),  // stop linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(639, -24.99),  // stop linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(640, -25.0),   // middle linear sum region (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(640, -25.0),   // middle linear sum region (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(641, -24.99), // start linear sum region right (no interpolation possible, so
+                                     // provide 2 times the same point)
+        std::make_pair(641, -24.99), // start linear sum region right (no interpolation possible, so
+                                     // provide 2 times the same point)
+        std::make_pair(764, -20.01), // stop linear sum region right (no interpolation possible, so
+                                     // provide 2 times the same point)
+        std::make_pair(764, -20.01), // stop linear sum region right (no interpolation possible, so
+                                     // provide 2 times the same point)
+        std::make_pair(765, -20.0),  // Flat junction band left (start)
+        std::make_pair(765, -20.0),  // Flat junction band left (stop)
+        std::make_pair(766, -20.0),  // Inner band left for second segment (start)
+        std::make_pair(771, -3.333), // Inner band left for second segment (stop)
+        std::make_pair(1021, -3.333),  // Inner band right for second segment (start)
+        std::make_pair(1026, -20.0),   // Inner band right for second segment (stop)
+        std::make_pair(1027, -20.0),   // Flat junction band right (start)
+        std::make_pair(1027, -20.0),   // Flat junction band right (stop)
+        std::make_pair(1028, -20.016), // Middle band right (start)
+        std::make_pair(1152, -28.000), // Middle band right (stop)
+        std::make_pair(1153, -28.023), // Outer band right (start)
+        std::make_pair(1280, -40.0),   // Outer band right (stop)
+    };
+
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11ac 80+80MHz",
+                                               WIFI_STANDARD_80211ac,
+                                               WIFI_PHY_BAND_5GHZ,
+                                               160,
+                                               {5530, 5690},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -719,6 +783,7 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_2_4GHZ,
                                                20,
+                                               {2412},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -756,6 +821,7 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_5GHZ,
                                                20,
+                                               {5180},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -793,6 +859,7 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_2_4GHZ,
                                                40,
+                                               {2422},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -830,43 +897,7 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_5GHZ,
                                                40,
-                                               maskSlopes,
-                                               tol,
-                                               prec),
-                TestCase::Duration::QUICK);
-
-    // ============================================================================================
-    // 11ax 80MHz @ 2.4GHz
-    NS_LOG_FUNCTION("Check slopes for 11ax 80MHz @ 2.4GHz");
-    maskSlopes = {
-        std::make_pair(0, -45.000),    // Outer band left (start)
-        std::make_pair(511, -28.033),  // Outer band left (stop)
-        std::make_pair(512, -28.000),  // Middle band left (start)
-        std::make_pair(1017, -20.016), // Middle band left (stop)
-        std::make_pair(1018, -20.0),   // Flat junction band left (start)
-        std::make_pair(1022, -20.0),   // Flat junction band left (stop)
-        std::make_pair(1023, -20.0),   // Inner band left (start)
-        std::make_pair(1035, -1.538),  // Inner band left (stop)
-        std::make_pair(1036, 0.0),     // allocated band left (start)
-        std::make_pair(1533, 0.0),     // allocated band left (stop)
-        std::make_pair(1534, -20.0),   // DC band (start)
-        std::make_pair(1538, -20.0),   // DC band (stop)
-        std::make_pair(1539, 0.0),     // allocated band right (start)
-        std::make_pair(2036, 0.0),     // allocated band right (stop)
-        std::make_pair(2037, -1.538),  // Inner band right (start)
-        std::make_pair(2049, -20.0),   // Inner band right (stop)
-        std::make_pair(2050, -20.0),   // Flat junction band right (start)
-        std::make_pair(2054, -20.0),   // Flat junction band right (stop)
-        std::make_pair(2055, -20.016), // Middle band right (start)
-        std::make_pair(2560, -28.000), // Middle band right (stop)
-        std::make_pair(2561, -28.033), // Outer band right (start)
-        std::make_pair(3072, -45.000), // Outer band right (stop)
-    };
-
-    AddTestCase(new WifiOfdmMaskSlopesTestCase("11ax_2.4GHz 80MHz",
-                                               WIFI_STANDARD_80211ax,
-                                               WIFI_PHY_BAND_2_4GHZ,
-                                               80,
+                                               {5190},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -904,15 +935,13 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_5GHZ,
                                                80,
+                                               {5210},
                                                maskSlopes,
                                                tol,
                                                prec),
                 TestCase::Duration::QUICK);
 
     // ============================================================================================
-    // 11ax 160MHz @ 2.4GHz -> not enough space so skip
-
-    // ============================================================================================
     // 11ax 160MHz @ 5GHz
     NS_LOG_FUNCTION("Check slopes for 11ax 160MHz @ 5GHz");
     maskSlopes = {
@@ -952,6 +981,152 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_5GHZ,
                                                160,
+                                               {5250},
+                                               maskSlopes,
+                                               tol,
+                                               prec),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11ax 80+80MHz @ 5GHz
+    NS_LOG_FUNCTION("Check slopes for 11ax 80+80MHz @ 5GHz");
+    maskSlopes = {
+        std::make_pair(0, -40.0),      // Outer band left (start)
+        std::make_pair(511, -28.023),  // Outer band left (stop)
+        std::make_pair(512, -28.000),  // Middle band left (start)
+        std::make_pair(1017, -20.016), // Middle band left (stop)
+        std::make_pair(1018, -20.0),   // Flat junction band left (start)
+        std::make_pair(1022, -20.0),   // Flat junction band left (stop)
+        std::make_pair(1023, -20.0),   // Inner band left for first segment (start)
+        std::make_pair(1035, -1.538),  // Inner band left for first segment (stop)
+        std::make_pair(1036, 0.0),     // allocated band left for first segment (start)
+        std::make_pair(1533, 0.0),     // allocated band left for first segment (stop)
+        std::make_pair(1534, -20.0),   // DC band for first segment (start)
+        std::make_pair(1538, -20.0),   // DC band for first segment (stop)
+        std::make_pair(1539, 0.0),     // allocated band right for first segment (start)
+        std::make_pair(2036, 0.0),     // allocated band right for first segment (stop)
+        std::make_pair(2037, -1.538),  // Inner band right for first segment (start)
+        std::make_pair(2049, -20.0),   // Inner band right for first segment (stop)
+        std::make_pair(2050, -20.0),   // Flat junction band right for first segment (start)
+        std::make_pair(2054, -20.0),   // Flat junction band right for first segment (stop)
+        std::make_pair(2055, -20.01), // start linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(2055, -20.01), // start linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(2559, -24.99), // stop linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(2559, -24.99), // stop linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(2560, -25.0),  // middle linear sum region (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(2560, -25.0),  // middle linear sum region (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(2561, -24.99), // start linear sum region right (no interpolation possible,
+                                      // so provide 2 times the same point)
+        std::make_pair(2561, -24.99), // start linear sum region right (no interpolation possible,
+                                      // so provide 2 times the same point)
+        std::make_pair(3065, -20.01), // stop linear sum region right (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(3065, -20.01), // stop linear sum region right (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(3066, -20.0),  // Flat junction band left (start)
+        std::make_pair(3070, -20.0),  // Flat junction band left (stop)
+        std::make_pair(3071, -20.0),  // Inner band left for second segment (start)
+        std::make_pair(3083, -1.538), // Inner band left for second segment (stop)
+        std::make_pair(3084, 0.0),    // allocated band left for second segment (start)
+        std::make_pair(3581, 0.0),    // allocated band left for second segment (stop)
+        std::make_pair(3582, -20.0),  // DC band for second segment (start)
+        std::make_pair(3586, -20.0),  // DC band for second segment (stop)
+        std::make_pair(3587, 0.0),    // allocated band right for second segment (start)
+        std::make_pair(4084, 0.0),    // allocated band right for second segment (stop)
+        std::make_pair(4085, -1.538), // Inner band right for second segment (start)
+        std::make_pair(4097, -20.0),  // Inner band right for second segment (stop)
+        std::make_pair(4098, -20.0),  // Flat junction band right (start)
+        std::make_pair(4102, -20.0),  // Flat junction band right (stop)
+        std::make_pair(4103, -20.016), // Middle band right (start)
+        std::make_pair(4608, -28.000), // Middle band right (stop)
+        std::make_pair(4609, -28.023), // Outer band right (start)
+        std::make_pair(5120, -40.0),   // Outer band right (stop)
+    };
+
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11ax_5GHz 80+80MHz",
+                                               WIFI_STANDARD_80211ax,
+                                               WIFI_PHY_BAND_5GHZ,
+                                               160,
+                                               {5530, 5690},
+                                               maskSlopes,
+                                               tol,
+                                               prec),
+                TestCase::Duration::QUICK);
+
+    // ============================================================================================
+    // 11ax 80+80MHz @ 5GHz
+    NS_LOG_FUNCTION("Check slopes for 11ax 80+80MHz @ 5GHz with larger frequency separation "
+                    "between the two PSDs");
+    maskSlopes = {
+        std::make_pair(0, -40.0),      // Outer band left (start)
+        std::make_pair(511, -28.023),  // Outer band left (stop)
+        std::make_pair(512, -28.000),  // Middle band left (start)
+        std::make_pair(1017, -20.016), // Middle band left (stop)
+        std::make_pair(1018, -20.0),   // Flat junction band left (start)
+        std::make_pair(1022, -20.0),   // Flat junction band left (stop)
+        std::make_pair(1023, -20.0),   // Inner band left for first segment (start)
+        std::make_pair(1035, -1.538),  // Inner band left for first segment (stop)
+        std::make_pair(1036, 0.0),     // allocated band left for first segment (start)
+        std::make_pair(1533, 0.0),     // allocated band left for first segment (stop)
+        std::make_pair(1534, -20.0),   // DC band for first segment (start)
+        std::make_pair(1538, -20.0),   // DC band for first segment (stop)
+        std::make_pair(1539, 0.0),     // allocated band right for first segment (start)
+        std::make_pair(2036, 0.0),     // allocated band right for first segment (stop)
+        std::make_pair(2037, -1.538),  // Inner band right for first segment (start)
+        std::make_pair(2049, -20.0),   // Inner band right for first segment (stop)
+        std::make_pair(2050, -20.0),   // Flat junction band right for first segment (start)
+        std::make_pair(2054, -20.0),   // Flat junction band right for first segment (stop)
+        std::make_pair(2055, -20.01), // start linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(2055, -20.01), // start linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(3583, -24.99), // stop linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(3583, -24.99), // stop linear sum region left (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(3584, -25.0),  // middle linear sum region (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(3584, -25.0),  // middle linear sum region (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(3585, -24.99), // start linear sum region right (no interpolation possible,
+                                      // so provide 2 times the same point)
+        std::make_pair(3585, -24.99), // start linear sum region right (no interpolation possible,
+                                      // so provide 2 times the same point)
+        std::make_pair(5113, -20.01), // stop linear sum region right (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(5113, -20.01), // stop linear sum region right (no interpolation possible, so
+                                      // provide 2 times the same point)
+        std::make_pair(5114, -20.0),  // Flat junction band left (start)
+        std::make_pair(5118, -20.0),  // Flat junction band left (stop)
+        std::make_pair(5119, -20.0),  // Inner band left for second segment (start)
+        std::make_pair(5131, -1.538), // Inner band left for second segment (stop)
+        std::make_pair(5132, 0.0),    // allocated band left for second segment (start)
+        std::make_pair(5629, 0.0),    // allocated band left for second segment (stop)
+        std::make_pair(5630, -20.0),  // DC band for second segment (start)
+        std::make_pair(5634, -20.0),  // DC band for second segment (stop)
+        std::make_pair(5635, 0.0),    // allocated band right for second segment (start)
+        std::make_pair(6132, 0.0),    // allocated band right for second segment (stop)
+        std::make_pair(6133, -1.538), // Inner band right for second segment (start)
+        std::make_pair(6145, -20.0),  // Inner band right for second segment (stop)
+        std::make_pair(6146, -20.0),  // Flat junction band right (start)
+        std::make_pair(6150, -20.0),  // Flat junction band right (stop)
+        std::make_pair(6151, -20.016), // Middle band right (start)
+        std::make_pair(6656, -28.000), // Middle band right (stop)
+        std::make_pair(6657, -28.023), // Outer band right (start)
+        std::make_pair(7168, -40.0),   // Outer band right (stop)
+    };
+
+    AddTestCase(new WifiOfdmMaskSlopesTestCase("11ax_5GHz 80+80MHz large separation",
+                                               WIFI_STANDARD_80211ax,
+                                               WIFI_PHY_BAND_5GHZ,
+                                               160,
+                                               {5210, 5530},
                                                maskSlopes,
                                                tol,
                                                prec),
@@ -991,6 +1166,7 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_5GHZ,
                                                80,
+                                               {5210},
                                                maskSlopes,
                                                tol,
                                                prec,
@@ -1035,6 +1211,7 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_5GHZ,
                                                80,
+                                               {5210},
                                                maskSlopes,
                                                tol,
                                                prec,
@@ -1079,6 +1256,7 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_5GHZ,
                                                80,
+                                               {5210},
                                                maskSlopes,
                                                tol,
                                                prec,
@@ -1119,6 +1297,7 @@
                                                WIFI_STANDARD_80211ax,
                                                WIFI_PHY_BAND_5GHZ,
                                                80,
+                                               {5210},
                                                maskSlopes,
                                                tol,
                                                prec,
@@ -1167,6 +1346,7 @@
                                        WIFI_STANDARD_80211ax,
                                        WIFI_PHY_BAND_5GHZ,
                                        160,
+                                       {5250},
                                        maskSlopes,
                                        tol,
                                        prec,
@@ -1217,6 +1397,7 @@
                                        WIFI_STANDARD_80211ax,
                                        WIFI_PHY_BAND_5GHZ,
                                        160,
+                                       {5250},
                                        maskSlopes,
                                        tol,
                                        prec,
@@ -1267,6 +1448,7 @@
                                        WIFI_STANDARD_80211ax,
                                        WIFI_PHY_BAND_5GHZ,
                                        160,
+                                       {5250},
                                        maskSlopes,
                                        tol,
                                        prec,
@@ -1315,6 +1497,7 @@
                                        WIFI_STANDARD_80211ax,
                                        WIFI_PHY_BAND_5GHZ,
                                        160,
+                                       {5250},
                                        maskSlopes,
                                        tol,
                                        prec,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wifi/test/wifi-txop-test.cc ns-3.43/src/wifi/test/wifi-txop-test.cc
--- ns-3.42/src/wifi/test/wifi-txop-test.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wifi/test/wifi-txop-test.cc	2024-10-09 16:41:10.140657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2020 Universita' degli Studi di Napoli Federico II
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Stefano Avallone <stavallo@unina.it>
  */
@@ -331,7 +320,7 @@
     }
 
     // Assign fixed streams to random variables in use
-    wifi.AssignStreams(m_apDevices, streamNumber);
+    WifiHelper::AssignStreams(m_apDevices, streamNumber);
 
     MobilityHelper mobility;
     Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator>();
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/examples/wimax-ipv4.cc ns-3.43/src/wimax/examples/wimax-ipv4.cc
--- ns-3.42/src/wimax/examples/wimax-ipv4.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wimax/examples/wimax-ipv4.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/examples/wimax-multicast.cc ns-3.43/src/wimax/examples/wimax-multicast.cc
--- ns-3.42/src/wimax/examples/wimax-multicast.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wimax/examples/wimax-multicast.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/examples/wimax-simple.cc ns-3.43/src/wimax/examples/wimax-simple.cc
--- ns-3.42/src/wimax/examples/wimax-simple.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wimax/examples/wimax-simple.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/helper/wimax-helper.cc ns-3.43/src/wimax/helper/wimax-helper.cc
--- ns-3.42/src/wimax/helper/wimax-helper.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wimax/helper/wimax-helper.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/helper/wimax-helper.h ns-3.43/src/wimax/helper/wimax-helper.h
--- ns-3.42/src/wimax/helper/wimax-helper.h	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wimax/helper/wimax-helper.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDCAST
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bandwidth-manager.cc ns-3.43/src/wimax/model/bandwidth-manager.cc
--- ns-3.42/src/wimax/model/bandwidth-manager.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wimax/model/bandwidth-manager.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bandwidth-manager.h ns-3.43/src/wimax/model/bandwidth-manager.h
--- ns-3.42/src/wimax/model/bandwidth-manager.h	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wimax/model/bandwidth-manager.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-link-manager.cc ns-3.43/src/wimax/model/bs-link-manager.cc
--- ns-3.42/src/wimax/model/bs-link-manager.cc	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wimax/model/bs-link-manager.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-link-manager.h ns-3.43/src/wimax/model/bs-link-manager.h
--- ns-3.42/src/wimax/model/bs-link-manager.h	2024-05-29 15:29:47.220074000 -0700
+++ ns-3.43/src/wimax/model/bs-link-manager.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-net-device.cc ns-3.43/src/wimax/model/bs-net-device.cc
--- ns-3.42/src/wimax/model/bs-net-device.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-net-device.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-net-device.h ns-3.43/src/wimax/model/bs-net-device.h
--- ns-3.42/src/wimax/model/bs-net-device.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-net-device.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-scheduler.cc ns-3.43/src/wimax/model/bs-scheduler.cc
--- ns-3.42/src/wimax/model/bs-scheduler.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-scheduler.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-scheduler.h ns-3.43/src/wimax/model/bs-scheduler.h
--- ns-3.42/src/wimax/model/bs-scheduler.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-scheduler.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-scheduler-rtps.cc ns-3.43/src/wimax/model/bs-scheduler-rtps.cc
--- ns-3.42/src/wimax/model/bs-scheduler-rtps.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-scheduler-rtps.cc	2024-10-09 16:41:10.144657000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007,2008 INRIA
  *               2009 TELEMATICS LAB, Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro <g.piro@poliba.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-scheduler-rtps.h ns-3.43/src/wimax/model/bs-scheduler-rtps.h
--- ns-3.42/src/wimax/model/bs-scheduler-rtps.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-scheduler-rtps.h	2024-10-09 16:41:10.144657000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007,2008 INRIA
  *               2009 TELEMATICS LAB, Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro <g.piro@poliba.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-scheduler-simple.cc ns-3.43/src/wimax/model/bs-scheduler-simple.cc
--- ns-3.42/src/wimax/model/bs-scheduler-simple.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-scheduler-simple.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-scheduler-simple.h ns-3.43/src/wimax/model/bs-scheduler-simple.h
--- ns-3.42/src/wimax/model/bs-scheduler-simple.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-scheduler-simple.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-service-flow-manager.cc ns-3.43/src/wimax/model/bs-service-flow-manager.cc
--- ns-3.42/src/wimax/model/bs-service-flow-manager.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-service-flow-manager.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-service-flow-manager.h ns-3.43/src/wimax/model/bs-service-flow-manager.h
--- ns-3.42/src/wimax/model/bs-service-flow-manager.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-service-flow-manager.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-uplink-scheduler.cc ns-3.43/src/wimax/model/bs-uplink-scheduler.cc
--- ns-3.42/src/wimax/model/bs-uplink-scheduler.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-uplink-scheduler.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-uplink-scheduler.h ns-3.43/src/wimax/model/bs-uplink-scheduler.h
--- ns-3.42/src/wimax/model/bs-uplink-scheduler.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-uplink-scheduler.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-uplink-scheduler-mbqos.cc ns-3.43/src/wimax/model/bs-uplink-scheduler-mbqos.cc
--- ns-3.42/src/wimax/model/bs-uplink-scheduler-mbqos.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-uplink-scheduler-mbqos.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  */
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-uplink-scheduler-mbqos.h ns-3.43/src/wimax/model/bs-uplink-scheduler-mbqos.h
--- ns-3.42/src/wimax/model/bs-uplink-scheduler-mbqos.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-uplink-scheduler-mbqos.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA/LRC - Computer Networks Laboratory
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Flavio Kobuta <flaviokubota@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-uplink-scheduler-rtps.cc ns-3.43/src/wimax/model/bs-uplink-scheduler-rtps.cc
--- ns-3.42/src/wimax/model/bs-uplink-scheduler-rtps.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-uplink-scheduler-rtps.cc	2024-10-09 16:41:10.144657000 -0700
@@ -2,18 +2,7 @@
  * Copyright (c) 2007,2008 INRIA
  *               2009 TELEMATICS LAB, Politecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro <g.piro@poliba.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-uplink-scheduler-rtps.h ns-3.43/src/wimax/model/bs-uplink-scheduler-rtps.h
--- ns-3.42/src/wimax/model/bs-uplink-scheduler-rtps.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-uplink-scheduler-rtps.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Giuseppe Piro <g.piro@poliba.it>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-uplink-scheduler-simple.cc ns-3.43/src/wimax/model/bs-uplink-scheduler-simple.cc
--- ns-3.42/src/wimax/model/bs-uplink-scheduler-simple.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-uplink-scheduler-simple.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bs-uplink-scheduler-simple.h ns-3.43/src/wimax/model/bs-uplink-scheduler-simple.h
--- ns-3.42/src/wimax/model/bs-uplink-scheduler-simple.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bs-uplink-scheduler-simple.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/burst-profile-manager.cc ns-3.43/src/wimax/model/burst-profile-manager.cc
--- ns-3.42/src/wimax/model/burst-profile-manager.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/burst-profile-manager.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/burst-profile-manager.h ns-3.43/src/wimax/model/burst-profile-manager.h
--- ns-3.42/src/wimax/model/burst-profile-manager.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/burst-profile-manager.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/bvec.h ns-3.43/src/wimax/model/bvec.h
--- ns-3.42/src/wimax/model/bvec.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/bvec.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/cid.cc ns-3.43/src/wimax/model/cid.cc
--- ns-3.42/src/wimax/model/cid.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/cid.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/cid-factory.cc ns-3.43/src/wimax/model/cid-factory.cc
--- ns-3.42/src/wimax/model/cid-factory.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/cid-factory.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/cid-factory.h ns-3.43/src/wimax/model/cid-factory.h
--- ns-3.42/src/wimax/model/cid-factory.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/cid-factory.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/cid.h ns-3.43/src/wimax/model/cid.h
--- ns-3.42/src/wimax/model/cid.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/cid.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/connection-manager.cc ns-3.43/src/wimax/model/connection-manager.cc
--- ns-3.42/src/wimax/model/connection-manager.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/connection-manager.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/connection-manager.h ns-3.43/src/wimax/model/connection-manager.h
--- ns-3.42/src/wimax/model/connection-manager.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/connection-manager.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/crc8.cc ns-3.43/src/wimax/model/crc8.cc
--- ns-3.42/src/wimax/model/crc8.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/crc8.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/crc8.h ns-3.43/src/wimax/model/crc8.h
--- ns-3.42/src/wimax/model/crc8.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/crc8.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/cs-parameters.cc ns-3.43/src/wimax/model/cs-parameters.cc
--- ns-3.42/src/wimax/model/cs-parameters.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/cs-parameters.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/cs-parameters.h ns-3.43/src/wimax/model/cs-parameters.h
--- ns-3.42/src/wimax/model/cs-parameters.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/cs-parameters.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/default-traces.h ns-3.43/src/wimax/model/default-traces.h
--- ns-3.42/src/wimax/model/default-traces.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/default-traces.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/dl-mac-messages.cc ns-3.43/src/wimax/model/dl-mac-messages.cc
--- ns-3.42/src/wimax/model/dl-mac-messages.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/dl-mac-messages.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/dl-mac-messages.h ns-3.43/src/wimax/model/dl-mac-messages.h
--- ns-3.42/src/wimax/model/dl-mac-messages.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/dl-mac-messages.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ipcs-classifier.cc ns-3.43/src/wimax/model/ipcs-classifier.cc
--- ns-3.42/src/wimax/model/ipcs-classifier.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ipcs-classifier.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ipcs-classifier.h ns-3.43/src/wimax/model/ipcs-classifier.h
--- ns-3.42/src/wimax/model/ipcs-classifier.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ipcs-classifier.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ipcs-classifier-record.cc ns-3.43/src/wimax/model/ipcs-classifier-record.cc
--- ns-3.42/src/wimax/model/ipcs-classifier-record.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ipcs-classifier-record.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ipcs-classifier-record.h ns-3.43/src/wimax/model/ipcs-classifier-record.h
--- ns-3.42/src/wimax/model/ipcs-classifier-record.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ipcs-classifier-record.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/mac-messages.cc ns-3.43/src/wimax/model/mac-messages.cc
--- ns-3.42/src/wimax/model/mac-messages.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/mac-messages.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/mac-messages.h ns-3.43/src/wimax/model/mac-messages.h
--- ns-3.42/src/wimax/model/mac-messages.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/mac-messages.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
@@ -476,15 +465,14 @@
  * This class implements the DSA-RSP message described by "IEEE Standard for
  * Local and metropolitan area networks Part 16: Air Interface for Fixed Broadband Wireless Access
  * Systems" 6.3.2.3.11 DSA-RSP message, page 63
- *
  * \verbatim
- *   0             7             15            23
- *  +-------------+-------------+-------------+
- *  |Mngt msg type|       Transaction ID      |
- *  +-------------+-------------+-------------+
- *  | Conf Code   | Service Flow TLV          |
- *  +~~~~~~~~~~~~~+~~~~~~~~~~~~~+~~~~~~~~~~~~~+
- * \endverbatim
+   0             7             15            23
+   +-------------+-------------+-------------+
+   |Mngt msg type|       Transaction ID      |
+   +-------------+-------------+-------------+
+   | Conf Code   | Service Flow TLV          |
+   +~~~~~~~~~~~~~+~~~~~~~~~~~~~+~~~~~~~~~~~~~+
+   \endverbatim
  */
 class DsaRsp : public Header
 {
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ofdm-downlink-frame-prefix.cc ns-3.43/src/wimax/model/ofdm-downlink-frame-prefix.cc
--- ns-3.42/src/wimax/model/ofdm-downlink-frame-prefix.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ofdm-downlink-frame-prefix.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ofdm-downlink-frame-prefix.h ns-3.43/src/wimax/model/ofdm-downlink-frame-prefix.h
--- ns-3.42/src/wimax/model/ofdm-downlink-frame-prefix.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ofdm-downlink-frame-prefix.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/send-params.cc ns-3.43/src/wimax/model/send-params.cc
--- ns-3.42/src/wimax/model/send-params.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/send-params.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/send-params.h ns-3.43/src/wimax/model/send-params.h
--- ns-3.42/src/wimax/model/send-params.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/send-params.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/service-flow.cc ns-3.43/src/wimax/model/service-flow.cc
--- ns-3.42/src/wimax/model/service-flow.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/service-flow.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/service-flow.h ns-3.43/src/wimax/model/service-flow.h
--- ns-3.42/src/wimax/model/service-flow.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/service-flow.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/service-flow-manager.cc ns-3.43/src/wimax/model/service-flow-manager.cc
--- ns-3.42/src/wimax/model/service-flow-manager.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/service-flow-manager.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/service-flow-manager.h ns-3.43/src/wimax/model/service-flow-manager.h
--- ns-3.42/src/wimax/model/service-flow-manager.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/service-flow-manager.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
@@ -111,13 +100,13 @@
     uint32_t GetNrServiceFlows() const;
 
     /**
-     *\param SrcAddress the source ip address
-     *\param DstAddress the destination ip address
-     *\param SrcPort the source port
-     *\param DstPort the destination port
-     *\param Proto the protocol
-     *\param dir the direction of the service flow
-     *\return the service flow to which this ip flow is associated
+     * \param SrcAddress the source ip address
+     * \param DstAddress the destination ip address
+     * \param SrcPort the source port
+     * \param DstPort the destination port
+     * \param Proto the protocol
+     * \param dir the direction of the service flow
+     * \return the service flow to which this ip flow is associated
      */
     ServiceFlow* DoClassify(Ipv4Address SrcAddress,
                             Ipv4Address DstAddress,
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/service-flow-record.cc ns-3.43/src/wimax/model/service-flow-record.cc
--- ns-3.42/src/wimax/model/service-flow-record.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/service-flow-record.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/service-flow-record.h ns-3.43/src/wimax/model/service-flow-record.h
--- ns-3.42/src/wimax/model/service-flow-record.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/service-flow-record.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/simple-ofdm-send-param.cc ns-3.43/src/wimax/model/simple-ofdm-send-param.cc
--- ns-3.42/src/wimax/model/simple-ofdm-send-param.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/simple-ofdm-send-param.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/simple-ofdm-send-param.h ns-3.43/src/wimax/model/simple-ofdm-send-param.h
--- ns-3.42/src/wimax/model/simple-ofdm-send-param.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/simple-ofdm-send-param.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/simple-ofdm-wimax-channel.cc ns-3.43/src/wimax/model/simple-ofdm-wimax-channel.cc
--- ns-3.42/src/wimax/model/simple-ofdm-wimax-channel.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/simple-ofdm-wimax-channel.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/simple-ofdm-wimax-channel.h ns-3.43/src/wimax/model/simple-ofdm-wimax-channel.h
--- ns-3.42/src/wimax/model/simple-ofdm-wimax-channel.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/simple-ofdm-wimax-channel.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/simple-ofdm-wimax-phy.cc ns-3.43/src/wimax/model/simple-ofdm-wimax-phy.cc
--- ns-3.42/src/wimax/model/simple-ofdm-wimax-phy.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/simple-ofdm-wimax-phy.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/simple-ofdm-wimax-phy.h ns-3.43/src/wimax/model/simple-ofdm-wimax-phy.h
--- ns-3.42/src/wimax/model/simple-ofdm-wimax-phy.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/simple-ofdm-wimax-phy.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
@@ -483,6 +472,7 @@
      * \deprecated The non-const \c Ptr<PacketBurst> argument is deprecated
      * and will be changed to \c Ptrc<PacketBurst> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<PacketBurst>> m_phyTxBeginTrace;
 
     /**
@@ -493,6 +483,7 @@
      * \deprecated The non-const \c Ptr<PacketBurst> argument is deprecated
      * and will be changed to \c Ptrc<PacketBurst> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<PacketBurst>> m_phyTxEndTrace;
 
     /**
@@ -503,6 +494,7 @@
      * \deprecated The non-const \c Ptr<PacketBurst> argument is deprecated
      * and will be changed to \c Ptrc<PacketBurst> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<PacketBurst>> m_phyTxDropTrace;
 
     /**
@@ -513,6 +505,7 @@
      * \deprecated The non-const \c Ptr<PacketBurst> argument is deprecated
      * and will be changed to \c Ptrc<PacketBurst> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<PacketBurst>> m_phyRxBeginTrace;
 
     /**
@@ -523,6 +516,7 @@
      * \deprecated The non-const \c Ptr<PacketBurst> argument is deprecated
      * and will be changed to \c Ptrc<PacketBurst> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<PacketBurst>> m_phyRxEndTrace;
 
     /**
@@ -532,6 +526,7 @@
      * \deprecated The non-const \c Ptr<PacketBurst> argument is deprecated
      * and will be changed to \c Ptrc<PacketBurst> in a future release.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<PacketBurst>> m_phyRxDropTrace;
 
     SNRToBlockErrorRateManager* m_snrToBlockErrorRateManager; ///< SNR to block error rate manager
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/snr-to-block-error-rate-manager.cc ns-3.43/src/wimax/model/snr-to-block-error-rate-manager.cc
--- ns-3.42/src/wimax/model/snr-to-block-error-rate-manager.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/snr-to-block-error-rate-manager.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/snr-to-block-error-rate-manager.h ns-3.43/src/wimax/model/snr-to-block-error-rate-manager.h
--- ns-3.42/src/wimax/model/snr-to-block-error-rate-manager.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/snr-to-block-error-rate-manager.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/snr-to-block-error-rate-record.cc ns-3.43/src/wimax/model/snr-to-block-error-rate-record.cc
--- ns-3.42/src/wimax/model/snr-to-block-error-rate-record.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/snr-to-block-error-rate-record.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/snr-to-block-error-rate-record.h ns-3.43/src/wimax/model/snr-to-block-error-rate-record.h
--- ns-3.42/src/wimax/model/snr-to-block-error-rate-record.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/snr-to-block-error-rate-record.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-link-manager.cc ns-3.43/src/wimax/model/ss-link-manager.cc
--- ns-3.42/src/wimax/model/ss-link-manager.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-link-manager.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-link-manager.h ns-3.43/src/wimax/model/ss-link-manager.h
--- ns-3.42/src/wimax/model/ss-link-manager.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-link-manager.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-manager.cc ns-3.43/src/wimax/model/ss-manager.cc
--- ns-3.42/src/wimax/model/ss-manager.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-manager.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-manager.h ns-3.43/src/wimax/model/ss-manager.h
--- ns-3.42/src/wimax/model/ss-manager.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-manager.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-net-device.cc ns-3.43/src/wimax/model/ss-net-device.cc
--- ns-3.42/src/wimax/model/ss-net-device.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-net-device.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-net-device.h ns-3.43/src/wimax/model/ss-net-device.h
--- ns-3.42/src/wimax/model/ss-net-device.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-net-device.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-record.cc ns-3.43/src/wimax/model/ss-record.cc
--- ns-3.42/src/wimax/model/ss-record.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-record.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-record.h ns-3.43/src/wimax/model/ss-record.h
--- ns-3.42/src/wimax/model/ss-record.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-record.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-scheduler.cc ns-3.43/src/wimax/model/ss-scheduler.cc
--- ns-3.42/src/wimax/model/ss-scheduler.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-scheduler.cc	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-scheduler.h ns-3.43/src/wimax/model/ss-scheduler.h
--- ns-3.42/src/wimax/model/ss-scheduler.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-scheduler.h	2024-10-09 16:41:10.144657000 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-service-flow-manager.cc ns-3.43/src/wimax/model/ss-service-flow-manager.cc
--- ns-3.42/src/wimax/model/ss-service-flow-manager.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-service-flow-manager.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ss-service-flow-manager.h ns-3.43/src/wimax/model/ss-service-flow-manager.h
--- ns-3.42/src/wimax/model/ss-service-flow-manager.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ss-service-flow-manager.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *  Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ul-job.cc ns-3.43/src/wimax/model/ul-job.cc
--- ns-3.42/src/wimax/model/ul-job.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ul-job.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Juliana Freitag Borin, Flavio Kubota and Nelson L.
  * S. da Fonseca - wimaxgroup@lrc.ic.unicamp.br
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ul-job.h ns-3.43/src/wimax/model/ul-job.h
--- ns-3.42/src/wimax/model/ul-job.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ul-job.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c)
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author:  Juliana Freitag Borin, Flavio Kubota and Nelson L.
  * S. da Fonseca - wimaxgroup@lrc.ic.unicamp.br
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ul-mac-messages.cc ns-3.43/src/wimax/model/ul-mac-messages.cc
--- ns-3.42/src/wimax/model/ul-mac-messages.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ul-mac-messages.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/ul-mac-messages.h ns-3.43/src/wimax/model/ul-mac-messages.h
--- ns-3.42/src/wimax/model/ul-mac-messages.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/ul-mac-messages.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-channel.cc ns-3.43/src/wimax/model/wimax-channel.cc
--- ns-3.42/src/wimax/model/wimax-channel.cc	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/wimax-channel.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-channel.h ns-3.43/src/wimax/model/wimax-channel.h
--- ns-3.42/src/wimax/model/wimax-channel.h	2024-05-29 15:29:47.224074000 -0700
+++ ns-3.43/src/wimax/model/wimax-channel.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-connection.cc ns-3.43/src/wimax/model/wimax-connection.cc
--- ns-3.42/src/wimax/model/wimax-connection.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-connection.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-connection.h ns-3.43/src/wimax/model/wimax-connection.h
--- ns-3.42/src/wimax/model/wimax-connection.h	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-connection.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-mac-header.cc ns-3.43/src/wimax/model/wimax-mac-header.cc
--- ns-3.42/src/wimax/model/wimax-mac-header.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-mac-header.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-mac-header.h ns-3.43/src/wimax/model/wimax-mac-header.h
--- ns-3.42/src/wimax/model/wimax-mac-header.h	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-mac-header.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-mac-queue.cc ns-3.43/src/wimax/model/wimax-mac-queue.cc
--- ns-3.42/src/wimax/model/wimax-mac-queue.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-mac-queue.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *         Mohamed Amine Ismail <Amine.Ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-mac-queue.h ns-3.43/src/wimax/model/wimax-mac-queue.h
--- ns-3.42/src/wimax/model/wimax-mac-queue.h	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-mac-queue.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-mac-to-mac-header.cc ns-3.43/src/wimax/model/wimax-mac-to-mac-header.cc
--- ns-3.42/src/wimax/model/wimax-mac-to-mac-header.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-mac-to-mac-header.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2010 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-mac-to-mac-header.h ns-3.43/src/wimax/model/wimax-mac-to-mac-header.h
--- ns-3.42/src/wimax/model/wimax-mac-to-mac-header.h	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-mac-to-mac-header.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2010 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-net-device.cc ns-3.43/src/wimax/model/wimax-net-device.cc
--- ns-3.42/src/wimax/model/wimax-net-device.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-net-device.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008,2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-net-device.h ns-3.43/src/wimax/model/wimax-net-device.h
--- ns-3.42/src/wimax/model/wimax-net-device.h	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-net-device.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Authors: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  *          Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
@@ -446,6 +435,7 @@
      * The TracedCallback signature will then match \c Packet::Mac48Address
      * and this typedef can be removed.
      */
+    // NS_DEPRECATED() - tag for future removal
     typedef void (*TxRxTracedCallback)(Ptr<const Packet> packet, const Mac48Address& mac);
     /**
      * \deprecated The `const Mac48Address &` argument is deprecated
@@ -454,6 +444,7 @@
      * and this typedef can be removed.
      * \todo This member variable should be private.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<const Packet>, const Mac48Address&> m_traceRx;
     /**
      * \deprecated The `const Mac48Address &` argument is deprecated
@@ -462,6 +453,7 @@
      * and this typedef can be removed.
      * \todo This member variable should be private.
      */
+    // NS_DEPRECATED() - tag for future removal
     TracedCallback<Ptr<const Packet>, const Mac48Address&> m_traceTx;
 
     void DoDispose() override;
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-phy.cc ns-3.43/src/wimax/model/wimax-phy.cc
--- ns-3.42/src/wimax/model/wimax-phy.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-phy.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-phy.h ns-3.43/src/wimax/model/wimax-phy.h
--- ns-3.42/src/wimax/model/wimax-phy.h	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-phy.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007,2008 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Jahanzeb Farooq <jahanzeb.farooq@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-tlv.cc ns-3.43/src/wimax/model/wimax-tlv.cc
--- ns-3.42/src/wimax/model/wimax-tlv.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-tlv.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/model/wimax-tlv.h ns-3.43/src/wimax/model/wimax-tlv.h
--- ns-3.42/src/wimax/model/wimax-tlv.h	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/model/wimax-tlv.h	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/test/mac-messages-test.cc ns-3.43/src/wimax/test/mac-messages-test.cc
--- ns-3.42/src/wimax/test/mac-messages-test.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/test/mac-messages-test.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/test/phy-test.cc ns-3.43/src/wimax/test/phy-test.cc
--- ns-3.42/src/wimax/test/phy-test.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/test/phy-test.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/test/qos-test.cc ns-3.43/src/wimax/test/qos-test.cc
--- ns-3.42/src/wimax/test/qos-test.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/test/qos-test.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/test/ss-mac-test.cc ns-3.43/src/wimax/test/ss-mac-test.cc
--- ns-3.42/src/wimax/test/ss-mac-test.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/test/ss-mac-test.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2007,2008, 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/test/wimax-fragmentation-test.cc ns-3.43/src/wimax/test/wimax-fragmentation-test.cc
--- ns-3.42/src/wimax/test/wimax-fragmentation-test.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/test/wimax-fragmentation-test.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009-2010 TELEMATICS LAB - Poliotecnico di Bari
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Giuseppe Piro <g.piro@poliba.it>
  *                       <peppe.piro@gmail.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/test/wimax-service-flow-test.cc ns-3.43/src/wimax/test/wimax-service-flow-test.cc
--- ns-3.42/src/wimax/test/wimax-service-flow-test.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/test/wimax-service-flow-test.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/src/wimax/test/wimax-tlv-test.cc ns-3.43/src/wimax/test/wimax-tlv-test.cc
--- ns-3.42/src/wimax/test/wimax-tlv-test.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/src/wimax/test/wimax-tlv-test.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  *  Copyright (c) 2009 INRIA, UDcast
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  *         Mohamed Amine Ismail <amine.ismail@sophia.inria.fr>
  *                              <amine.ismail@udcast.com>
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/test.py ns-3.43/test.py
--- ns-3.42/test.py	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/test.py	2024-10-09 16:41:10.148656800 -0700
@@ -2,18 +2,7 @@
 #
 # Copyright (c) 2009 University of Washington
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 import argparse
 import fnmatch
@@ -664,9 +653,12 @@
 # little less hacky, we should add a command to ns3 to return this info
 # and use that result.
 #
-def read_ns3_config():
-    lock_filename = ".lock-ns3_%s_build" % sys.platform
+platform = sys.platform
+platform = "bsd" if "bsd" in platform else platform
+lock_filename = ".lock-ns3_%s_build" % platform
+
 
+def read_ns3_config():
     try:
         # sys.platform reports linux2 for python2 and linux for python3
         with open(lock_filename, "rt", encoding="utf-8") as f:
@@ -854,6 +846,11 @@
 VALGRIND_SUPPRESSIONS_FILE = ".ns3.supp"
 # VALGRIND_SUPPRESSIONS_FILE = None
 
+# When the TEST_LOGS environment variable is set to 1 or true,
+# NS_LOG is set to NS_LOG=*, and stdout/stderr
+# from tests are discarded to prevent running out of memory.
+TEST_LOGS = bool(os.getenv("TEST_LOGS", False))
+
 
 def run_job_synchronously(shell_command, directory, valgrind, is_python, build_path=""):
     if VALGRIND_SUPPRESSIONS_FILE is not None:
@@ -886,9 +883,16 @@
 
     start_time = time.time()
     proc = subprocess.Popen(
-        cmd, shell=True, cwd=directory, stdout=subprocess.PIPE, stderr=subprocess.PIPE
+        cmd,
+        shell=True,
+        cwd=directory,
+        stdout=subprocess.PIPE if not TEST_LOGS else subprocess.DEVNULL,
+        stderr=subprocess.PIPE if not TEST_LOGS else subprocess.STDOUT,
     )
     stdout_results, stderr_results = proc.communicate()
+    stdout_results = b"" if stdout_results is None else stdout_results
+    stderr_results = b"" if stderr_results is None else stderr_results
+
     elapsed_time = time.time() - start_time
 
     retval = proc.returncode
@@ -1260,7 +1264,6 @@
     #
     # Get the information from the build status file.
     #
-    lock_filename = ".lock-ns3_%s_build" % sys.platform
     if os.path.exists(lock_filename):
         ns3_runnable_programs = get_list_from_file(lock_filename, "ns3_runnable_programs")
         ns3_runnable_scripts = get_list_from_file(lock_filename, "ns3_runnable_scripts")
@@ -1352,7 +1355,7 @@
     # test.py runs.  If you want to see logging output from your tests, you
     # have to run them using the test-runner directly.
     #
-    os.environ["NS_LOG"] = ""
+    os.environ["NS_LOG"] = "*" if TEST_LOGS else ""
 
     #
     # There are a couple of options that imply we can to exit before starting
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/bench-packets.cc ns-3.43/utils/bench-packets.cc
--- ns-3.42/utils/bench-packets.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/bench-packets.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/bench-scheduler.cc ns-3.43/utils/bench-scheduler.cc
--- ns-3.42/utils/bench-scheduler.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/bench-scheduler.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2006 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/check-style-clang-format.py ns-3.43/utils/check-style-clang-format.py
--- ns-3.42/utils/check-style-clang-format.py	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/check-style-clang-format.py	2024-10-09 16:41:10.148656800 -0700
@@ -2,18 +2,7 @@
 
 # Copyright (c) 2022 Eduardo Nuno Almeida.
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Eduardo Nuno Almeida <enmsa@outlook.pt> [INESC TEC and FEUP, Portugal]
 
@@ -22,10 +11,11 @@
 
 The coding style is defined with the clang-format tool, whose definitions are in
 the ".clang-format" file. This script performs the following checks / fixes:
-- Check / fix local #include headers with "ns3/" prefix. Respects clang-format guards.
 - Check / apply clang-format. Respects clang-format guards.
+- Check / fix local #include headers with "ns3/" prefix. Respects clang-format guards.
 - Check / trim trailing whitespace. Always checked.
 - Check / replace tabs with spaces. Respects clang-format guards.
+- Check / fix SPDX licenses rather than GPL text. Respects clang-format guards.
 
 This script can be applied to all text files in a given path or to individual files.
 
@@ -54,8 +44,17 @@
     14,
 ]
 
-CLANG_FORMAT_GUARD_ON = "// clang-format on"
-CLANG_FORMAT_GUARD_OFF = "// clang-format off"
+FORMAT_GUARD_ON = [
+    "// clang-format on",
+    "# cmake-format: on",
+    "# fmt: on",
+]
+
+FORMAT_GUARD_OFF = [
+    "// clang-format off",
+    "# cmake-format: off",
+    "# fmt: off",
+]
 
 DIRECTORIES_TO_SKIP = [
     "__pycache__",
@@ -74,15 +73,44 @@
     "valgrind.h",
 ]
 
-FILE_EXTENSIONS_TO_CHECK_FORMATTING = [
+# List of checks
+CHECKS = [
+    "include_prefixes",
+    "whitespace",
+    "tabs",
+    "license",
+    "formatting",
+]
+
+# Files to check
+FILES_TO_CHECK: Dict[str, List[str]] = {c: [] for c in CHECKS}
+
+FILES_TO_CHECK["tabs"] = [
+    ".clang-format",
+    ".clang-tidy",
+    ".codespellrc",
+    "CMakeLists.txt",
+    "codespell-ignored-lines",
+    "codespell-ignored-words",
+    "ns3",
+]
+
+FILES_TO_CHECK["whitespace"] = FILES_TO_CHECK["tabs"] + [
+    "Makefile",
+]
+
+# File extensions to check
+FILE_EXTENSIONS_TO_CHECK: Dict[str, List[str]] = {c: [] for c in CHECKS}
+
+FILE_EXTENSIONS_TO_CHECK["formatting"] = [
     ".c",
     ".cc",
     ".h",
 ]
 
-FILE_EXTENSIONS_TO_CHECK_INCLUDE_PREFIXES = FILE_EXTENSIONS_TO_CHECK_FORMATTING
+FILE_EXTENSIONS_TO_CHECK["include_prefixes"] = FILE_EXTENSIONS_TO_CHECK["formatting"]
 
-FILE_EXTENSIONS_TO_CHECK_TABS = [
+FILE_EXTENSIONS_TO_CHECK["tabs"] = [
     ".c",
     ".cc",
     ".cmake",
@@ -101,17 +129,7 @@
     ".yml",
 ]
 
-FILES_TO_CHECK_TABS = [
-    ".clang-format",
-    ".clang-tidy",
-    ".codespellrc",
-    "CMakeLists.txt",
-    "codespell-ignored-lines",
-    "codespell-ignored-words",
-    "ns3",
-]
-
-FILE_EXTENSIONS_TO_CHECK_WHITESPACE = FILE_EXTENSIONS_TO_CHECK_TABS + [
+FILE_EXTENSIONS_TO_CHECK["whitespace"] = FILE_EXTENSIONS_TO_CHECK["tabs"] + [
     ".click",
     ".cfg",
     ".conf",
@@ -127,10 +145,15 @@
     ".txt",
 ]
 
-FILES_TO_CHECK_WHITESPACE = FILES_TO_CHECK_TABS + [
-    "Makefile",
+FILE_EXTENSIONS_TO_CHECK["license"] = [
+    ".c",
+    ".cc",
+    ".cmake",
+    ".h",
+    ".py",
 ]
 
+# Other check parameters
 TAB_SIZE = 4
 
 
@@ -176,24 +199,26 @@
 
 def find_files_to_check_style(
     paths: List[str],
-) -> Tuple[List[str], List[str], List[str], List[str]]:
+) -> Dict[str, List[str]]:
     """
     Find all files to be checked in a given list of paths.
 
     @param paths List of paths to the files to check.
-    @return Tuple [List of files to check include prefixes,
-                   List of files to check formatting,
-                   List of files to check trailing whitespace,
-                   List of files to check tabs].
+    @return Dictionary of checks and corresponding list of files to check.
+            Example: {
+                "formatting": list_of_files_to_check_formatting,
+                ...,
+            }
     """
 
-    files_to_check: List[str] = []
+    # Get list of files found in the given path
+    files_found: List[str] = []
 
     for path in paths:
         abs_path = os.path.abspath(os.path.expanduser(path))
 
         if os.path.isfile(abs_path):
-            files_to_check.append(path)
+            files_found.append(path)
 
         elif os.path.isdir(abs_path):
             for dirpath, dirnames, filenames in os.walk(path, topdown=True):
@@ -202,37 +227,22 @@
                     dirnames[:] = []
                     continue
 
-                files_to_check.extend([os.path.join(dirpath, f) for f in filenames])
+                files_found.extend([os.path.join(dirpath, f) for f in filenames])
 
         else:
-            raise ValueError(f"Error: {path} is not a file nor a directory")
+            raise ValueError(f"{path} is not a valid file nor a directory")
 
-    files_to_check.sort()
+    files_found.sort()
 
-    files_to_check_include_prefixes: List[str] = []
-    files_to_check_formatting: List[str] = []
-    files_to_check_whitespace: List[str] = []
-    files_to_check_tabs: List[str] = []
+    # Check which files should be checked
+    files_to_check: Dict[str, List[str]] = {c: [] for c in CHECKS}
 
-    for f in files_to_check:
-        if should_analyze_file(f, [], FILE_EXTENSIONS_TO_CHECK_INCLUDE_PREFIXES):
-            files_to_check_include_prefixes.append(f)
+    for f in files_found:
+        for check in CHECKS:
+            if should_analyze_file(f, FILES_TO_CHECK[check], FILE_EXTENSIONS_TO_CHECK[check]):
+                files_to_check[check].append(f)
 
-        if should_analyze_file(f, [], FILE_EXTENSIONS_TO_CHECK_FORMATTING):
-            files_to_check_formatting.append(f)
-
-        if should_analyze_file(f, FILES_TO_CHECK_WHITESPACE, FILE_EXTENSIONS_TO_CHECK_WHITESPACE):
-            files_to_check_whitespace.append(f)
-
-        if should_analyze_file(f, FILES_TO_CHECK_TABS, FILE_EXTENSIONS_TO_CHECK_TABS):
-            files_to_check_tabs.append(f)
-
-    return (
-        files_to_check_include_prefixes,
-        files_to_check_formatting,
-        files_to_check_whitespace,
-        files_to_check_tabs,
-    )
+    return files_to_check
 
 
 def find_clang_format_path() -> str:
@@ -261,16 +271,20 @@
             check=True,
         )
 
-        version = process.stdout.strip().split(" ")[-1]
-        major_version = int(version.split(".")[0])
+        clang_format_version = process.stdout.strip()
+        version_regex = re.findall(r"\b(\d+)(\.\d+){0,2}\b", clang_format_version)
 
-        if major_version in CLANG_FORMAT_VERSIONS:
-            return clang_format_path
+        if version_regex:
+            major_version = int(version_regex[0][0])
+
+            if major_version in CLANG_FORMAT_VERSIONS:
+                return clang_format_path
 
     # No supported version of clang-format found
     raise RuntimeError(
         f"Could not find any supported version of clang-format installed on this system. "
-        f"List of supported versions: {CLANG_FORMAT_VERSIONS}."
+        f"List of supported versions: {CLANG_FORMAT_VERSIONS}. "
+        + (f"Found clang-format {major_version}." if version_regex else "")
     )
 
 
@@ -279,10 +293,7 @@
 ###########################################################
 def check_style_clang_format(
     paths: List[str],
-    enable_check_include_prefixes: bool,
-    enable_check_formatting: bool,
-    enable_check_whitespace: bool,
-    enable_check_tabs: bool,
+    checks_enabled: Dict[str, bool],
     fix: bool,
     verbose: bool,
     n_jobs: int = 1,
@@ -291,89 +302,85 @@
     Check / fix the coding style of a list of files.
 
     @param paths List of paths to the files to check.
-    @param enable_check_include_prefixes Whether to enable checking #include headers from the same module with the "ns3/" prefix.
-    @param enable_check_formatting Whether to enable checking code formatting.
-    @param enable_check_whitespace Whether to enable checking trailing whitespace.
-    @param enable_check_tabs Whether to enable checking tabs.
+    @param checks_enabled Dictionary of checks indicating whether to enable each of them.
     @param fix Whether to fix (True) or just check (False) the file.
     @param verbose Show the lines that are not compliant with the style.
     @param n_jobs Number of parallel jobs.
     @return Whether all files are compliant with all enabled style checks.
     """
 
-    (
-        files_to_check_include_prefixes,
-        files_to_check_formatting,
-        files_to_check_whitespace,
-        files_to_check_tabs,
-    ) = find_files_to_check_style(paths)
-
-    check_include_prefixes_successful = True
-    check_formatting_successful = True
-    check_whitespace_successful = True
-    check_tabs_successful = True
-
-    if enable_check_include_prefixes:
-        check_include_prefixes_successful = check_style_files(
-            '#include headers from the same module with the "ns3/" prefix',
-            check_manually_file,
-            files_to_check_include_prefixes,
-            fix,
-            verbose,
-            n_jobs,
-            respect_clang_format_guards=True,
-            check_style_line_function=check_include_prefixes_line,
-        )
-
-        print("")
-
-    if enable_check_formatting:
-        check_formatting_successful = check_style_files(
-            "bad code formatting",
-            check_formatting_file,
-            files_to_check_formatting,
-            fix,
-            verbose,
-            n_jobs,
-            clang_format_path=find_clang_format_path(),
-        )
-
-        print("")
+    files_to_check = find_files_to_check_style(paths)
+    checks_successful = {c: True for c in CHECKS}
 
-    if enable_check_whitespace:
-        check_whitespace_successful = check_style_files(
-            "trailing whitespace",
-            check_manually_file,
-            files_to_check_whitespace,
-            fix,
-            verbose,
-            n_jobs,
-            respect_clang_format_guards=False,
-            check_style_line_function=check_whitespace_line,
-        )
+    style_check_strs = {
+        "include_prefixes": '#include headers from the same module with the "ns3/" prefix',
+        "whitespace": "trailing whitespace",
+        "tabs": "tabs",
+        "license": "GPL license text instead of SPDX license",
+        "formatting": "bad code formatting",
+    }
+
+    check_style_file_functions_kwargs = {
+        "include_prefixes": {
+            "function": check_manually_file,
+            "kwargs": {
+                "respect_clang_format_guards": True,
+                "check_style_line_function": check_include_prefixes_line,
+            },
+        },
+        "whitespace": {
+            "function": check_manually_file,
+            "kwargs": {
+                "respect_clang_format_guards": False,
+                "check_style_line_function": check_whitespace_line,
+            },
+        },
+        "tabs": {
+            "function": check_manually_file,
+            "kwargs": {
+                "respect_clang_format_guards": True,
+                "check_style_line_function": check_tabs_line,
+            },
+        },
+        "license": {
+            "function": check_manually_file,
+            "kwargs": {
+                "respect_clang_format_guards": True,
+                "check_style_line_function": check_licenses_line,
+            },
+        },
+        "formatting": {
+            "function": check_formatting_file,
+            "kwargs": {},  # The formatting keywords are added below
+        },
+    }
+
+    if checks_enabled["formatting"]:
+        check_style_file_functions_kwargs["formatting"]["kwargs"] = {
+            "clang_format_path": find_clang_format_path(),
+        }
+
+    n_checks_enabled = sum(checks_enabled.values())
+    n_check = 0
+
+    for check in CHECKS:
+        if checks_enabled[check]:
+            checks_successful[check] = check_style_files(
+                style_check_strs[check],
+                check_style_file_functions_kwargs[check]["function"],
+                files_to_check[check],
+                fix,
+                verbose,
+                n_jobs,
+                **check_style_file_functions_kwargs[check]["kwargs"],
+            )
 
-        print("")
+            n_check += 1
 
-    if enable_check_tabs:
-        check_tabs_successful = check_style_files(
-            "tabs",
-            check_manually_file,
-            files_to_check_tabs,
-            fix,
-            verbose,
-            n_jobs,
-            respect_clang_format_guards=True,
-            check_style_line_function=check_tabs_line,
-        )
+            if n_check < n_checks_enabled:
+                print("")
 
-    return all(
-        [
-            check_include_prefixes_successful,
-            check_formatting_successful,
-            check_whitespace_successful,
-            check_tabs_successful,
-        ]
-    )
+    return all(checks_successful.values())
 
 
 def check_style_files(
@@ -454,7 +461,7 @@
     Check / fix the coding style of a file with clang-format.
 
     @param filename Name of the file to be checked.
-    @param fix Whether to fix (True) or just check (False) the style of the file (True).
+    @param fix Whether to fix (True) or just check (False) the style of the file.
     @param verbose Show the lines that are not compliant with the style.
     @param clang_format_path Path to clang-format.
     @return Tuple [Filename,
@@ -513,7 +520,7 @@
     Check / fix a file manually using a function to check / fix each line.
 
     @param filename Name of the file to be checked.
-    @param fix Whether to fix (True) or just check (False) the style of the file (True).
+    @param fix Whether to fix (True) or just check (False) the style of the file.
     @param verbose Show the lines that are not compliant with the style.
     @param respect_clang_format_guards Whether to respect clang-format guards.
     @param check_style_line_function Function used to check each line.
@@ -534,14 +541,13 @@
         if respect_clang_format_guards:
             line_stripped = line.strip()
 
-            if line_stripped == CLANG_FORMAT_GUARD_ON:
+            if line_stripped in FORMAT_GUARD_ON:
                 clang_format_enabled = True
-            elif line_stripped == CLANG_FORMAT_GUARD_OFF:
+            elif line_stripped in FORMAT_GUARD_OFF:
                 clang_format_enabled = False
 
             if not clang_format_enabled and line_stripped not in (
-                CLANG_FORMAT_GUARD_ON,
-                CLANG_FORMAT_GUARD_OFF,
+                FORMAT_GUARD_ON + FORMAT_GUARD_OFF
             ):
                 continue
 
@@ -686,20 +692,82 @@
     return (is_line_compliant, line_fixed, verbose_infos)
 
 
+def check_licenses_line(
+    line: str,
+    filename: str,
+    line_number: int,
+) -> Tuple[bool, str, List[str]]:
+    """
+    Check / fix SPDX licenses rather than GPL text in a line.
+
+    @param line The line to check.
+    @param filename Name of the file to be checked.
+    @param line_number The number of the line checked.
+    @return Tuple [Whether the line is compliant with the style (before the check),
+                   Fixed line,
+                   Verbose information].
+    """
+
+    # fmt: off
+    GPL_LICENSE_LINES = [
+        "This program is free software; you can redistribute it and/or modify",
+        "it under the terms of the GNU General Public License version 2 as",
+        "published by the Free Software Foundation;",
+        "This program is distributed in the hope that it will be useful,",
+        "but WITHOUT ANY WARRANTY; without even the implied warranty of",
+        "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the",
+        "GNU General Public License for more details.",
+        "You should have received a copy of the GNU General Public License",
+        "along with this program; if not, write to the Free Software",
+        "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA",
+    ]
+    # fmt: on
+
+    SPDX_LICENSE = "SPDX-License-Identifier: GPL-2.0-only"
+
+    is_line_compliant = True
+    line_fixed = line
+    verbose_infos: List[str] = []
+
+    # Check if the line is a GPL license text
+    line_stripped = line.strip()
+    line_stripped_no_leading_comments = line_stripped.strip("*#/").strip()
+
+    if line_stripped_no_leading_comments in GPL_LICENSE_LINES:
+        is_line_compliant = False
+        col_index = 0
+
+        # Replace GPL text with SPDX license.
+        # Replace the first line of the GPL text with SPDX.
+        # Delete the remaining GPL text lines.
+        if line_stripped_no_leading_comments == GPL_LICENSE_LINES[0]:
+            line_fixed = line.replace(line_stripped_no_leading_comments, SPDX_LICENSE)
+        else:
+            line_fixed = ""
+
+        verbose_infos.extend(
+            [
+                f"{filename}:{line_number + 1}:{col_index}: error: GPL license text detected instead of SPDX license",
+                f"    {line_stripped}",
+                f'    {"":{col_index}}^',
+            ]
+        )
+
+    return (is_line_compliant, line_fixed, verbose_infos)
+
+
 ###########################################################
 # MAIN
 ###########################################################
 if __name__ == "__main__":
     parser = argparse.ArgumentParser(
         description="Check and apply the ns-3 coding style recursively to all files in the given PATHs. "
-        "The script checks the formatting of the file with clang-format. "
-        'Additionally, it checks #include headers from the same module with the "ns3/" prefix, '
-        "the presence of trailing whitespace and tabs. "
-        'Formatting, local #include "ns3/" prefixes and tabs checks respect clang-format guards. '
-        'When used in "check mode" (default), the script checks if all files are well '
-        "formatted and do not have trailing whitespace nor tabs. "
-        "If it detects non-formatted files, they will be printed and this process exits with a "
-        'non-zero code. When used in "fix mode", this script automatically fixes the files.'
+        "The script checks the formatting of the files using clang-format and"
+        " other coding style rules manually (see script arguments). "
+        "All checks respect clang-format guards, except trailing whitespace, which is always checked. "
+        'When used in "check mode" (default), the script runs all checks in all files. '
+        "If it detects non-formatted files, they will be printed and this process exits with a non-zero code. "
+        'When used in "fix mode", this script automatically fixes the files and exits with 0 code.'
     )
 
     parser.add_argument(
@@ -713,25 +781,31 @@
     parser.add_argument(
         "--no-include-prefixes",
         action="store_true",
-        help='Do not check / fix #include headers from the same module with the "ns3/" prefix',
+        help='Do not check / fix #include headers from the same module with the "ns3/" prefix (respects clang-format guards)',
     )
 
     parser.add_argument(
-        "--no-formatting",
+        "--no-whitespace",
         action="store_true",
-        help="Do not check / fix code formatting",
+        help="Do not check / fix trailing whitespace",
     )
 
     parser.add_argument(
-        "--no-whitespace",
+        "--no-tabs",
         action="store_true",
-        help="Do not check / fix trailing whitespace",
+        help="Do not check / fix tabs (respects clang-format guards)",
     )
 
     parser.add_argument(
-        "--no-tabs",
+        "--no-licenses",
         action="store_true",
-        help="Do not check / fix tabs",
+        help="Do not check / fix SPDX licenses rather than GPL text (respects clang-format guards)",
+    )
+
+    parser.add_argument(
+        "--no-formatting",
+        action="store_true",
+        help="Do not check / fix code formatting (respects clang-format guards)",
     )
 
     parser.add_argument(
@@ -760,22 +834,32 @@
     try:
         all_checks_successful = check_style_clang_format(
             paths=args.paths,
-            enable_check_include_prefixes=(not args.no_include_prefixes),
-            enable_check_formatting=(not args.no_formatting),
-            enable_check_whitespace=(not args.no_whitespace),
-            enable_check_tabs=(not args.no_tabs),
+            checks_enabled={
+                "include_prefixes": not args.no_include_prefixes,
+                "whitespace": not args.no_whitespace,
+                "tabs": not args.no_tabs,
+                "license": not args.no_licenses,
+                "formatting": not args.no_formatting,
+            },
             fix=args.fix,
             verbose=args.verbose,
             n_jobs=args.jobs,
         )
 
     except Exception as e:
-        print(e)
+        print("ERROR:", e)
         sys.exit(1)
 
     if not all_checks_successful:
         if args.verbose:
-            print("")
-            print('NOTE: To fix the files automatically, run this script with the flag "--fix"')
+            print(
+                "",
+                "Notes to fix the above formatting issues:",
+                '  - To fix the formatting of specific files, run this script with the flag "--fix":',
+                "      $ ./utils/check-style-clang-format.py --fix path [path ...]",
+                "  - To fix the formatting of all files modified by this branch, run this script in the following way:",
+                "      $ git diff --name-only master | xargs ./utils/check-style-clang-format.py --fix",
+                sep="\n",
+            )
 
         sys.exit(1)
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/codespell-ignored-lines ns-3.43/utils/codespell-ignored-lines
--- ns-3.42/utils/codespell-ignored-lines	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/codespell-ignored-lines	2024-10-09 16:41:10.148656800 -0700
@@ -129,15 +129,6 @@
 ./src/traffic-control/model/codel-queue-disc.h:17:
  * Codel, the COntrolled DELay Queueing discipline
 
-./src/internet/model/global-route-manager-impl.h:555:
-     * \param vs a list of SPFVertexes
-
-./src/internet/model/candidate-queue.h:166:
-     * SPFVertexes are added into the queue according to the ordering
-
-./src/internet/model/global-route-manager-impl.h:555
-    typedef std::list<SPFVertex*> ListOfSPFVertex_t; //!< container of SPFVertexes
-
 ./CHANGES.md:
   * (dsr) Class `DsrOptionRerrUnsupportHeader` from `dsr-option-header.h` was renamed `DsrOptionRerrUnsupportedHeader`.
   * (internet) Enumerated value `IPV6_EXT_AUTHENTIFICATION` from `ipv6-header.h` was renamed `IPV6_EXT_AUTHENTICATION`.
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/coverity-report.sh ns-3.43/utils/coverity-report.sh
--- ns-3.42/utils/coverity-report.sh	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/coverity-report.sh	2024-10-09 16:41:10.148656800 -0700
@@ -3,18 +3,7 @@
 
 # Copyright (c) 2013 Lawrence Livermore National Laboratory
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Peter D. Barnes, Jr. <pdbarnes@llnl.gov>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/perf/perf-io.cc ns-3.43/utils/perf/perf-io.cc
--- ns-3.42/utils/perf/perf-io.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/perf/perf-io.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,16 +1,5 @@
 /*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/core-module.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/print-introspected-doxygen.cc ns-3.43/utils/print-introspected-doxygen.cc
--- ns-3.42/utils/print-introspected-doxygen.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/print-introspected-doxygen.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2007 INRIA
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  *
  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
  */
@@ -169,7 +158,7 @@
         headingStop = "";
         // Linking:  The link text displayed (see TheTarget)
         hrefStart = "";
-        hrefMid = "(see ";
+        hrefMid = " (see ";
         hrefStop = ")";
         indentHtmlOnly = "";
         listLineStart = "    * ";
@@ -234,7 +223,7 @@
         templateArgument = "\\tparam ";
         variable = "\\var ";
     }
-} // SetMarkup ()
+} // SetMarkup()
 
 /***************************************************************
  *        Aggregation and configuration paths
@@ -260,9 +249,10 @@
      */
     void Gather(TypeId tid);
     /**
-     * Print output in "a -> b" form on std::cout
+     * Print output in "a -> b" form on the stream.
+     * \param [in,out] os The output stream.
      */
-    void Print() const;
+    void Print(std::ostream& os) const;
 
     /**
      * \return the configuration paths for tid
@@ -348,12 +338,12 @@
 }
 
 void
-StaticInformation::Print() const
+StaticInformation::Print(std::ostream& os) const
 {
     NS_LOG_FUNCTION(this);
     for (const auto& item : m_output)
     {
-        std::cout << item.first.GetName() << " -> " << item.second << std::endl;
+        os << item.first.GetName() << " -> " << item.second << std::endl;
     }
 }
 
@@ -528,7 +518,7 @@
             m_currentPath.pop_back();
         }
     }
-} // StaticInformation::DoGather ()
+} // StaticInformation::DoGather()
 
 /// Register aggregation relationships that are not automatically
 /// detected by this introspection program.  Statements added here
@@ -591,7 +581,7 @@
 
     return info;
 
-} // GetTypicalAggregations ()
+} // GetTypicalAggregations()
 
 /// Map from TypeId name to tid
 typedef std::map<std::string, int32_t> NameMap;
@@ -648,13 +638,86 @@
     }
 
     return nameMap;
-} // GetNameMap ()
+} // GetNameMap()
+
+/// List of TypeIds for a group
+using GroupList_t = std::set<TypeId>;
+/// Collection of group names with associated TypeIds
+using GroupsList_t = std::map<std::string, GroupList_t>;
+
+/**
+ * Get a sorted list of TypeId groups
+ * \returns a map of group name and associated TypeIds
+ */
+GroupsList_t
+GetGroupsList()
+{
+    static GroupsList_t groups;
+    static bool mapped = false;
+    if (mapped)
+    {
+        return groups;
+    }
+
+    NameMap nameMap = GetNameMap();
+    for (const auto& item : nameMap)
+    {
+        // Handle only real TypeIds
+        if (item.second < 0)
+        {
+            continue;
+        }
+        // Get the class's index out of the map;
+        TypeId tid = TypeId::GetRegistered(item.second);
+        auto group = tid.GetGroupName();
+
+        if (!group.empty())
+        {
+            groups[group].insert(tid);
+        }
+    }
+    return groups;
+
+} // GetGroupsList()
 
 /***************************************************************
  *        Docs for a single TypeId
  ***************************************************************/
 
 /**
+ * Print the support level for an Attribute or TraceSource
+ * \param os the output stream
+ * \param supportLevel the SupportLevel
+ * \param supportMsg optional support message
+ */
+void
+PrintSupportLevel(std::ostream& os, TypeId::SupportLevel supportLevel, std::string supportMsg)
+{
+    os << "    " << listLineStart << "Support level: ";
+    os << flagSpanStart;
+    switch (supportLevel)
+    {
+    case TypeId::SUPPORTED:
+        os << "SUPPORTED";
+        break;
+    case TypeId::DEPRECATED:
+        os << "DEPRECATED";
+        break;
+    case TypeId::OBSOLETE:
+        os << "OBSOLETE";
+        break;
+    default:
+        os << "UNKNOWN";
+    }
+    os << flagSpanStop;
+    if (!supportMsg.empty())
+    {
+        os << ": " << supportMsg;
+    }
+    os << listLineStop << std::endl;
+} // PrintSupportLevel
+
+/**
  * Print config paths
  * \param os the output stream
  * \param tid the type ID
@@ -684,7 +747,7 @@
         }
         os << listStop << std::endl;
     }
-} // PrintConfigPaths ()
+} // PrintConfigPaths()
 
 /**
  * Print direct Attributes for this TypeId.
@@ -774,26 +837,28 @@
         }
         bool moreFlags{false};
         os << "    " << listLineStart << "Flags: ";
-        if (info.flags & TypeId::ATTR_CONSTRUCT && info.accessor->HasSetter())
-        {
-            os << flagSpanStart << "construct" << flagSpanStop;
-            moreFlags = true;
-        }
-        if (info.flags & TypeId::ATTR_SET && info.accessor->HasSetter())
-        {
-            os << (outputText && moreFlags ? ", " : "") << flagSpanStart << "write" << flagSpanStop;
-            moreFlags = true;
-        }
-        if (info.flags & TypeId::ATTR_GET && info.accessor->HasGetter())
-        {
-            os << (outputText && moreFlags ? ", " : "") << flagSpanStart << "read" << flagSpanStop;
-            moreFlags = true;
-        }
+
+        auto myInfo = info; // See GitLab #1142
+        auto flagWrite = [&os, &moreFlags, myInfo](TypeId::AttributeFlag flag,
+                                                   bool hasFunc,
+                                                   std::string msg) -> void {
+            if (myInfo.flags & flag && hasFunc)
+            {
+                os << (outputText && moreFlags ? ", " : "") << flagSpanStart << msg << flagSpanStop;
+                moreFlags = true;
+            }
+        };
+        flagWrite(TypeId::ATTR_CONSTRUCT, info.accessor->HasSetter(), "construct");
+        flagWrite(TypeId::ATTR_SET, info.accessor->HasSetter(), "write");
+        flagWrite(TypeId::ATTR_GET, info.accessor->HasGetter(), "read");
         os << listLineStop << std::endl;
+
+        PrintSupportLevel(os, info.supportLevel, info.supportMsg);
+
         os << indentHtmlOnly << listStop << std::endl;
     }
     os << listStop << std::endl;
-} // PrintAttributesTid ()
+} // PrintAttributesTid()
 
 /**
  * Print the Attributes block for tid,
@@ -832,7 +897,7 @@
         tmp = tmp.GetParent();
 
     } // Attributes
-} // PrintAttributes ()
+} // PrintAttributes()
 
 /**
  * Print direct Trace sources for this TypeId.
@@ -853,16 +918,21 @@
     for (const auto& [name, info] : index)
     {
         os << listLineStart << boldStart << name << boldStop << ": " << info.help << breakBoth;
+        os << indentHtmlOnly << listStart << std::endl;
+        os << "    " << listLineStart;
         if (!outputText)
         {
-            //    '%' prevents doxygen from linking to the Callback class...
-            os << "%";
+            // '%' prevents doxygen from linking to the Callback class...
+            os << " %";
         }
         os << "Callback signature: " << info.callback << std::endl;
         os << listLineStop << std::endl;
+
+        PrintSupportLevel(os, info.supportLevel, info.supportMsg);
+        os << listStop << std::endl;
     }
     os << listStop << std::endl;
-} // PrintTraceSourcesTid ()
+} // PrintTraceSourcesTid()
 
 /**
  * Print the Trace sources block for tid,
@@ -901,7 +971,7 @@
         tmp = tmp.GetParent();
     }
 
-} // PrintTraceSources ()
+} // PrintTraceSources()
 
 /**
  * Print the size of the type represented by this tid.
@@ -919,7 +989,40 @@
 
     os << boldStart << "Size" << boldStop << " of this type is " << tid.GetSize() << " bytes (on a "
        << arch << "-bit architecture)." << std::endl;
-} // PrintSize ()
+} // PrintSize()
+
+/**
+ * Print the doxy block for a single TypeId
+ *
+ * \param [in,out] os The output stream.
+ * \param [in] tid the TypeId
+ */
+void
+PrintTypeIdBlock(std::ostream& os, const TypeId tid)
+{
+    NS_LOG_FUNCTION(tid);
+
+    std::string name = tid.GetName();
+
+    os << commentStart << std::endl;
+
+    os << classStart << name << std::endl;
+    os << std::endl;
+
+    PrintConfigPaths(os, tid);
+    PrintAttributes(os, tid);
+    PrintTraceSources(os, tid);
+
+    if (!tid.GetGroupName().empty())
+    {
+        os << boldStart << "Group:" << boldStop << " " << tid.GetGroupName() << "\n" << std::endl;
+    }
+
+    PrintSize(os, tid);
+
+    os << commentStop << std::endl;
+
+} // PrintTypeIdBlock()
 
 /**
  * Print the doxy block for each TypeId
@@ -944,22 +1047,10 @@
         }
         // Get the class's index out of the map;
         TypeId tid = TypeId::GetRegistered(item.second);
-        std::string name = tid.GetName();
-
-        std::cout << commentStart << std::endl;
-
-        std::cout << classStart << name << std::endl;
-        std::cout << std::endl;
-
-        PrintConfigPaths(std::cout, tid);
-        PrintAttributes(std::cout, tid);
-        PrintTraceSources(std::cout, tid);
-        PrintSize(std::cout, tid);
-
-        std::cout << commentStop << std::endl;
+        PrintTypeIdBlock(os, tid);
     } // for class documentation
 
-} // PrintTypeIdBlocks
+} // PrintTypeIdBlocks()
 
 /***************************************************************
  *        Lists of All things
@@ -1002,7 +1093,7 @@
     os << listStop << std::endl;
     os << commentStop << std::endl;
 
-} // PrintAllTypeIds ()
+} // PrintAllTypeIds()
 
 /**
  * Print the list of all Attributes.
@@ -1054,7 +1145,7 @@
     }
     os << commentStop << std::endl;
 
-} // PrintAllAttributes ()
+} // PrintAllAttributes()
 
 /**
  * Print the list of all global variables.
@@ -1082,7 +1173,39 @@
     os << listStop << std::endl;
     os << commentStop << std::endl;
 
-} // PrintAllGlobals ()
+} // PrintAllGlobals()
+
+/**
+ * Print the list of all groups
+ *
+ * \param [in,out] os The output stream.
+ */
+void
+PrintAllGroups(std::ostream& os)
+{
+    NS_LOG_FUNCTION_NOARGS();
+    os << commentStart << page << "GroupsList All Object Groups\n" << std::endl;
+    os << "This is a list of all Object Groups.\n"
+       << "Objects are added to groups by " << hrefStart << "ns3::TypeId::SetGroupName()" << hrefMid
+       << "ns3::TypeId::SetGroupName" << hrefStop << "\n"
+       << std::endl;
+
+    auto groups = GetGroupsList();
+
+    for (const auto& g : groups)
+    {
+        os << boldStart << g.first << boldStop << breakHtmlOnly << std::endl;
+
+        os << listStart << std::endl;
+        for (const auto& tid : g.second)
+        {
+            os << indentHtmlOnly << listLineStart << hrefStart << tid.GetName() << hrefMid
+               << tid.GetName() << hrefStop << listLineStop << std::endl;
+        }
+        os << listStop << std::endl;
+    }
+    os << commentStop << std::endl;
+}
 
 /**
  * Print the list of all LogComponents.
@@ -1141,7 +1264,7 @@
     }
     os << std::right << std::endl;
     os << commentStop << std::endl;
-} // PrintAllLogComponents ()
+} // PrintAllLogComponents()
 
 /**
  * Print the list of all Trace sources.
@@ -1195,7 +1318,7 @@
     }
     os << commentStop << std::endl;
 
-} // PrintAllTraceSources ()
+} // PrintAllTraceSources()
 
 /***************************************************************
  *        Docs for Attribute classes
@@ -1231,7 +1354,7 @@
     }
     os << commentStop;
 
-} // PrintAttributeValueSection ()
+} // PrintAttributeValueSection()
 
 /**
  * Print the AttributeValue documentation for a class.
@@ -1271,24 +1394,23 @@
        << argument << "[in] value The " << name << " value to use.\n";
     os << commentStop;
 
-    // <name>Value::Get () const
-    os << commentStart << functionStart << type << qualClass << "::Get () const\n"
+    // <name>Value::Get() const
+    os << commentStart << functionStart << type << qualClass << "::Get() const\n"
        << returns << "The " << name << " value.\n"
        << commentStop;
 
-    // <name>Value::GetAccessor (T & value) const
-    os << commentStart << functionStart << "bool" << qualClass
-       << "::GetAccessor (T & value) const\n"
+    // <name>Value::GetAccessor(T & value) const
+    os << commentStart << functionStart << "bool" << qualClass << "::GetAccessor(T & value) const\n"
        << "Access the " << name << " value as type " << codeWord << "T.\n"
        << templateArgument << "T " << templArgExplicit << "The type to cast to.\n"
        << argument << "[out] value The " << name << " value, as type " << codeWord << "T.\n"
        << returns << "true.\n"
        << commentStop;
 
-    // <name>Value::Set (const name & value)
+    // <name>Value::Set(const name & value)
     if (type != "Callback") // Yuck
     {
-        os << commentStart << functionStart << "void" << qualClass << "::Set (const " << type
+        os << commentStart << functionStart << "void" << qualClass << "::Set(const " << type
            << " & value)\n"
            << "Set the value.\n"
            << argument << "[in] value The value to adopt.\n"
@@ -1300,7 +1422,7 @@
        << "The stored " << name << " instance.\n"
        << commentStop << std::endl;
 
-} // PrintAttributeValueWithName ()
+} // PrintAttributeValueWithName()
 
 /**
  * Print the AttributeValue MakeAccessor documentation for a class.
@@ -1318,7 +1440,7 @@
     std::string make = "ns3::Make" + name + "Accessor ";
 
     // \ingroup attribute_<name>Value
-    // Make<name>Accessor (T1 a1)
+    // Make<name>Accessor(T1 a1)
     os << commentStart << sectAttr << functionStart << "ns3::Ptr<const ns3::AttributeAccessor> "
        << make << "(T1 a1)\n"
        << copyDoc << "ns3::MakeAccessorHelper(T1)\n"
@@ -1326,13 +1448,13 @@
        << commentStop;
 
     // \ingroup attribute_<name>Value
-    // Make<name>Accessor (T1 a1)
+    // Make<name>Accessor(T1 a1)
     os << commentStart << sectAttr << functionStart << "ns3::Ptr<const ns3::AttributeAccessor> "
        << make << "(T1 a1, T2 a2)\n"
        << copyDoc << "ns3::MakeAccessorHelper(T1,T2)\n"
        << seeAlso << "AttributeAccessor\n"
        << commentStop;
-} // PrintMakeAccessors ()
+} // PrintMakeAccessors()
 
 /**
  * Print the AttributeValue MakeChecker documentation for a class.
@@ -1360,13 +1482,13 @@
     os << commentStop;
 
     // \ingroup attribute_<name>Value
-    // Make<name>Checker ()
+    // Make<name>Checker()
     os << commentStart << sectAttr << functionStart << "ns3::Ptr<const ns3::AttributeChecker> "
        << make << "()\n"
        << returns << "The AttributeChecker.\n"
        << seeAlso << "AttributeChecker\n"
        << commentStop;
-} // PrintMakeChecker ()
+} // PrintMakeChecker()
 
 /**Descriptor for an AttributeValue. */
 struct AttributeDescriptor
@@ -1393,7 +1515,7 @@
     PrintAttributeValueWithName(os, attr.m_name, attr.m_type, attr.m_header);
     PrintMakeAccessors(os, attr.m_name);
     PrintMakeChecker(os, attr.m_name, attr.m_header);
-} // PrintAttributeHelper ()
+} // PrintAttributeHelper()
 
 /**
  * Print documentation for Attribute implementations.
@@ -1462,7 +1584,7 @@
     PrintMakeAccessors(os, "ObjectMap");
     PrintMakeChecker(os, "ObjectMap", "object-map.h");
 
-} // PrintAttributeImplementations ()
+} // PrintAttributeImplementations()
 
 /***************************************************************
  *        Main
@@ -1473,12 +1595,45 @@
 {
     NS_LOG_FUNCTION_NOARGS();
 
+    std::string typeId;
+
     CommandLine cmd(__FILE__);
     cmd.Usage("Generate documentation for all ns-3 registered types, "
               "trace sources, attributes and global variables.");
     cmd.AddValue("output-text", "format output as plain text", outputText);
+    cmd.AddValue("TypeId", "Print docs for just the given TypeId", typeId);
     cmd.Parse(argc, argv);
 
+    if (!typeId.empty())
+    {
+        outputText = true;
+        SetMarkup();
+
+        TypeId tid;
+
+        bool validTypeId = TypeId::LookupByNameFailSafe(typeId, &tid);
+        if (!validTypeId)
+        {
+            auto fqTypeId = "ns3::" + typeId;
+            validTypeId = TypeId::LookupByNameFailSafe(fqTypeId, &tid);
+            if (validTypeId)
+            {
+                std::cout << "\nFound fully qualified name " << fqTypeId << "\n\n";
+            }
+        }
+        if (validTypeId)
+        {
+            PrintTypeIdBlock(std::cout, tid);
+            return 0;
+        }
+        else
+        {
+            std::cerr << "Invalid TypeId name: " << typeId << "\n" << std::endl;
+            std::cerr << cmd;
+            exit(1);
+        }
+    }
+
     SetMarkup();
 
     // Create a Node, to force linking and instantiation of our TypeIds
@@ -1499,6 +1654,7 @@
     PrintAllTypeIds(std::cout);
     PrintAllAttributes(std::cout);
     PrintAllGlobals(std::cout);
+    PrintAllGroups(std::cout);
     PrintAllLogComponents(std::cout);
     PrintAllTraceSources(std::cout);
     PrintAttributeImplementations(std::cout);
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/python-unit-tests.py ns-3.43/utils/python-unit-tests.py
--- ns-3.42/utils/python-unit-tests.py	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/python-unit-tests.py	2024-10-09 16:41:10.148656800 -0700
@@ -2,19 +2,7 @@
 
 # Copyright (C) 2008-2011 INESC Porto
 
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-or-later
 
 # Author: Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/run-examples-with-full-logging.sh ns-3.43/utils/run-examples-with-full-logging.sh
--- ns-3.42/utils/run-examples-with-full-logging.sh	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/run-examples-with-full-logging.sh	2024-10-09 16:41:10.148656800 -0700
@@ -2,18 +2,7 @@
 #
 # Copyright (c) 2012 University of Washington
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 
 #
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/test-runner.cc ns-3.43/utils/test-runner.cc
--- ns-3.42/utils/test-runner.cc	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/test-runner.cc	2024-10-09 16:41:10.148656800 -0700
@@ -1,18 +1,7 @@
 /*
  * Copyright (c) 2009 University of Washington
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation;
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ * SPDX-License-Identifier: GPL-2.0-only
  */
 
 #include "ns3/test.h"
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-alpine.yml ns-3.43/utils/tests/gitlab-ci-alpine.yml
--- ns-3.42/utils/tests/gitlab-ci-alpine.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-alpine.yml	2024-10-09 16:41:10.148656800 -0700
@@ -21,7 +21,7 @@
       bash
       iproute2 linux-headers
       openmpi openmpi-dev
-      openssh
+      openssh git
   variables:
     COMPILER: g++
 
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-clang.yml ns-3.43/utils/tests/gitlab-ci-clang.yml
--- ns-3.42/utils/tests/gitlab-ci-clang.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-clang.yml	2024-10-09 16:41:10.148656800 -0700
@@ -4,8 +4,8 @@
 # "RELEASE", that has a value "weekly". Also, a variable "CLANG" should be set
 # to True.
 
-# We support CLANG versions 10 through 18
-# We test only CLANG 10 on Ubuntu 20.04 and CLANG 18 on Ubuntu 24.04
+# We support CLANG versions 11 through 18
+# We test only CLANG 11 on Ubuntu 20.04 and CLANG 18 on Ubuntu 24.04
 
 .weekly-clang-ubuntu:
   extends: .base-build
@@ -24,7 +24,7 @@
       libgsl-dev $LIBGSL gsl-bin
       libsqlite3-dev sqlite3
       libxml2 libxml2-dev
-      ssh
+      ssh git $EXTRA_PACKAGES
   variables:
     COMPILER: clang++-$CLANG
 
@@ -33,6 +33,7 @@
   extends: .weekly-clang-ubuntu
   variables:
     LIBGSL: libgsl23
+    EXTRA_PACKAGES: libstdc++-10-dev
     EXTRA_OPTIONS: --disable-eigen
 
 .weekly-clang-ubuntu24.04:
@@ -51,49 +52,49 @@
   script:
     - echo "Starting clang jobs"
 
-# CLANG 10
-weekly-build-clang-10-debug:
+# CLANG 11
+weekly-build-clang-11-debug:
   extends: .weekly-clang-ubuntu20.04
   needs: ["weekly-clang"]
   stage: build
   variables:
-    CLANG: 10
+    CLANG: 11
     MODE: debug
 
-weekly-build-clang-10-default:
+weekly-build-clang-11-default:
   extends: .weekly-clang-ubuntu20.04
   needs: ["weekly-clang"]
   stage: build
   variables:
-    CLANG: 10
+    CLANG: 11
     MODE: default
 
-weekly-build-clang-10-optimized:
+weekly-build-clang-11-optimized:
   extends: .weekly-clang-ubuntu20.04
   needs: ["weekly-clang"]
   stage: build
   variables:
-    CLANG: 10
+    CLANG: 11
     MODE: optimized
 
-weekly-test-clang-10-default:
+weekly-test-clang-11-default:
   extends: .weekly-clang-ubuntu20.04
   stage: test
-  needs: ["weekly-build-clang-10-default"]
+  needs: ["weekly-build-clang-11-default"]
   dependencies:
-    - weekly-build-clang-10-default
+    - weekly-build-clang-11-default
   variables:
-    CLANG: 10
+    CLANG: 11
     MODE: default
 
-weekly-test-clang-10-optimized:
+weekly-test-clang-11-optimized:
   extends: .weekly-clang-ubuntu20.04
   stage: test
-  needs: ["weekly-build-clang-10-optimized"]
+  needs: ["weekly-build-clang-11-optimized"]
   dependencies:
-    - weekly-build-clang-10-optimized
+    - weekly-build-clang-11-optimized
   variables:
-    CLANG: 10
+    CLANG: 11
     MODE: optimized
 
 # CLANG 18
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-code-linting.yml ns-3.43/utils/tests/gitlab-ci-code-linting.yml
--- ns-3.42/utils/tests/gitlab-ci-code-linting.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-code-linting.yml	2024-10-09 16:41:10.148656800 -0700
@@ -21,23 +21,13 @@
   variables:
     CLANG_FORMAT_VERSION: 17
 
-check-style-clang-format-16:
-  extends: .check-style-clang-format
-  variables:
-    CLANG_FORMAT_VERSION: 16
-
-check-style-clang-format-15:
-  extends: .check-style-clang-format
-  variables:
-    CLANG_FORMAT_VERSION: 15
-
 check-style-clang-format-14:
   extends: .check-style-clang-format
   variables:
     CLANG_FORMAT_VERSION: 14
 
 # Clang-tidy
-clang-tidy-17:
+clang-tidy-18:
   stage: code-linting
   image: ubuntu:rolling
   variables:
@@ -48,7 +38,7 @@
     - apt update
     - DEBIAN_FRONTEND=noninteractive apt install -y
       clang cmake
-      clang-tidy clang-tidy-17
+      clang-tidy clang-tidy-18
       libboost-all-dev libeigen3-dev libgtk-3-dev libopenmpi-dev libsqlite3-dev
       gsl-bin libgsl-dev libgsl27
       git ssh
@@ -68,18 +58,21 @@
     # File paths generated by git diff are relative to the working tree. Therefore, iregex should only contain paths relative to the working tree.
     - if [[ $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH ]] || (grep -q ".clang-tidy" $FILES_CHANGED) ; then
       echo "Running full clang-tidy" ;
-      run-clang-tidy-17 -p cmake-cache/ -quiet
+      run-clang-tidy-18 -p cmake-cache/ -quiet
       1> $CLANG_TIDY_OUTPUT
       2> /dev/null ;
       else
       echo "Running clang-tidy-diff" ;
       git diff -U0 upstream/$CI_DEFAULT_BRANCH |
-      clang-tidy-diff-17.py -path cmake-cache/ -p1 -quiet -use-color
+      clang-tidy-diff-18.py -path cmake-cache/ -p1 -quiet -use-color
       -iregex "(contrib|examples|src|scratch|utils)\/.+\.(cpp|cc|cxx|h|hpp)"
       1> $CLANG_TIDY_OUTPUT
-      2> /dev/null ;
+      2> /dev/null || true ;
       fi
 
+    # Trim empty lines from output file
+    - sed -i '/^$/d' $CLANG_TIDY_OUTPUT
+
     # Check job results
     - (! egrep -v "file not found \[clang-diagnostic-error\]" $CLANG_TIDY_OUTPUT | egrep -A3 "error:|warning:|note:")
     - echo "No clang-tidy errors found"
@@ -152,6 +145,6 @@
   extends: .python-format
   image: python:latest
 
-python-format-3.6:
+python-format-3.8:
   extends: .python-format
-  image: python:3.6
+  image: python:3.8
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-cppyy.yml ns-3.43/utils/tests/gitlab-ci-cppyy.yml
--- ns-3.42/utils/tests/gitlab-ci-cppyy.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-cppyy.yml	2024-10-09 16:41:10.148656800 -0700
@@ -2,6 +2,8 @@
   stage: test
   image: ubuntu:22.04 # python 3.10
   dependencies: []
+  variables:
+    FILES_CHANGED: git-diff-name-only.txt
   before_script:
     - apt update
     - DEBIAN_FRONTEND=noninteractive apt install -y
@@ -11,6 +13,22 @@
       git wget
     - pip install cppyy==3.1.2 matplotlib numpy
   script:
+    - if (git remote | grep -qw upstream) ; then
+      git remote remove upstream ;
+      fi
+    - git remote add -t $CI_DEFAULT_BRANCH --no-tags -f upstream https://gitlab.com/nsnam/ns-3-dev.git
+    - git diff --name-only upstream/$CI_DEFAULT_BRANCH | tee $FILES_CHANGED
+
+    # Run this job in the following cases: 1) default branch, 2) changes to source code, 3) changes to configurations.
+    # Skip this job in the opposite cases.
+    # File paths generated by git diff are relative to the working tree.
+    - |
+      if [[ $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH ]] &&
+         !(grep -qE ".*\.(cc|h)|CMakeLists.txt|bindings/|build-support/|ns3|utils/tests/.*\.(yaml|yml)" $FILES_CHANGED) ; then
+        echo "No source code or configurations changes found in this MR. Skipping this job.";
+        exit 0;
+      fi
+
     - ./ns3 configure -G Ninja --enable-python-bindings
     - ./ns3 build
     - ./ns3 run first.py
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-doc.yml ns-3.43/utils/tests/gitlab-ci-doc.yml
--- ns-3.42/utils/tests/gitlab-ci-doc.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-doc.yml	2024-10-09 16:41:10.148656800 -0700
@@ -8,12 +8,14 @@
     - pacman -Syu --noconfirm
       base-devel ninja cmake python ccache gsl gtk3 boost openmpi openssh
       graphviz imagemagick texlive-basic texlive-bin texlive-binextra texlive-latexextra
-      texlive-fontutils texlive-fontsrecommended python-sphinx
+      texlive-fontutils texlive-fontsrecommended texlive-mathscience python-sphinx wget
     #  doxygen
     # dia is archived
     - pacman --noconfirm -U https://archive.archlinux.org/packages/d/dia/dia-0.97.3-9-x86_64.pkg.tar.zst
-    # temporary revert to Doxygen 1.9.6
-    - pacman --noconfirm -U https://archive.archlinux.org/packages/d/doxygen/doxygen-1.9.6-1-x86_64.pkg.tar.zst
+    # temporary revert to Doxygen 1.11.0. The package has been recompiled
+    # without spdlog and wizard support to fix a library dependency.
+    - wget http://www.nsnam.org/packages/doxygen-1.11.0-4-x86_64.pkg.tar.zst
+    - pacman --noconfirm -U doxygen-1.11.0-4-x86_64.pkg.tar.zst
     # no policy is a good policy.
     - mv /etc/ImageMagick-7/policy.xml /etc/ImageMagick-7/policy.xml.bak
     # - sed -i "s/EPS,PDF,//g" /etc/ImageMagick-7/policy.xml
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-fedora.yml ns-3.43/utils/tests/gitlab-ci-fedora.yml
--- ns-3.42/utils/tests/gitlab-ci-fedora.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-fedora.yml	2024-10-09 16:41:10.148656800 -0700
@@ -28,6 +28,7 @@
       python python-devel
       pygobject3-devel python3-gobject gobject-introspection-devel
       graphviz-devel graphviz ipython
+      git
     - source /etc/profile.d/modules.sh
     - module load mpi/openmpi-x86_64
   variables:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-gcc.yml ns-3.43/utils/tests/gitlab-ci-gcc.yml
--- ns-3.42/utils/tests/gitlab-ci-gcc.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-gcc.yml	2024-10-09 16:41:10.148656800 -0700
@@ -4,7 +4,7 @@
 # "RELEASE", that has a value "weekly". Also, a variable "GCC" should be set
 # to True.
 
-# We support from 9 to the latest version. Check if everything builds fine
+# We support from 10 to the latest version. Check if everything builds fine
 # under debug, default, and optimized, on Linux.
 # The distro used is Ubuntu - the logic is:
 # - Test minimum and maximum GCC version
@@ -14,6 +14,8 @@
 # - jammy (22.04LTS) 11
 # - kinetic (22.10) 12
 # - lunar (23.04) 12
+# - lunar (23.10) 13
+# - noble (24.04LTS) 13
 
 .weekly-gcc-base:
   extends: .base-build
@@ -36,7 +38,7 @@
       libsqlite3-dev sqlite3
       libeigen3-dev
       qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
-      ssh
+      ssh git
 
 weekly-gcc:
   rules:
@@ -48,60 +50,7 @@
   script:
     - echo "Starting GCC jobs"
 
-# GCC 9 (not tested as it's the default for Ubuntu 20.04)
-# weekly-build-gcc-9-debug:
-#   extends: .weekly-gcc-base
-#   needs: ["weekly-gcc"]
-#   image: ubuntu:20.04
-#   stage: build
-#   variables:
-#     MODE: debug
-#     COMPILER: g++-9
-#     LIBGSL: libgsl23
-
-# weekly-build-gcc-9-default:
-#   extends: .weekly-gcc-base
-#   needs: ["weekly-gcc"]
-#   image: ubuntu:20.04
-#   stage: build
-#   variables:
-#     MODE: default
-#     COMPILER: g++-9
-#     LIBGSL: libgsl23
-
-# weekly-build-gcc-9-optimized:
-#   extends: .weekly-gcc-base
-#   needs: ["weekly-gcc"]
-#   image: ubuntu:20.04
-#   stage: build
-#   variables:
-#     MODE: optimized
-#     COMPILER: g++-9
-#     LIBGSL: libgsl23
-
-# weekly-test-gcc-9-default:
-#   extends: .weekly-gcc-base
-#   image: ubuntu:20.04
-#   stage: test
-#   needs: ["weekly-build-gcc-9-default"]
-#   dependencies:
-#     - weekly-build-gcc-9-default
-#   variables:
-#     MODE: default
-#     COMPILER: g++-9
-#     LIBGSL: libgsl23
-
-# weekly-test-gcc-9-optimized:
-#   extends: .weekly-gcc-base
-#   image: ubuntu:20.04
-#   stage: test
-#   needs: ["weekly-build-gcc-9-optimized"]
-#   dependencies:
-#     - weekly-build-gcc-9-optimized
-#   variables:
-#     MODE: optimized
-#     COMPILER: g++-9
-#     LIBGSL: libgsl23
+# GCC 10 (not tested here since it is configured for Ubuntu 20.04)
 
 # GCC 13
 weekly-build-gcc-13-debug:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-per-commit.yml ns-3.43/utils/tests/gitlab-ci-per-commit.yml
--- ns-3.42/utils/tests/gitlab-ci-per-commit.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-per-commit.yml	2024-10-09 16:41:10.148656800 -0700
@@ -15,7 +15,7 @@
       base-devel gcc clang libc++ cmake ninja ccache
       python
       boost gsl gtk3 openmpi
-      openssh
+      openssh git
 
 # Build stage
 per-commit-clang-optimized-libc++:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-scheduled.yml ns-3.43/utils/tests/gitlab-ci-scheduled.yml
--- ns-3.42/utils/tests/gitlab-ci-scheduled.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-scheduled.yml	2024-10-09 16:41:10.148656800 -0700
@@ -13,10 +13,11 @@
     - pacman-key --init
     - pacman -Syu --noconfirm
       base-devel cmake ninja ccache valgrind
-      python
+      python python-pip python-distutils-extra binutils lcov
       boost gsl gtk3 openmpi
       glibc-debug
-      openssh
+      openssh git
+    - pip install lcov_cobertura --break-system-packages
   script:
     - mkdir -p $CCACHE_BASEDIR_VALUE
     - export CCACHE_BASEDIR=${PWD}
@@ -25,7 +26,7 @@
     # missing the flag --disable-python
     - ./ns3 configure -d $MODE -GNinja --enable-examples --enable-tests --enable-mpi --disable-gtk $EXTRA_OPTIONS
     - if [[ "$CI_JOB_STAGE" == "build" ]];
-      then ./ns3 build;
+      then ./ns3 build $TARGET;
       fi
     - if [[ "$CI_JOB_STAGE" == "test" ]] || [[ "$FORCE_TESTS" == "Force" ]];
       then ./test.py -n $VALGRIND_FLAG $FULLNESS;
@@ -237,3 +238,28 @@
   tags:
     - nsnam
     - linux
+
+# Code coverage scanning
+weekly-build-coverage:
+  extends: .base-test
+  rules:
+    - if: $RELEASE == "weekly"
+    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
+      allow_failure: true
+  stage: build
+  needs: ["weekly-slow-jobs"]
+  dependencies: []
+  variables:
+    MODE: debug
+    EXTRA_OPTIONS: "--enable-gcov --disable-asserts --disable-logs"
+    TARGET: coverage_cobertura
+  artifacts:
+    paths:
+     - build/coverage/cobertura.xml
+    reports:
+      coverage_report:
+        coverage_format: cobertura
+        path: build/coverage/cobertura.xml
+  tags:
+    - nsnam
+    - linux
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci-ubuntu.yml ns-3.43/utils/tests/gitlab-ci-ubuntu.yml
--- ns-3.42/utils/tests/gitlab-ci-ubuntu.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci-ubuntu.yml	2024-10-09 16:41:10.148656800 -0700
@@ -28,7 +28,7 @@
       libsqlite3-dev sqlite3
       libeigen3-dev
       qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools
-      ssh
+      ssh git
 
 weekly-ubuntu:
   rules:
@@ -49,7 +49,7 @@
   variables:
     MODE: debug
     LIBGSL: libgsl23
-    COMPILER: g++
+    COMPILER: g++-10
 
 weekly-build-ubuntu-20.04-default:
   extends: .weekly-base-ubuntu
@@ -59,7 +59,7 @@
   variables:
     MODE: default
     LIBGSL: libgsl23
-    COMPILER: g++
+    COMPILER: g++-10
 
 weekly-build-ubuntu-20.04-optimized:
   extends: .weekly-base-ubuntu
@@ -69,7 +69,7 @@
   variables:
     MODE: optimized
     LIBGSL: libgsl23
-    COMPILER: g++
+    COMPILER: g++-10
 
 weekly-test-ubuntu-20.04-default:
   extends: .weekly-base-ubuntu
@@ -81,7 +81,7 @@
   variables:
     MODE: default
     LIBGSL: libgsl23
-    COMPILER: g++
+    COMPILER: g++-10
 
 weekly-test-ubuntu-20.04-optimized:
   extends: .weekly-base-ubuntu
@@ -93,7 +93,7 @@
   variables:
     MODE: optimized
     LIBGSL: libgsl23
-    COMPILER: g++
+    COMPILER: g++-10
 
 # Ubuntu 22.04 (Until January 2032)
 weekly-build-ubuntu-22.04-debug:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/gitlab-ci.yml ns-3.43/utils/tests/gitlab-ci.yml
--- ns-3.42/utils/tests/gitlab-ci.yml	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/gitlab-ci.yml	2024-10-09 16:41:10.148656800 -0700
@@ -45,10 +45,28 @@
 # MODE (debug, default, optimized)
 .base-build:
   script:
+    - if (git remote | grep -qw upstream) ; then
+      git remote remove upstream ;
+      fi
+    - git remote add -t $CI_DEFAULT_BRANCH --no-tags -f upstream https://gitlab.com/nsnam/ns-3-dev.git
+    - git diff --name-only upstream/$CI_DEFAULT_BRANCH | tee $FILES_CHANGED
+
+    # Run this job in the following cases: 1) default branch, 2) changes to source code, 3) changes to configurations.
+    # Skip this job in the opposite cases.
+    # File paths generated by git diff are relative to the working tree.
+    - |
+      if [[ $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH ]] &&
+         !(grep -qE ".*\.(cc|h)|CMakeLists.txt|bindings/|build-support/|ns3|utils/tests/.*\.(yaml|yml)" $FILES_CHANGED) ; then
+        echo "No source code or configurations changes found in this MR. Skipping this job.";
+        exit 0;
+      fi
+
     - mkdir -p $CCACHE_BASEDIR_VALUE
     - export CCACHE_BASEDIR=${PWD}
     - export CCACHE_DIR=${PWD}/$CCACHE_BASEDIR_VALUE
     - export MPI_CI=1
+    - ccache -M 3G # Set maximum cache size to 3GB
+    - ccache -F 0 # Remove the limit on number of files in the cache
     - CXX=$COMPILER ./ns3 configure -d $MODE -GNinja --enable-examples --enable-tests --enable-asserts --enable-werror --enable-mpi
       $EXTRA_OPTIONS
     - ccache -z
@@ -82,6 +100,7 @@
   timeout: 12h
   variables:
     CCACHE_BASEDIR_VALUE: ns-3-ccache-storage
+    FILES_CHANGED: git-diff-name-only.txt
   artifacts:
     expire_in: 2 day
     paths:
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/TestBase.py ns-3.43/utils/tests/TestBase.py
--- ns-3.42/utils/tests/TestBase.py	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/TestBase.py	2024-10-09 16:41:10.148656800 -0700
@@ -2,18 +2,7 @@
 #
 # Copyright (c) 2014 Siddharth Santurkar
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 
 from __future__ import print_function
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/test-ns3.py ns-3.43/utils/tests/test-ns3.py
--- ns-3.42/utils/tests/test-ns3.py	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/test-ns3.py	2024-10-09 16:41:10.148656800 -0700
@@ -2,18 +2,7 @@
 #
 # Copyright (c) 2021-2023 Universidade de Brasília
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 # Author: Gabriel Ferreira <gabrielcarvfer@gmail.com>
 
@@ -23,6 +12,7 @@
 
 import glob
 import os
+import platform
 import re
 import shutil
 import subprocess
@@ -52,8 +42,10 @@
     cmake_cache=os.path.abspath(os.path.join(ns3_path, "cmake-cache")),
 )
 win32 = sys.platform == "win32"
+macos = sys.platform == "darwin"
 platform_makefiles = "MinGW Makefiles" if win32 else "Unix Makefiles"
 ext = ".exe" if win32 else ""
+arch = platform.machine()
 
 
 def run_ns3(args, env=None, generator=platform_makefiles):
@@ -99,7 +91,7 @@
         arguments = [program]
 
     if args != "":
-        arguments.extend(re.findall('(?:".*?"|\S)+', args))  # noqa
+        arguments.extend(re.findall(r'(?:".*?"|\S)+', args))  # noqa
 
     for i in range(len(arguments)):
         arguments[i] = arguments[i].replace('"', "")
@@ -216,10 +208,11 @@
         # Import rootless docker settings from .bashrc
         with open(os.path.expanduser("~/.bashrc"), "r", encoding="utf-8") as f:
             docker_settings = re.findall("(DOCKER_.*=.*)", f.read())
-            for setting in docker_settings:
-                key, value = setting.split("=")
-                os.environ[key] = value
-            del docker_settings, setting, key, value
+            if docker_settings:
+                for setting in docker_settings:
+                    key, value = setting.split("=")
+                    os.environ[key] = value
+                    del setting, key, value
 
         # Create Docker client instance and start it
         ## The Python-on-whales container instance
@@ -294,6 +287,10 @@
             if os.sep + "examples" not in example_directory:
                 continue
 
+            # Skip directories without a CMakeLists.txt
+            if not os.path.exists(os.path.join(example_directory, "CMakeLists.txt")):
+                continue
+
             # Open the examples CMakeLists.txt and read it
             with open(
                 os.path.join(example_directory, "CMakeLists.txt"), "r", encoding="utf-8"
@@ -452,7 +449,7 @@
 
             # Extract libraries linked to the module
             modules[module_name_nodir]["libraries"].update(
-                re.findall("\${lib(.*?)}", "".join(cmake_contents))
+                re.findall(r"\${lib(.*?)}", "".join(cmake_contents))
             )
             modules[module_name_nodir]["libraries"] = list(
                 filter(
@@ -691,7 +688,7 @@
         # Build core to check if profile suffixes match the expected.
         return_code, stdout, stderr = run_ns3("build core")
         self.assertEqual(return_code, 0)
-        self.assertIn("Built target libcore", stdout)
+        self.assertIn("Built target core", stdout)
 
         libraries = get_libraries_list()
         self.assertGreater(len(libraries), 0)
@@ -722,7 +719,7 @@
         # Build core to check if profile suffixes match the expected
         return_code, stdout, stderr = run_ns3("build core")
         self.assertEqual(return_code, 0)
-        self.assertIn("Built target libcore", stdout)
+        self.assertIn("Built target core", stdout)
 
         libraries = get_libraries_list()
         self.assertGreater(len(libraries), 0)
@@ -884,7 +881,7 @@
 
         # If nothing went wrong, this should have worked
         self.assertEqual(return_code, 0)
-        self.assertIn("Built target libcore-test", stdout)
+        self.assertIn("Built target core-test", stdout)
 
         # Now we disabled the tests
         return_code, stdout, stderr = run_ns3('configure -G "{generator}" --disable-tests')
@@ -1075,7 +1072,9 @@
             self.assertLess(len(get_enabled_modules()), len(self.ns3_modules))
             self.assertIn("ns3-lte", enabled_modules)
             self.assertTrue(get_test_enabled())
-            self.assertLessEqual(len(get_programs_list()), len(self.ns3_executables))
+            self.assertLessEqual(
+                len(get_programs_list()), len(self.ns3_executables) + (win32 or macos)
+            )
 
             # Replace the ns3rc file with the wifi module, enabling examples and disabling tests
             with open(ns3rc_script, "w", encoding="utf-8") as f:
@@ -1283,7 +1282,7 @@
             )
         return_code, stdout, stderr = run_ns3("run abort")
         if win32:
-            self.assertEqual(return_code, 3)
+            self.assertNotEqual(return_code, 0)
             self.assertIn("abort-default.exe' returned non-zero exit status", stdout)
         else:
             self.assertEqual(return_code, 250)
@@ -1355,6 +1354,14 @@
                     f.write("")
 
         # Reload the cmake cache to pick them up
+        # It will fail because the empty scratch has no main function
+        return_code, stdout, stderr = run_ns3('configure -G "{generator}"')
+        self.assertEqual(return_code, 1)
+
+        # Remove the empty.cc file and try again
+        empty = "scratch/empty.cc"
+        os.remove(empty)
+        test_files.remove(empty)
         return_code, stdout, stderr = run_ns3('configure -G "{generator}"')
         self.assertEqual(return_code, 0)
 
@@ -1384,7 +1391,7 @@
                 self.assertEqual(return_code, 1)
 
         run_ns3("clean")
-        with DockerContainerManager(self, "ubuntu:20.04") as container:
+        with DockerContainerManager(self, "ubuntu:22.04") as container:
             container.execute("apt-get update")
             container.execute("apt-get install -y python3 cmake g++ ninja-build")
             try:
@@ -1531,6 +1538,10 @@
                     )
                 elif "mold" in stdout + stderr:
                     self.assertIn("library not found: %s" % invalid_or_nonexistent_library, stderr)
+                elif macos:
+                    self.assertIn(
+                        "library not found for -l%s" % invalid_or_nonexistent_library, stderr
+                    )
                 else:
                     self.assertIn("cannot find -l%s" % invalid_or_nonexistent_library, stderr)
             else:
@@ -1628,7 +1639,7 @@
         # Check if we can build this library
         return_code, stdout, stderr = run_ns3("build calibre")
         self.assertEqual(return_code, 0)
-        self.assertIn(cmake_build_target_command(target="libcalibre"), stdout)
+        self.assertIn(cmake_build_target_command(target="calibre"), stdout)
 
         shutil.rmtree("contrib/calibre", ignore_errors=True)
 
@@ -1812,12 +1823,12 @@
                 self.assertTrue(False, "Build with lld failed")
 
             # Now add mold to the PATH
-            if not os.path.exists("./mold-1.4.2-x86_64-linux.tar.gz"):
+            if not os.path.exists(f"./mold-1.4.2-{arch}-linux.tar.gz"):
                 container.execute(
-                    "wget https://github.com/rui314/mold/releases/download/v1.4.2/mold-1.4.2-x86_64-linux.tar.gz"
+                    f"wget https://github.com/rui314/mold/releases/download/v1.4.2/mold-1.4.2-{arch}-linux.tar.gz"
                 )
             container.execute(
-                "tar xzfC mold-1.4.2-x86_64-linux.tar.gz /usr/local --strip-components=1"
+                f"tar xzfC mold-1.4.2-{arch}-linux.tar.gz /usr/local --strip-components=1"
             )
 
             # Configure should detect and use mold
@@ -1838,7 +1849,7 @@
                 self.assertTrue(False, "Build with mold failed")
 
             # Delete mold leftovers
-            os.remove("./mold-1.4.2-x86_64-linux.tar.gz")
+            os.remove(f"./mold-1.4.2-{arch}-linux.tar.gz")
 
             # Disable use of fast linkers
             container.execute("./ns3 configure -G Ninja -- -DNS3_FAST_LINKERS=OFF")
@@ -1858,14 +1869,14 @@
         """
 
         run_ns3("clean")
-        with DockerContainerManager(self, "ubuntu:20.04") as container:
+        with DockerContainerManager(self, "ubuntu:22.04") as container:
             container.execute("apt-get update")
-            container.execute("apt-get install -y python3 ninja-build cmake clang-10")
+            container.execute("apt-get install -y python3 ninja-build cmake clang-12")
 
             # Enable ClangTimeTrace without git (it should fail)
             try:
                 container.execute(
-                    "./ns3 configure -G Ninja --enable-modules=core --enable-examples --enable-tests -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-10 -DNS3_CLANG_TIMETRACE=ON"
+                    "./ns3 configure -G Ninja --enable-modules=core --enable-examples --enable-tests -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 -DNS3_CLANG_TIMETRACE=ON"
                 )
             except DockerException as e:
                 self.assertIn("could not find git for clone of ClangBuildAnalyzer", e.stderr)
@@ -1875,7 +1886,7 @@
             # Enable ClangTimeTrace without git (it should succeed)
             try:
                 container.execute(
-                    "./ns3 configure -G Ninja --enable-modules=core --enable-examples --enable-tests -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-10 -DNS3_CLANG_TIMETRACE=ON"
+                    "./ns3 configure -G Ninja --enable-modules=core --enable-examples --enable-tests -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 -DNS3_CLANG_TIMETRACE=ON"
                 )
             except DockerException as e:
                 self.assertIn("could not find git for clone of ClangBuildAnalyzer", e.stderr)
@@ -1897,7 +1908,7 @@
             # Now try with GCC, which should fail during the configuration
             run_ns3("clean")
             container.execute("apt-get install -y g++")
-            container.execute("apt-get remove -y clang-10")
+            container.execute("apt-get remove -y clang-12")
 
             try:
                 container.execute(
@@ -1920,12 +1931,13 @@
         run_ns3("clean")
         with DockerContainerManager(self, "ubuntu:20.04") as container:
             container.execute("apt-get update")
-            container.execute("apt-get install -y python3 cmake clang-10")
+            container.execute("apt-get remove -y g++")
+            container.execute("apt-get install -y python3 cmake g++-10 clang-11")
 
             # Enable Ninja tracing without using the Ninja generator
             try:
                 container.execute(
-                    "./ns3 configure --enable-modules=core --enable-ninja-tracing -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-10"
+                    "./ns3 configure --enable-modules=core --enable-ninja-tracing -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-11"
                 )
             except DockerException as e:
                 self.assertIn("Ninjatracing requires the Ninja generator", e.stderr)
@@ -1937,7 +1949,7 @@
             # Enable Ninjatracing support without git (should fail)
             try:
                 container.execute(
-                    "./ns3 configure -G Ninja --enable-modules=core --enable-ninja-tracing -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-10"
+                    "./ns3 configure -G Ninja --enable-modules=core --enable-ninja-tracing -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-11"
                 )
             except DockerException as e:
                 self.assertIn("could not find git for clone of NinjaTracing", e.stderr)
@@ -1946,7 +1958,7 @@
             # Enable Ninjatracing support with git (it should succeed)
             try:
                 container.execute(
-                    "./ns3 configure -G Ninja --enable-modules=core --enable-ninja-tracing -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-10"
+                    "./ns3 configure -G Ninja --enable-modules=core --enable-ninja-tracing -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-11"
                 )
             except DockerException as e:
                 self.assertTrue(False, "Failed to configure with Ninjatracing")
@@ -1975,7 +1987,7 @@
             # Enable Clang TimeTrace feature for more detailed traces
             try:
                 container.execute(
-                    "./ns3 configure -G Ninja --enable-modules=core --enable-ninja-tracing -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-10 -DNS3_CLANG_TIMETRACE=ON"
+                    "./ns3 configure -G Ninja --enable-modules=core --enable-ninja-tracing -- -DCMAKE_CXX_COMPILER=/usr/bin/clang++-11 -DNS3_CLANG_TIMETRACE=ON"
                 )
             except DockerException as e:
                 self.assertTrue(False, "Failed to configure Ninjatracing with Clang's TimeTrace")
@@ -2004,18 +2016,6 @@
 
         run_ns3("clean")
 
-        # Ubuntu 20.04 ships with:
-        # - cmake 3.16: does support PCH
-        # - ccache 3.7: incompatible with pch
-        with DockerContainerManager(self, "ubuntu:20.04") as container:
-            container.execute("apt-get update")
-            container.execute("apt-get install -y python3 cmake ccache g++")
-            try:
-                container.execute("./ns3 configure")
-            except DockerException as e:
-                self.assertIn("incompatible with ccache", e.stderr)
-        run_ns3("clean")
-
         # Ubuntu 22.04 ships with:
         # - cmake 3.22: does support PCH
         # - ccache 4.5: compatible with pch
@@ -2050,7 +2050,7 @@
 
         run_ns3("clean")
 
-        with DockerContainerManager(self, "ubuntu:20.04") as container:
+        with DockerContainerManager(self, "ubuntu:22.04") as container:
             container.execute("apt-get update")
             container.execute("apt-get install -y python3 cmake g++")
             return_code = 0
@@ -2085,7 +2085,7 @@
         """
         return_code, stdout, stderr = run_ns3("build core")
         self.assertEqual(return_code, 0)
-        self.assertIn("Built target libcore", stdout)
+        self.assertIn("Built target core", stdout)
 
     def test_02_BuildNonExistingTargets(self):
         """!
@@ -2336,8 +2336,8 @@
             # Import ns-3 libraries with as a CMake package
             cmake_find_package_import = """
                                   list(APPEND CMAKE_PREFIX_PATH ./{lib}/cmake/ns3)
-                                  find_package(ns3 {version} COMPONENTS libcore)
-                                  target_link_libraries(test PRIVATE ns3::libcore)
+                                  find_package(ns3 {version} COMPONENTS core)
+                                  target_link_libraries(test PRIVATE ns3::core)
                                   """.format(
                 lib=("lib64" if lib64 else "lib"), version=version
             )
@@ -2390,7 +2390,7 @@
                             stderr.replace("\n", ""),
                         )
                     elif import_method == pkgconfig_import:
-                        self.assertIn("A required package was not found", stderr.replace("\n", ""))
+                        self.assertIn("not found", stderr.replace("\n", ""))
                     else:
                         raise Exception("Unknown import type")
                 else:
@@ -2401,7 +2401,7 @@
                 return_code, stdout, stderr = run_program("cmake", "--build .", cwd=install_prefix)
 
                 if version == "3.00":
-                    self.assertEqual(return_code, 2)
+                    self.assertEqual(return_code, 2, msg=stdout + stderr)
                     self.assertGreater(len(stderr), 0)
                 else:
                     self.assertEqual(return_code, 0)
@@ -2520,6 +2520,14 @@
         Test if we can build a static ns-3 library and link it to static programs
         @return None
         """
+        if (not win32) and (arch == "aarch64"):
+            if platform.libc_ver()[0] == "glibc":
+                from packaging.version import Version
+
+                if Version(platform.libc_ver()[1]) < Version("2.37"):
+                    self.skipTest(
+                        "Static linking on ARM64 requires glibc 2.37 where fPIC was enabled (fpic is limited in number of GOT entries)"
+                    )
 
         # First enable examples and static build
         return_code, stdout, stderr = run_ns3(
@@ -2583,6 +2591,9 @@
         if shutil.which("git") is None:
             self.skipTest("Missing git")
 
+        if win32:
+            self.skipTest("Optional components are not supported on Windows")
+
         # First enable automatic components fetching
         return_code, stdout, stderr = run_ns3("configure -- -DNS3_FETCH_OPTIONAL_COMPONENTS=ON")
         self.assertEqual(return_code, 0)
@@ -3146,29 +3157,30 @@
             return_code, stdout, stderr = run_ns3("clean")
             self.assertEqual(return_code, 0)
 
-            # Install VcPkg dependencies
-            container.execute("apt-get install -y zip unzip tar curl")
+            if arch != "aarch64":
+                # Install VcPkg dependencies
+                container.execute("apt-get install -y zip unzip tar curl")
 
-            # Install Armadillo dependencies
-            container.execute("apt-get install -y pkg-config gfortran")
+                # Install Armadillo dependencies
+                container.execute("apt-get install -y pkg-config gfortran")
 
-            # Install VcPkg
-            try:
-                container.execute("./ns3 configure -- -DNS3_VCPKG=ON")
-            except DockerException as e:
-                self.fail()
+                # Install VcPkg
+                try:
+                    container.execute("./ns3 configure -- -DNS3_VCPKG=ON")
+                except DockerException as e:
+                    self.fail()
 
-            # Install Armadillo with VcPkg
-            try:
-                container.execute("./ns3 configure -- -DTEST_PACKAGE_MANAGER:STRING=VCPKG")
-            except DockerException as e:
-                self.fail()
+                # Install Armadillo with VcPkg
+                try:
+                    container.execute("./ns3 configure -- -DTEST_PACKAGE_MANAGER:STRING=VCPKG")
+                except DockerException as e:
+                    self.fail()
 
-            # Try to build module using VcPkg's Armadillo
-            try:
-                container.execute("./ns3 build test-package-managers")
-            except DockerException as e:
-                self.fail()
+                # Try to build module using VcPkg's Armadillo
+                try:
+                    container.execute("./ns3 build test-package-managers")
+                except DockerException as e:
+                    self.fail()
 
         # Remove test module
         if os.path.exists(destination_src):
@@ -3410,6 +3422,23 @@
                 % (brightness, brightness_threshold, image),
             )
 
+    def test_04_CheckForBrokenLogs(self):
+        """!
+        Check if one of the log statements of examples/tests contains/exposes a bug.
+        @return None
+        """
+        # First enable examples and tests with sanitizers
+        return_code, stdout, stderr = run_ns3(
+            'configure -G "{generator}" -d release --enable-examples --enable-tests --enable-sanitizers'
+        )
+        self.assertEqual(return_code, 0)
+
+        # Then build and run tests setting the environment variable
+        return_code, stdout, stderr = run_program(
+            "test.py", "", python=True, env={"TEST_LOGS": "1"}
+        )
+        self.assertEqual(return_code, 0)
+
 
 def main():
     """!
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/utils/tests/test-test.py ns-3.43/utils/tests/test-test.py
--- ns-3.42/utils/tests/test-test.py	2024-05-29 15:29:47.228073800 -0700
+++ ns-3.43/utils/tests/test-test.py	2024-10-09 16:41:10.148656800 -0700
@@ -2,18 +2,7 @@
 #
 # Copyright (c) 2014 Siddharth Santurkar
 #
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License version 2 as
-# published by the Free Software Foundation;
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+# SPDX-License-Identifier: GPL-2.0-only
 #
 
 # NOTE: Run this script with the Python3 interpreter if the python3 compatibility
diff -Naur -x '*.dia' -x '*.pcap' -x '*.png' ns-3.42/VERSION ns-3.43/VERSION
--- ns-3.42/VERSION	2024-05-29 15:30:03.724115800 -0700
+++ ns-3.43/VERSION	2024-10-09 16:41:36.356755000 -0700
@@ -1 +1 @@
-3.42
+3.43
