A Discrete-Event Network Simulator
API
Loading...
Searching...
No Matches
wifi-fils-frame-test.cc
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Rami Abdallah
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License version 2 as
6 * published by the Free Software Foundation;
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program; if not, write to the Free Software
15 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 */
17
18#include "ns3/ap-wifi-mac.h"
19#include "ns3/assert.h"
20#include "ns3/attribute-container.h"
21#include "ns3/boolean.h"
22#include "ns3/enum.h"
23#include "ns3/error-model.h"
24#include "ns3/log.h"
25#include "ns3/mac48-address.h"
26#include "ns3/mgt-action-headers.h"
27#include "ns3/mgt-headers.h"
28#include "ns3/mobility-helper.h"
29#include "ns3/node-container.h"
30#include "ns3/object-factory.h"
31#include "ns3/rng-seed-manager.h"
32#include "ns3/simulator.h"
33#include "ns3/spectrum-helper.h"
34#include "ns3/string.h"
35#include "ns3/test.h"
36#include "ns3/tuple.h"
37#include "ns3/wifi-mac-header.h"
38#include "ns3/wifi-mac-helper.h"
39#include "ns3/wifi-net-device.h"
40#include "ns3/wifi-psdu.h"
41#include "ns3/wifi-utils.h"
42#include "ns3/yans-wifi-helper.h"
43#include "ns3/yans-wifi-phy.h"
44
45#include <algorithm>
46#include <filesystem>
47#include <iterator>
48#include <optional>
49#include <variant>
50
51using namespace ns3;
52
53/// \ingroup wifi-test
54/// \ingroup tests
55/// \brief Fast Initial Link Setup (FILS) frame Test Suite
56/// Test suite intended to test (de)serialization and timing
57/// of frames associated with FILS procedure.
58/// The test creates a BSS consisting of an AP and client and
59/// and analyzes the timings and contents of frames associated
60/// with FILS procedure.
61
62NS_LOG_COMPONENT_DEFINE("WifiFilsFrameTestSuite");
63
64static const auto DEFAULT_BANDWIDTH = 20;
65static const auto INVALID_CHAN_NUM = 0;
66static const auto DEFAULT_PRIMARY_INDEX = 0;
67static const auto DEFAULT_SIM_STOP_TIME = MilliSeconds(610);
68static const auto DEFAULT_RNG_SEED = 3;
69static const auto DEFAULT_RNG_RUN = 7;
70static const auto DEFAULT_STREAM_INDEX = 100;
71static const auto DUMMY_AP_ADDR = Mac48Address("00:00:00:00:00:10");
72static const auto DEFAULT_STANDARD = WifiStandard::WIFI_STANDARD_80211ax;
73static const auto DEFAULT_BAND = WifiPhyBand::WIFI_PHY_BAND_6GHZ;
74static const auto DEFAULT_SSID = "01234567890123456789012345678901"; // max length (32 bytes)
75static const auto DEFAULT_BCN_INTRVL = 100 * WIFI_TU;
76static const auto DEFAULT_FILS_INTRVL = 20 * WIFI_TU;
77static const auto DEFAULT_TIMING_TOLERANCE = MicroSeconds(100);
78static const auto DEFAULT_UNSOL_PROBE_RESP_EN = false;
79static const auto DEFAULT_PCAP_PREFIX = "ap-fils";
80static const auto DEFAULT_OUTDIR = ".";
81static const auto DEFAULT_ENABLE_PCAP = false;
82static const auto DEFAULT_AP_LOC = Vector(0.01, 0, 0);
83static const auto DEFAULT_CLIENT_LOC = Vector(0, 0, 0);
84static const uint8_t WIFI_6GHZ_FD_PHY_IDX = 4;
85
86/// @brief Wi-Fi FILS frame test parameters
88{
89 uint16_t bw{DEFAULT_BANDWIDTH}; ///< Operation bandwidth
90 std::string ssid{DEFAULT_SSID}; ///< SSID name
91 uint8_t nss{0}; ///< Number of spatial streams
92 Time bcnIntrvl{DEFAULT_BCN_INTRVL}; ///< Time between Beacons
93 Time filsIntrvl{DEFAULT_FILS_INTRVL}; ///< Time between FILS frames
94 bool unsolProbeRespEn{DEFAULT_UNSOL_PROBE_RESP_EN}; ///< Unsolicited Probe Response enable
95 uint8_t expNssFld{0}; ///< Expected NSS field
96 uint8_t expChWidFld{0}; ///< Expected Channel Width field
97};
98
99/// @ingroup wifi-test
100/// @ingroup tests
101/// Test FILS frames
103{
104 public:
105 /// @brief constructor
106 /// @param params the parameters for this test
108
109 /// Transmitted PSDUs
111 {
112 Time timeSt; ///< timestamp
114 };
115
116 private:
117 /// Timing statistic for test validation
119 {
120 size_t cntBcns{0}; ///< Beacon frames count
121 Time bcnTimeSt{0}; ///< last Beacon timestamp
122 size_t cntFilsOrUnsolProbeResps{0}; ///< FILS Discovery or Unsolicited Probe Response count
123 Time filsOrUnsolProbeRespTimeSt{0}; ///< last FILS Discovery or Unsolicited Probe Response
124 ///< timestamp
125 Time filsOrUnsolProbeRespTimeDelta{0}; ///< time between last FILS Discovery or Unsolicited
126 ///< Probe Response and last Beacon
127 };
128
129 /// @brief setup a WifiNetDevice
130 /// @param channel the channel to attach to
131 /// @param isAp whether the device is an AP
132 /// @return the created WifiNetDevice
134
135 /// @brief callback connected to PSDU TX begin trace source
136 /// @param psduMap the transmitted PSDU map
137 /// @param txVector the TXVECTOR
138 /// @param txPowerW the TX power in Watts
139 void PsduTxCallback(WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW);
140
141 /// @brief validate the given FILS Discovery frame
142 /// @param filsDisc the FILS Discovery frame
143 void ValidateFilsDiscFrame(const FilsDiscHeader& filsDisc);
144
145 /// @brief check the correctness of the test
146 void ValidateTest();
147
148 /// @brief Check the number of FILS Discovery frames or unsolicited Probe Response frames
149 /// transmitted since the last Beacon frame
150 /// @param psduCapt information about the transmitted Beacon frame
151 void ValidateCnt(const PsduCapture& psduCapt);
152
153 /// @brief check the timing of the transmitted FILS Discovery or unsolicited Probe Response
154 /// @param psduCapt information about the FILS Discovery or unsolicited Probe Response
155 void ValidateTiming(const PsduCapture& psduCapt);
156
157 /// @brief Get the FILS Discovery header, if present in the given frame
158 /// @param psduCapt information about the given frame
159 /// @return the FILS Discovery header, if present
160 std::optional<FilsDiscHeader> GetFilsDiscFrame(const PsduCapture& psduCapt);
161
162 void DoSetup() override;
163 void DoTeardown() override;
164 void DoRun() override;
165
166 TimeStats m_timeStats; ///< collected timing statistic
167 Ptr<WifiNetDevice> m_ap{nullptr}; ///< AP device
168 Ptr<WifiNetDevice> m_client{nullptr}; ///< Client device
169 WifiFilsFrameTestParams m_params; ///< Test parameters
170 std::vector<PsduCapture> m_txPsdus{}; ///< TX PSDUS frame infos
171};
172
174 : TestCase("WifiFilsFrameTest"),
175 m_params(params)
176{
177}
178
181{
182 NodeContainer node;
184 WifiMacHelper mac;
185 WifiHelper wifi;
186 MobilityHelper mobility;
187 node.Create(1);
188 phy.SetChannel(channel);
190 channelValue.Set(
192 phy.Set("ChannelSettings", channelValue);
193 phy.Set("Antennas", UintegerValue(m_params.nss));
194 phy.Set("MaxSupportedTxSpatialStreams", UintegerValue(m_params.nss));
195 phy.Set("MaxSupportedRxSpatialStreams", UintegerValue(m_params.nss));
196
197 wifi.SetStandard(DEFAULT_STANDARD);
198 wifi.SetRemoteStationManager("ns3::ConstantRateWifiManager");
199
200 if (isAp)
201 {
202 mac.SetType("ns3::ApWifiMac",
203 "Ssid",
205 "BeaconGeneration",
206 BooleanValue(true),
207 "BeaconInterval",
209 "FdBeaconInterval6GHz",
211 "SendUnsolProbeResp",
213 }
214 else
215 {
216 mac.SetType("ns3::StaWifiMac",
217 "Ssid",
219 "ActiveProbing",
220 BooleanValue(false));
221 }
222 auto testDevs = wifi.Install(phy, mac, node);
223 wifi.AssignStreams(testDevs, DEFAULT_STREAM_INDEX);
224 auto dev = DynamicCast<WifiNetDevice>(testDevs.Get(0));
225 mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
226 mobility.Install(node);
227 node.Get(0)->GetObject<MobilityModel>()->SetPosition(isAp ? DEFAULT_AP_LOC
229 phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
230 if (isAp && DEFAULT_ENABLE_PCAP)
231 {
232 auto path = std::filesystem::path(DEFAULT_OUTDIR);
233 phy.EnablePcap(path.append(DEFAULT_PCAP_PREFIX).string(), testDevs);
234 }
235 return dev;
236}
237
238void
240{
241 auto psdu = psduMap[SU_STA_ID];
242 m_txPsdus.push_back({Simulator::Now(), psdu});
243 NS_LOG_DEBUG("MPDU " << **psdu->begin());
244}
245
246void
248{
251 auto channel = YansWifiChannelHelper::Default().Create();
252 // setup devices and capabilities
253 m_ap = SetupDevice(channel, true);
254 m_client = SetupDevice(channel, false);
255 // setup AP TX PSDU trace
256 auto phy = m_ap->GetPhy();
257 phy->TraceConnectWithoutContext("PhyTxPsduBegin",
259}
260
261void
263{
264 if (m_timeStats.cntBcns > 0)
265 {
268 static_cast<std::size_t>((m_params.bcnIntrvl / m_params.filsIntrvl).GetHigh() - 1),
269 "Number of FILS or Unsolicited Response Frames per Beacon Interval is not expected");
270 }
271 m_timeStats.bcnTimeSt = psduCapt.timeSt;
274}
275
276void
278{
289 "Timing of FILS or Unsolicited Response frames is not as expected at time "
290 << psduCapt.timeSt.GetTimeStep());
291}
292
293std::optional<FilsDiscHeader>
295{
296 auto pkt = psduCapt.psdu->GetPayload(0)->Copy();
297 WifiActionHeader actionHdr;
298 pkt->RemoveHeader(actionHdr);
299 if ((actionHdr.GetCategory() == WifiActionHeader::PUBLIC) &&
301 {
302 FilsDiscHeader filsDisc;
303 pkt->PeekHeader(filsDisc);
304 return filsDisc;
305 }
306 return std::nullopt;
307}
308
309void
311{
312 for (const auto& psduCapt : m_txPsdus)
313 {
314 auto hdr = psduCapt.psdu->GetHeader(0);
315 if (hdr.IsBeacon())
316 {
317 ValidateCnt(psduCapt);
318 }
319 else
320 {
321 if (m_params.unsolProbeRespEn && hdr.IsProbeResp() && hdr.GetAddr1().IsBroadcast())
322 { // Unsolicited Probe Response frame
323 ValidateTiming(psduCapt);
324 }
325 else if (hdr.IsAction())
326 { // possible FILS Discovery frame
327 if (auto filsDisc = GetFilsDiscFrame(psduCapt))
328 {
329 ValidateFilsDiscFrame(filsDisc.value());
330 ValidateTiming(psduCapt);
331 }
332 }
333 }
335 {
336 break;
337 }
338 }
339}
340
341void
343{
344 NS_TEST_ASSERT_MSG_EQ(filsDisc.GetSsid(), m_params.ssid, "FILS Discovery frame SSID mismatch");
345 NS_TEST_ASSERT_MSG_EQ(+filsDisc.m_fdCap->m_chWidth,
347 "FILS Discovery frame channel width mismatch");
348 NS_TEST_ASSERT_MSG_EQ(+filsDisc.m_fdCap->m_maxNss,
350 "FILS Discovery frame NSS mismatch");
351 NS_TEST_ASSERT_MSG_EQ(+filsDisc.m_fdCap->m_phyIdx,
353 "FILS Discovery frame PHY idx mismatch");
354}
355
356void
358{
362 ValidateTest();
363}
364
365void
367{
368 m_ap->Dispose();
369 m_ap = nullptr;
370 m_client->Dispose();
371 m_client = nullptr;
372 m_txPsdus.clear();
373}
374
375/// Testcases for FILS frame test
376enum class WifiFilsFrameTestCase : uint8_t
377{
384 COUNT,
385};
386
389{
391 switch (tc)
392 {
394 params.bw = 20;
395 params.ssid = DEFAULT_SSID;
396 params.nss = 1;
397 params.expChWidFld = 0;
398 params.expNssFld = 0;
399 break;
401 params.bw = 20;
402 params.ssid = "BW20MHZ_NSS3";
403 params.nss = 3;
404 params.filsIntrvl = 15 * WIFI_TU;
405 params.expChWidFld = 0;
406 params.expNssFld = 2;
407 break;
409 params.bw = 40;
410 params.ssid = "BW40MHZ_NSS2";
411 params.nss = 2;
412 params.filsIntrvl = 10 * WIFI_TU;
413 params.expChWidFld = 1;
414 params.expNssFld = 1;
415 break;
417 params.bw = 80;
418 params.ssid = "BW80MHZ_NSS2";
419 params.nss = 2;
420 params.filsIntrvl = 7 * WIFI_TU;
421 params.expChWidFld = 2;
422 params.expNssFld = 1;
423 break;
425 params.bw = 160;
426 params.ssid = "BW160MHZ_NSS2";
427 params.nss = 2;
428 params.filsIntrvl = 5 * WIFI_TU;
429 params.expChWidFld = 3;
430 params.expNssFld = 1;
431 break;
433 params.bw = 160;
434 params.ssid = "BW160MHZ_NSS2";
435 params.nss = 2;
436 params.unsolProbeRespEn = true;
437 params.expChWidFld = 3;
438 params.expNssFld = 1;
439 break;
440 default:
441 NS_ABORT_MSG("Testcase is unsupported");
442 break;
443 }
444 return params;
445}
446
447/// \ingroup wifi-test
448/// \ingroup tests
449/// \brief WiFi FILS frame Test Suite
451{
452 public:
454};
455
457 : TestSuite("wifi-fils-frame", Type::UNIT)
458{
459 std::vector<WifiFilsFrameTestParams> testCases{
460 {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW20MHZ_NSS1_DISC)},
461 {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW20MHZ_NSS3_DISC)},
462 {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW40MHZ_NSS2_DISC)},
463 {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW80MHZ_NSS2_DISC)},
464 {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW160MHZ_NSS2_DISC)},
465 {WifiFilsFrameTestBuildCase(WifiFilsFrameTestCase::BW160MHZ_NSS2_PROBE)},
466 };
467 for (const auto& tc : testCases)
468 {
469 AddTestCase(new WifiFilsFrameTest(tc), TestCase::Duration::QUICK);
470 }
471}
472
Ptr< WifiNetDevice > m_ap
AP device.
void DoRun() override
Implementation to actually run this TestCase.
Ptr< WifiNetDevice > m_client
Client device.
void PsduTxCallback(WifiConstPsduMap psduMap, WifiTxVector txVector, double txPowerW)
callback connected to PSDU TX begin trace source
Ptr< WifiNetDevice > SetupDevice(Ptr< YansWifiChannel > &channel, bool isAp)
setup a WifiNetDevice
std::vector< PsduCapture > m_txPsdus
TX PSDUS frame infos.
void ValidateCnt(const PsduCapture &psduCapt)
Check the number of FILS Discovery frames or unsolicited Probe Response frames transmitted since the ...
void ValidateTiming(const PsduCapture &psduCapt)
check the timing of the transmitted FILS Discovery or unsolicited Probe Response
TimeStats m_timeStats
collected timing statistic
void ValidateFilsDiscFrame(const FilsDiscHeader &filsDisc)
validate the given FILS Discovery frame
void ValidateTest()
check the correctness of the test
void DoTeardown() override
Implementation to do any local setup required for this TestCase.
void DoSetup() override
Implementation to do any local setup required for this TestCase.
WifiFilsFrameTest(const WifiFilsFrameTestParams &params)
constructor
WifiFilsFrameTestParams m_params
Test parameters.
std::optional< FilsDiscHeader > GetFilsDiscFrame(const PsduCapture &psduCapt)
Get the FILS Discovery header, if present in the given frame.
WiFi FILS frame Test Suite.
Implement the FILS (Fast Initial Link Setup) action frame.
const std::string & GetSsid() const
OptFieldWithPresenceInd< FdCapability > m_fdCap
FD Capability.
an EUI-48 address
Definition: mac48-address.h:46
Helper class used to assign positions and mobility models to nodes.
Keep track of the current position and velocity of an object.
keep track of a set of node pointers.
void Create(uint32_t n)
Create n nodes and append pointers to them to the end of this NodeContainer.
Ptr< Node > Get(uint32_t i) const
Get the Ptr<Node> stored in this container at a given index.
Ptr< T > GetObject() const
Get a pointer to the requested aggregated Object.
Definition: object.h:522
void Dispose()
Dispose of this Object.
Definition: object.cc:258
Ptr< Packet > Copy() const
performs a COW copy of the packet.
Definition: packet.cc:131
Smart pointer class similar to boost::intrusive_ptr.
Definition: ptr.h:77
static void SetRun(uint64_t run)
Set the run number of simulation.
static void SetSeed(uint32_t seed)
Set the seed.
static void Destroy()
Execute the events scheduled with ScheduleDestroy().
Definition: simulator.cc:142
static Time Now()
Return the current simulation virtual time.
Definition: simulator.cc:208
static void Run()
Run the simulation.
Definition: simulator.cc:178
static void Stop()
Tell the Simulator the calling event should be the last one executed.
Definition: simulator.cc:186
The IEEE 802.11 SSID Information Element.
Definition: ssid.h:36
encapsulates test code
Definition: test.h:1061
void AddTestCase(TestCase *testCase, Duration duration=Duration::QUICK)
Add an individual child TestCase to this test suite.
Definition: test.cc:302
A suite of tests to run.
Definition: test.h:1273
Type
Type of test.
Definition: test.h:1280
Simulation virtual time values and global simulation resolution.
Definition: nstime.h:105
int64_t GetTimeStep() const
Get the raw time value, in the current resolution unit.
Definition: nstime.h:445
AttributeValue implementation for Tuple.
Definition: tuple.h:78
void Set(const result_type &value)
Set the stored values.
Definition: tuple.h:340
Hold an unsigned integer type.
Definition: uinteger.h:45
See IEEE 802.11 chapter 7.3.1.11 Header format: | category: 1 | action value: 1 |.
CategoryValue GetCategory() const
Return the category value.
ActionValue GetAction() const
Return the action value.
helps to create WifiNetDevice objects
Definition: wifi-helper.h:324
create MAC layers for a ns3::WifiNetDevice.
Ptr< WifiPhy > GetPhy() const
@ DLT_IEEE802_11_RADIO
Include Radiotap link layer information.
Definition: wifi-helper.h:178
std::tuple< uint8_t, uint16_t, WifiPhyBand, uint8_t > ChannelTuple
Tuple identifying an operating channel.
Definition: wifi-phy.h:926
Ptr< const Packet > GetPayload(std::size_t i) const
Get the payload of the i-th MPDU.
Definition: wifi-psdu.cc:291
This class mimics the TXVECTOR which is to be passed to the PHY in order to define the parameters whi...
static YansWifiChannelHelper Default()
Create a channel helper in a default working state.
Ptr< YansWifiChannel > Create() const
Make it easy to create and manage PHY objects for the YANS model.
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message.
Definition: abort.h:49
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
Definition: log.h:202
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
Definition: log.h:268
#define NS_TEST_ASSERT_MSG_EQ(actual, limit, msg)
Test that an actual and expected (limit) value are equal and report and abort if not.
Definition: test.h:145
#define NS_TEST_ASSERT_MSG_EQ_TOL(actual, limit, tol, msg)
Test that actual and expected (limit) values are equal to plus or minus some tolerance and report and...
Definition: test.h:338
Time MicroSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1343
Time MilliSeconds(uint64_t value)
Construct a Time in the indicated unit.
Definition: nstime.h:1331
Every class exported by the ns3 library is enclosed in the ns3 namespace.
std::unordered_map< uint16_t, Ptr< const WifiPsdu > > WifiConstPsduMap
Map of const PSDUs indexed by STA-ID.
const Time WIFI_TU
Wi-Fi Time Unit (see IEEE 802.11-2020 sec. 3.1)
Definition: wifi-utils.cc:33
Callback< R, Args... > MakeCallback(R(T::*memPtr)(Args...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
Definition: callback.h:700
static constexpr uint16_t SU_STA_ID
STA_ID to identify a single user (SU)
Definition: wifi-mode.h:35
Ptr< const WifiPsdu > psdu
PSDU.
Timing statistic for test validation.
Time filsOrUnsolProbeRespTimeDelta
time between last FILS Discovery or Unsolicited Probe Response and last Beacon
Time bcnTimeSt
last Beacon timestamp
Time filsOrUnsolProbeRespTimeSt
last FILS Discovery or Unsolicited Probe Response timestamp
size_t cntFilsOrUnsolProbeResps
FILS Discovery or Unsolicited Probe Response count.
size_t cntBcns
Beacon frames count.
Wi-Fi FILS frame test parameters.
Time filsIntrvl
Time between FILS frames.
uint8_t nss
Number of spatial streams.
std::string ssid
SSID name.
uint8_t expNssFld
Expected NSS field.
bool unsolProbeRespEn
Unsolicited Probe Response enable.
Time bcnIntrvl
Time between Beacons.
uint8_t expChWidFld
Expected Channel Width field.
uint16_t bw
Operation bandwidth.
PublicActionValue publicAction
public
static const auto DEFAULT_SSID
static const auto DUMMY_AP_ADDR
static const auto DEFAULT_UNSOL_PROBE_RESP_EN
static const auto DEFAULT_BANDWIDTH
Fast Initial Link Setup (FILS) frame Test Suite Test suite intended to test (de)serialization and tim...
static const uint8_t WIFI_6GHZ_FD_PHY_IDX
static const auto DEFAULT_STREAM_INDEX
static const auto DEFAULT_STANDARD
static const auto INVALID_CHAN_NUM
WifiFilsFrameTestCase
Testcases for FILS frame test.
static const auto DEFAULT_RNG_RUN
static const auto DEFAULT_PRIMARY_INDEX
static WifiFilsFrameTestSuite g_WifiFilsFrameTestSuite
static const auto DEFAULT_BCN_INTRVL
static const auto DEFAULT_AP_LOC
static const auto DEFAULT_OUTDIR
static const auto DEFAULT_CLIENT_LOC
static const auto DEFAULT_BAND
WifiFilsFrameTestParams WifiFilsFrameTestBuildCase(const WifiFilsFrameTestCase &tc)
static const auto DEFAULT_ENABLE_PCAP
static const auto DEFAULT_TIMING_TOLERANCE
static const auto DEFAULT_FILS_INTRVL
static const auto DEFAULT_RNG_SEED
static const auto DEFAULT_PCAP_PREFIX
static const auto DEFAULT_SIM_STOP_TIME