From 326ae2fc3ad50972952b022819c759e767c1913d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Gonz=C3=A1lez=20L=C3=B3pez?= Date: Mon, 14 Sep 2026 10:33:42 +0200 Subject: [PATCH 1/9] chore: isolate trailing whitespace normalization Separate the existing final-newline and trailing-blank-line normalization from the behavioral fixes so each later diff describes only its decision. The scoped debug opp_repl fingerprint is unchanged. Validation: incremental debug build, directly related tests and scoped opp_repl controls passed. --- doc/src/migration-guide/index.rst | 2 +- .../ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc | 1 - src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h | 1 - .../wireless/ieee80211/packetlevel/Ieee80211Radio.cc | 1 - .../wireless/ieee80211/packetlevel/Ieee80211Radio.h | 1 - .../wireless/ieee80211/packetlevel/Ieee80211Radio.ned | 1 - 6 files changed, 1 insertion(+), 6 deletions(-) diff --git a/doc/src/migration-guide/index.rst b/doc/src/migration-guide/index.rst index 942633d269f..4c83dcc6ebb 100644 --- a/doc/src/migration-guide/index.rst +++ b/doc/src/migration-guide/index.rst @@ -381,4 +381,4 @@ Computing and verifying checksums is up to the protocol implementations, and it is independent of the actual representation of the header. In general, protocols should have parameters to declare the checksum correct/incorrect or to actually compute and verify it. Of course, for emulation, one should enable computing and -verifying checksums. \ No newline at end of file +verifying checksums. diff --git a/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc b/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc index 361208a5f10..bd6781a5962 100644 --- a/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc +++ b/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc @@ -51,4 +51,3 @@ bool QoSDuplicateRemoval::isDuplicate(const Ptr } // namespace ieee80211 } // namespace inet - diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h index 4e3b095597e..13effaf6736 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h @@ -45,4 +45,3 @@ class INET_API Ieee80211MgmtApBase : public Ieee80211MgmtBase } // namespace inet #endif - diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc index 56114b6c2c6..026cff806bb 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc @@ -334,4 +334,3 @@ const Ptr Ieee80211Radio::peekIeee80211PhyHeaderAtFron } // namespace physicallayer } // namespace inet - diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h index aa416de6ed8..754091b7311 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h @@ -57,4 +57,3 @@ class INET_API Ieee80211Radio : public FlatRadioBase } // namespace inet #endif - diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned index c32061114d3..aedc519438d 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned @@ -49,4 +49,3 @@ module Ieee80211Radio extends FlatRadioBase @signal[radioChannelChanged](type=long); @statistic[radioChannel](title="Radio channel"; source=radioChannelChanged; record=histogram,vector; interpolationmode=sample-hold); } - From bbe54a426d64c905628c49568ef4ff4e927a3bf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Gonz=C3=A1lez=20L=C3=B3pez?= Date: Mon, 14 Sep 2026 10:35:04 +0200 Subject: [PATCH 2/9] ieee80211: correct the mesh no-forwarding reason code Mesh path errors without forwarding information must use reason 62 (IEEE Std 802.11-2024, Table 9-79). Value 60 already denotes invalid mesh security capability. Verify the independent wire bytes and document the numeric migration. The scoped debug opp_repl fingerprint is unchanged. Validation: incremental debug build, directly related tests and scoped opp_repl controls passed. --- WHATSNEW | 4 ++++ doc/src/migration-guide/index.rst | 5 ++++ .../ieee80211/mgmt/Ieee80211MgmtFrame.msg | 2 +- tests/unit/Ieee80211BeaconWire_1.test | 23 +++++++++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 tests/unit/Ieee80211BeaconWire_1.test diff --git a/WHATSNEW b/WHATSNEW index d0fc713aa2f..9ed48230390 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -29,6 +29,10 @@ Notable backward incompatible changes are the following: adaptive rate control, either where a station transmits to several peers or where it sends group-addressed traffic. +2. IEEE 802.11 wire and reception corrections + + The mesh no-forwarding-information reason code is corrected from 60 to 62. + Notable backward compatible changes are the following: 1. IEEE 802.11 per-station rate statistics diff --git a/doc/src/migration-guide/index.rst b/doc/src/migration-guide/index.rst index 4c83dcc6ebb..2107aeb68ca 100644 --- a/doc/src/migration-guide/index.rst +++ b/doc/src/migration-guide/index.rst @@ -4,6 +4,11 @@ Migrating Code from INET 3.x ============================ Release: |release| +``RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION`` now has its standard value, +62. Code using the symbolic name needs only recompilation. Update external +numeric mappings that used 60 for this reason. Old stored value 60 cannot be +reinterpreted automatically: it also denoted invalid mesh security capability. + Migrating ``FieldsChunkSerializer`` Subclasses --------------------------------------------- diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg index 47632a7a5cd..4d7863c1153 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg @@ -71,7 +71,7 @@ enum Ieee80211ReasonCode RC_MESH_INCONSISTENT_PARAMETERS = 59; RC_MESH_INVALID_SECURITY_CAPABILITY = 60; RC_MESH_PATH_ERROR_NO_PROXY_INFORMATION = 61; - RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION = 60; + RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION = 62; // IEEE Std 802.11-2024, Table 9-79 RC_MESH_PATH_ERROR_DESTINATION_UNREACHABLE = 63; RC_MAC_ADDRESS_ALREADY_EXISTS_IN_MBSS = 64; RC_MESH_CHANNEL_SWITCH_REGULATORY_REQUIREMENTS = 65; diff --git a/tests/unit/Ieee80211BeaconWire_1.test b/tests/unit/Ieee80211BeaconWire_1.test new file mode 100644 index 00000000000..bf03ebf0e43 --- /dev/null +++ b/tests/unit/Ieee80211BeaconWire_1.test @@ -0,0 +1,23 @@ +%description: +Check the mesh no-forwarding-information reason code on wire. + +%includes: +#include "inet/common/packet/Packet.h" +#include "inet/common/packet/chunk/BytesChunk.h" +#include "inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame_m.h" + +%global: +using namespace inet; +using namespace inet::ieee80211; + +%activity: +ASSERT(RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION == 62); +auto reason = makeShared(); +reason->setReasonCode(RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION); +reason->setChunkLength(B(2)); +Packet reasonPacket("reason", reason); +ASSERT(reasonPacket.peekDataAsBytes()->getBytes() == std::vector({62, 0})); +EV << "Mesh reason wire checks passed.\n"; + +%contains: stdout +Mesh reason wire checks passed. From 72ba7b29deda0bebfa455eb8b64e5d29e2b1b8cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Gonz=C3=A1lez=20L=C3=B3pez?= Date: Mon, 14 Sep 2026 10:40:51 +0200 Subject: [PATCH 3/9] ieee80211: isolate non-QoS receive duplicate identities Non-QoS data shares the legacy receive cache with management traffic, rather than QoS TID 0 (IEEE Std 802.11-2024, Table 10-6). Separate these identities so a valid retry cannot be discarded because an unrelated QoS frame reused its sequence number. Exercise the recipient delivery path and transmitter/TID/fragment distinctions. The 158 explicitly selected legacy fingerprint cases pass in debug mode. This commit changes 0 selected rows: 0 with trajectory changes and 0 with serialized-byte changes. Record only measured causal differences; preserve graphical expectations and unselected entries. Attribution and per-case deltas are in ai-logs/executions/2026-09-14_pr1189-cleanup/. Validation: incremental debug build, directly related tests and scoped opp_repl controls passed. --- WHATSNEW | 4 ++ .../duplicateremoval/QosDuplicateRemoval.cc | 4 +- .../unit/Ieee80211QosDuplicateRemoval_1.test | 70 +++++++++++++++++++ 3 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 tests/unit/Ieee80211QosDuplicateRemoval_1.test diff --git a/WHATSNEW b/WHATSNEW index 9ed48230390..0420a11ce90 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -31,7 +31,11 @@ Notable backward incompatible changes are the following: 2. IEEE 802.11 wire and reception corrections + Non-QoS Data no longer aliases the QoS TID-0 duplicate cache. + The mesh no-forwarding-information reason code is corrected from 60 to 62. + These corrections change affected packet bytes and may change Wi-Fi + simulation trajectories and fingerprints. Notable backward compatible changes are the following: diff --git a/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc b/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc index bd6781a5962..88395deef09 100644 --- a/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc +++ b/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc @@ -17,7 +17,9 @@ bool QoSDuplicateRemoval::isDuplicate(const Ptr SequenceControlField seqVal(header->getSequenceNumber().get(), header->getFragmentNumber()); bool isManagementFrame = dynamicPtrCast(header) != nullptr; bool isTimePriorityManagementFrame = isManagementFrame && false; // TODO hack - if (isTimePriorityManagementFrame || isManagementFrame) { + // IEEE Std 802.11-2024, 10.3.2.14.3, Table 10-6: non-QoS Data + // belongs to RC1, not the per-TID QoS Data cache (RC2). + if (isTimePriorityManagementFrame || isManagementFrame || header->getType() == ST_DATA) { MacAddress transmitterAddr = header->getTransmitterAddress(); Mac2SeqValMap& cache = isTimePriorityManagementFrame ? lastSeenTimePriorityManagementSeqNumCache : lastSeenSharedSeqNumCache; auto it = cache.find(transmitterAddr); diff --git a/tests/unit/Ieee80211QosDuplicateRemoval_1.test b/tests/unit/Ieee80211QosDuplicateRemoval_1.test new file mode 100644 index 00000000000..68c78ae3ec1 --- /dev/null +++ b/tests/unit/Ieee80211QosDuplicateRemoval_1.test @@ -0,0 +1,70 @@ +%description: +Verify RC1/RC2 separation for non-QoS and QoS Data retries (IEEE 802.11-2024, +10.3.2.14.3, Table 10-6), with independent TID, transmitter and fragment identities. + +%includes: +#include "inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.h" +#include "inet/linklayer/ieee80211/mac/recipient/RecipientQosMacDataService.h" +#include "inet/linklayer/ieee80211/mac/aggregation/MsduDeaggregation.h" + +%global: +using namespace inet; +using namespace inet::ieee80211; + +class TestRecipient : public RecipientQosMacDataService +{ + public: + TestRecipient() + { + duplicateRemoval = new QoSDuplicateRemoval(); + aMsduDeaggregation = new MsduDeaggregation(); + } + virtual ~TestRecipient() {} +}; + +static Ptr frame(bool qos, bool retry, int tid = 0, int fragment = 0, int transmitter = 1) +{ + auto header = makeShared(); + header->setType(qos ? ST_DATA_WITH_QOS : ST_DATA); + header->setTransmitterAddress(MacAddress(transmitter)); + header->setReceiverAddress(MacAddress(2)); + header->setSequenceNumber(SequenceNumberCyclic(42)); + header->setFragmentNumber(fragment); + header->setTid(tid); + header->setRetry(retry); + return header; +} + +%activity: +for (bool firstQos : {false, true}) { + QoSDuplicateRemoval removal; + ASSERT(!removal.isDuplicate(frame(firstQos, false))); + ASSERT(!removal.isDuplicate(frame(!firstQos, true))); + ASSERT(removal.isDuplicate(frame(firstQos, true))); + ASSERT(removal.isDuplicate(frame(!firstQos, true))); + ASSERT(!removal.isDuplicate(frame(true, true, 1))); + ASSERT(!removal.isDuplicate(frame(true, true, 0, 1))); + ASSERT(removal.isDuplicate(frame(true, true, 0, 1))); + ASSERT(!removal.isDuplicate(frame(true, true, 0, 1, 3))); + ASSERT(!removal.isDuplicate(frame(true, false, 0, 1))); + ASSERT(!removal.isDuplicate(frame(false, false))); +} +for (bool firstQos : {false, true}) { + TestRecipient recipient; + auto deliver = [&](bool qos, bool retry, bool duplicate) { + auto header = frame(qos, retry); + auto packet = new Packet("recipient", header); + auto result = recipient.dataFrameReceived(packet, header, nullptr); + ASSERT(result.size() == (duplicate ? 0 : 1)); + for (auto delivered : result) + delete delivered; + }; + deliver(firstQos, false, false); + deliver(!firstQos, true, false); + deliver(firstQos, true, true); + deliver(!firstQos, true, true); +} +EV << "Receive duplicate cache identities verified.\n"; + +%contains: stdout +Receive duplicate cache identities verified. From 6a87501b0ee90784cf99c857fa2394e71c175701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Gonz=C3=A1lez=20L=C3=B3pez?= Date: Mon, 14 Sep 2026 10:50:29 +0200 Subject: [PATCH 4/9] ieee80211: encode QoS Control in standard bit positions Encode TID, Ack Policy and A-MSDU Present in their standard QoS Control positions (IEEE Std 802.11-2024, Table 9-10). Leave unmodeled bit 4 clear instead of advertising EOSP or an empty queue. Verify independent octets across all DS layouts and decode both bit-4 values. The 158 explicitly selected legacy fingerprint cases pass in debug mode. This commit changes 18 selected rows: 0 with trajectory changes and 18 with serialized-byte changes. Record only measured causal differences; preserve graphical expectations and unselected entries. Attribution and per-case deltas are in ai-logs/executions/2026-09-14_pr1189-cleanup/. Validation: incremental debug build, directly related tests and scoped opp_repl controls passed. --- WHATSNEW | 2 ++ .../mac/Ieee80211MacHeaderSerializer.cc | 18 +++++----- tests/fingerprint/examples.csv | 18 +++++----- tests/fingerprint/showcases.csv | 18 +++++----- .../unit/Ieee80211OnWireBitCompliance_1.test | 33 +++++++++++++++++++ 5 files changed, 63 insertions(+), 26 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 0420a11ce90..a09f9df167d 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -31,6 +31,8 @@ Notable backward incompatible changes are the following: 2. IEEE 802.11 wire and reception corrections + QoS Control fields now use the standard bit positions. + Non-QoS Data no longer aliases the QoS TID-0 duplicate cache. The mesh no-forwarding-information reason code is corrected from 60 to 62. diff --git a/src/inet/linklayer/ieee80211/mac/Ieee80211MacHeaderSerializer.cc b/src/inet/linklayer/ieee80211/mac/Ieee80211MacHeaderSerializer.cc index 6dfab5ad552..72e71cc0003 100644 --- a/src/inet/linklayer/ieee80211/mac/Ieee80211MacHeaderSerializer.cc +++ b/src/inet/linklayer/ieee80211/mac/Ieee80211MacHeaderSerializer.cc @@ -359,10 +359,12 @@ void Ieee80211MacHeaderSerializer::serializeFields(MemoryOutputStream& stream, c if (dataHeader->getFromDS() && dataHeader->getToDS()) stream.writeMacAddress(dataHeader->getAddress4()); if (type == ST_DATA_WITH_QOS) { - stream.writeUint4(dataHeader->getTid()); - stream.writeBit(true); - stream.writeUint2(dataHeader->getAckPolicy()); - stream.writeBit(dataHeader->getAMsduPresent()); + // IEEE Std 802.11-2024, Table 9-10. Modeling simplification: + // leave bit 4 clear (no EOSP or Queue Size report); the second + // octet remains zero (no TXOP duration request or AP PS buffer state). + stream.writeByte((dataHeader->getTid() & 0x0F) | + ((dataHeader->getAckPolicy() & 3) << 5) | + (dataHeader->getAMsduPresent() ? 0x80 : 0)); stream.writeByte(0); } ASSERT(stream.getLength() - startPos == dataHeader->getChunkLength()); @@ -620,10 +622,10 @@ const Ptr Ieee80211MacHeaderSerializer::deserializeFields(MemoryInputStre if (dataHeader->getFromDS() && dataHeader->getToDS()) dataHeader->setAddress4(stream.readMacAddress()); if (type == ST_DATA_WITH_QOS) { - dataHeader->setTid(stream.readUint4()); - stream.readBit(); - dataHeader->setAckPolicy(static_cast(stream.readUint2())); - dataHeader->setAMsduPresent(stream.readBit()); + auto qosControl = stream.readByte(); + dataHeader->setTid(qosControl & 0x0F); + dataHeader->setAckPolicy(static_cast((qosControl >> 5) & 3)); + dataHeader->setAMsduPresent((qosControl & 0x80) != 0); stream.readByte(); } return dataHeader; diff --git a/tests/fingerprint/examples.csv b/tests/fingerprint/examples.csv index 11192d39c06..d8ba0933bb9 100644 --- a/tests/fingerprint/examples.csv +++ b/tests/fingerprint/examples.csv @@ -6,10 +6,10 @@ /examples/adhoc/ieee80211/, -f omnetpp.ini -c Ping1 -r 0, 1000s, 8668-d4e7/tplx;e2b1-205b/~tNl;4083-075c/~tND;e1f1-f93c/tyf, PASS, wireless adhoc Ipv4 # /examples/adhoc/ieee80211/, -f omnetpp.ini -c Ping2 -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, ERROR, wireless adhoc # [Config Ping2] # interactive config, needed a *.numHosts parameter /examples/adhoc/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, 5749-0281/tplx;f38a-cb93/~tNl;fd9b-683f/~tND;0eb8-3e3b/tyf, PASS, wireless adhoc Ipv4 -/examples/adhoc/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 1486-cbae/tplx;521b-977a/~tNl;91c2-9aa9/~tND;2c1e-66e5/tyf, PASS, wireless adhoc Ipv4 -/examples/adhoc/qos/, -f omnetpp.ini -c MacQos -r 1, 10s, 783f-d09a/tplx;13d1-ec15/~tNl;a50d-9ad8/~tND;a587-3a4d/tyf, PASS, wireless adhoc Ipv4 -/examples/adhoc/qos/, -f omnetpp.ini -c Fragmentation, 10s, 9c66-e6f0/tplx;cc9e-d1a6/~tNl;53c8-e1b0/~tND;33b7-00f9/tyf, PASS, wireless adhoc Ipv4 -/examples/adhoc/qos/, -f omnetpp.ini -c MsduAggregation, 10s, 85bd-85c6/tplx;22f6-085d/~tNl;dc0d-4e19/~tND;df04-18f7/tyf, PASS, wireless adhoc Ipv4 +/examples/adhoc/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 1486-cbae/tplx;521b-977a/~tNl;9b97-0582/~tND;2c1e-66e5/tyf, PASS, wireless adhoc Ipv4 +/examples/adhoc/qos/, -f omnetpp.ini -c MacQos -r 1, 10s, 783f-d09a/tplx;13d1-ec15/~tNl;a76f-129b/~tND;a587-3a4d/tyf, PASS, wireless adhoc Ipv4 +/examples/adhoc/qos/, -f omnetpp.ini -c Fragmentation, 10s, 9c66-e6f0/tplx;cc9e-d1a6/~tNl;77be-c98e/~tND;33b7-00f9/tyf, PASS, wireless adhoc Ipv4 +/examples/adhoc/qos/, -f omnetpp.ini -c MsduAggregation, 10s, 85bd-85c6/tplx;22f6-085d/~tNl;3f2d-f771/~tND;df04-18f7/tyf, PASS, wireless adhoc Ipv4 /examples/aodv/, -f omnetpp.ini -c IPv4SlowMobility -r 0, 50s, 77fe-0daf/tplx;1d8d-30ff/~tNl;6467-0c74/~tND;ac08-940e/tyf, PASS, wireless adhoc AckingWirelessInterface Ipv4 /examples/aodv/, -f omnetpp.ini -c IPv4ModerateFastMobility -r 0, 50s, ed5e-39c4/tplx;3f90-6604/~tNl;b754-ceda/~tND, PASS, wireless adhoc AckingWirelessInterface Ipv4 @@ -605,7 +605,7 @@ /examples/wireless/layeredapsk/, -f omnetpp.ini -c General -r 0, 100s, 1d44-454e/tplx;a4c8-b076/~tNl;21b2-88a0/~tND;49fc-2324/tyf, PASS, wireless Ipv4 # /examples/wireless/mactest/, -f omnetpp.ini -c MacBase -r 0 # abstract-config -/examples/wireless/mactest/, -f omnetpp.ini -c MacEdca -r 0, 100s, 980d-e1b0/tplx;5c4e-cf00/~tNl;d0ca-c74e/~tND;dfcf-4644/tyf, PASS, wireless +/examples/wireless/mactest/, -f omnetpp.ini -c MacEdca -r 0, 100s, 980d-e1b0/tplx;5c4e-cf00/~tNl;bcbe-cb45/~tND;dfcf-4644/tyf, PASS, wireless /examples/wireless/mactest/, -f omnetpp.ini -c MacDcf -r 0, 100s, 02cf-58d1/tplx;4db6-9460/~tNl;8ae7-452d/~tND;f37f-cd48/tyf, PASS, wireless # /examples/wireless/multiradio/, -f .qtenv.ini -c General -r 0 @@ -655,10 +655,10 @@ /examples/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 6fae-d558/tplx;b8ea-b2fc/~tNl;5ea8-2cea/~tND, PASS, wireless Ipv4 /examples/wireless/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, f252-8a4b/tplx;481d-4747/~tNl;5962-e45d/~tND;6097-a429/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 31b0-6212/tplx;82ec-9fde/~tNl;9839-8fb0/~tND;9f3c-4512/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithoutAggregation -r 0, 10s, acd6-0108/tplx;b339-294a/~tNl;75d4-11f9/~tND;a4c3-19bf/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithRtsCts -r 0, 10s, 9ece-fbfb/tplx;c1af-29ff/~tNl;4757-c17b/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, d094-b008/tplx;173a-e3fb/~tNl;6541-bd60/~tND;08b5-d005/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 31b0-6212/tplx;82ec-9fde/~tNl;e5d0-a2f3/~tND;9f3c-4512/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithoutAggregation -r 0, 10s, acd6-0108/tplx;b339-294a/~tNl;d390-4799/~tND;a4c3-19bf/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithRtsCts -r 0, 10s, 9ece-fbfb/tplx;c1af-29ff/~tNl;867e-3040/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, d094-b008/tplx;173a-e3fb/~tNl;8679-dd56/~tND;08b5-d005/tyf, PASS, wireless Ipv4 /examples/wireless/ratecontrol/, -f omnetpp.ini -c Mac -r 0, 100s, bf30-2f13/tplx;7b2f-653d/~tNl;6e1e-3b7b/~tND;19fe-8b0e/tyf, PASS, wireless diff --git a/tests/fingerprint/showcases.csv b/tests/fingerprint/showcases.csv index 1b203169953..0e9de80f6a7 100644 --- a/tests/fingerprint/showcases.csv +++ b/tests/fingerprint/showcases.csv @@ -191,17 +191,17 @@ /showcases/visualizer/canvas/transportpathactivity/, -f omnetpp.ini -c EnablingPathVisualizationWireless -r 0, 500s, 691e-0e35/tplx;5dfc-9178/~tNl;abcb-b068/~tND;9224-5dd7/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/transportpathactivity/, -f omnetpp.ini -c Filtering -r 0, 100s, 8bcf-d426/tplx;8f09-7a80/~tNl;92a4-c3ec/~tND;0694-d5be/tyf, PASS, wireless EthernetMac Ipv4 -/showcases/wireless/aggregation/, -f omnetpp.ini -c NoAggregation -r 0, 1s, 97f6-a969/tplx;ecf2-6e33/~tNl;9dbf-129b/~tND;27f2-4a52/tyf, PASS, wireless Ipv4 -/showcases/wireless/aggregation/, -f omnetpp.ini -c Aggregation -r 0, 1s, 671b-274c/tplx;6d84-9720/~tNl;0c45-ca5f/~tND;95cc-1859/tyf, PASS, wireless Ipv4 -/showcases/wireless/aggregation/, -f omnetpp.ini -c VoicePriorityAggregation -r 0, 1s, 1dbe-6672/tplx;a253-dbe3/~tNl;d167-ba3e/~tND;bd88-5ba6/tyf, PASS, wireless Ipv4 +/showcases/wireless/aggregation/, -f omnetpp.ini -c NoAggregation -r 0, 1s, 97f6-a969/tplx;ecf2-6e33/~tNl;9d9f-0fdb/~tND;27f2-4a52/tyf, PASS, wireless Ipv4 +/showcases/wireless/aggregation/, -f omnetpp.ini -c Aggregation -r 0, 1s, 671b-274c/tplx;6d84-9720/~tNl;1994-8283/~tND;95cc-1859/tyf, PASS, wireless Ipv4 +/showcases/wireless/aggregation/, -f omnetpp.ini -c VoicePriorityAggregation -r 0, 1s, 1dbe-6672/tplx;a253-dbe3/~tNl;3e6f-89d7/~tND;bd88-5ba6/tyf, PASS, wireless Ipv4 /showcases/wireless/analogmodel/, -f omnetpp.ini -c Routing -r 0, 5s, 56b0-3510/tplx;baeb-0d2c/~tNl;378f-fb30/~tND;00a2-e4ee/tyf, PASS, wireless Ipv4 /showcases/wireless/analogmodel/, -f omnetpp.ini -c Distance -r 0, 2.5s, 1e75-270e/tplx;6d7a-d84c/~tNl;b380-6cd5/~tND;5575-fd8f/tyf, PASS, wireless Ipv4 /showcases/wireless/analogmodel/, -f omnetpp.ini -c Noise -r 0, 0.1s, dd08-a63c/tplx;e167-9c84/~tNl;643d-41a6/~tND;0d1f-df73/tyf, PASS, wireless Ipv4 -/showcases/wireless/blockack/, -f omnetpp.ini -c NoFragmentation -r 0, 1s, aa2d-5d35/tplx;2094-1f2a/~tNl;8b71-c964/~tND, PASS, wireless Ipv4 -/showcases/wireless/blockack/, -f omnetpp.ini -c Fragmentation -r 0, 1s, 7ae9-e07d/tplx;db8b-3b81/~tNl;9b1c-22eb/~tND, PASS, wireless Ipv4 -/showcases/wireless/blockack/, -f omnetpp.ini -c MixedTraffic -r 0, 1s, 462d-10c7/tplx;727b-d26a/~tNl;153d-3bdf/~tND, PASS, wireless Ipv4 +/showcases/wireless/blockack/, -f omnetpp.ini -c NoFragmentation -r 0, 1s, aa2d-5d35/tplx;2094-1f2a/~tNl;09ae-d7db/~tND, PASS, wireless Ipv4 +/showcases/wireless/blockack/, -f omnetpp.ini -c Fragmentation -r 0, 1s, 7ae9-e07d/tplx;db8b-3b81/~tNl;c669-32e2/~tND, PASS, wireless Ipv4 +/showcases/wireless/blockack/, -f omnetpp.ini -c MixedTraffic -r 0, 1s, 462d-10c7/tplx;727b-d26a/~tNl;029a-96bc/~tND, PASS, wireless Ipv4 /showcases/wireless/crosstalk/, -f omnetpp.ini -c CompletelyOverlappingFrequencyBands -r 0, 1s, d0d7-43e0/tplx;867a-07a4/~tNl;df78-8445/~tND;3ea3-43da/tyf, PASS, wireless Ipv4 /showcases/wireless/crosstalk/, -f omnetpp.ini -c IndependentFrequencyBandsOneRadioMediumModule -r 0, 1s, 70c6-72b6/tplx;cf96-5e4d/~tNl;3cba-ae59/~tND;d1b2-9fd4/tyf, PASS, wireless Ipv4 @@ -266,8 +266,8 @@ /showcases/wireless/fragmentation/, -f omnetpp.ini -c DCFnofrag -r 0, 1s, 52b9-628f/tplx;3fec-74a2/~tNl;6073-4582/~tND;8871-1dd1/tyf, PASS, wireless Ipv4 /showcases/wireless/fragmentation/, -f omnetpp.ini -c DCFfrag -r 0, 1s, 57ee-7ddf/tplx;dab9-5e8d/~tNl;7f9b-00fc/~tND;f985-34fb/tyf, PASS, wireless Ipv4 -/showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfrag -r 0, 1s, f7a5-cf0a/tplx;a24a-a070/~tNl;7743-bba4/~tND;335d-6687/tyf, PASS, wireless Ipv4 -/showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfragblockack -r 0, 1s, 0702-c692/tplx;1bf9-b035/~tNl;f819-daf7/~tND;6f6e-b101/tyf, PASS, wireless Ipv4 +/showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfrag -r 0, 1s, f7a5-cf0a/tplx;a24a-a070/~tNl;1c00-f465/~tND;335d-6687/tyf, PASS, wireless Ipv4 +/showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfragblockack -r 0, 1s, 0702-c692/tplx;1bf9-b035/~tNl;ec77-3283/~tND;6f6e-b101/tyf, PASS, wireless Ipv4 /showcases/wireless/handover/, -f omnetpp.ini -c General -r 0, 250s, b287-6940/tplx;45c3-a292/~tNl;99ae-332d/~tND;02e9-9ad3/tyf, PASS, wireless @@ -314,7 +314,7 @@ /showcases/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 498f-b665/tplx;6f50-5caf/~tNl;0ad4-1089/~tND, PASS, wireless Ipv4 /showcases/wireless/qos/, -f omnetpp.ini -c NonQos -r 0, 10s, 37fd-5401/tplx;92f7-198c/~tNl;955c-ee96/~tND;093e-1ca4/tyf, PASS, wireless Ipv4 -/showcases/wireless/qos/, -f omnetpp.ini -c Qos -r 0, 10s, 1a49-72b3/tplx;e605-d79d/~tNl;1f84-a860/~tND;bda9-15d1/tyf, PASS, wireless Ipv4 +/showcases/wireless/qos/, -f omnetpp.ini -c Qos -r 0, 10s, 1a49-72b3/tplx;e605-d79d/~tNl;9369-2a76/~tND;bda9-15d1/tyf, PASS, wireless Ipv4 /showcases/wireless/ratecontrol/, -f omnetpp.ini -c NoRateControl -r 0, 14s, 7ee9-503a/tplx;0816-e58f/~tNl;648e-6e84/~tND;dad3-7f89/tyf, PASS, wireless Ipv4 /showcases/wireless/ratecontrol/, -f omnetpp.ini -c AarfRateControl -r 0, 12s, a7bc-05bb/tplx;9de0-4dd3/~tNl;1209-101b/~tND;7539-d32d/tyf, PASS, wireless Ipv4 diff --git a/tests/unit/Ieee80211OnWireBitCompliance_1.test b/tests/unit/Ieee80211OnWireBitCompliance_1.test index 5ef9ab16ce0..afebe6f9f27 100644 --- a/tests/unit/Ieee80211OnWireBitCompliance_1.test +++ b/tests/unit/Ieee80211OnWireBitCompliance_1.test @@ -3,6 +3,7 @@ Validate byte-exact 802.11 MAC and PHY bitfield packing for on-wire fields. %includes: #include "inet/common/packet/Packet.h" +#include "inet/common/packet/chunk/BytesChunk.h" #include "inet/linklayer/ieee80211/mac/Ieee80211Frame_m.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211PhyHeader_m.h" @@ -12,6 +13,38 @@ using namespace inet::ieee80211; using namespace inet::physicallayer; %activity: +// Independent first-octet oracles from IEEE Std 802.11-2024, Table 9-10. +for (int ds = 0; ds < 4; ds++) { + const bool address4 = ds == 3; + const uint8_t expected[] = {0x00, 0x25, 0xCA, 0xEF}; + const int tids[] = {0, 5, 10, 15}; + for (int policy = 0; policy < 4; policy++) { + auto header = makeShared(); + header->setType(ST_DATA_WITH_QOS); + header->setSequenceNumber(SequenceNumberCyclic(0)); + header->setToDS(ds & 1); + header->setFromDS(ds & 2); + header->setTid(tids[policy]); + header->setAckPolicy(static_cast(policy)); + header->setAMsduPresent(policy >= 2); + const int offset = address4 ? 30 : 24; + header->setChunkLength(B(offset + 2)); + Packet packet("qos", header); + auto bytes = packet.peekDataAsBytes()->getBytes(); + ASSERT(bytes[offset] == expected[policy]); + ASSERT(bytes[offset + 1] == 0); + // Both bit-4 values must decode without affecting the modeled fields. + for (uint8_t bit4 : {0x00, 0x10}) { + bytes[offset] = expected[policy] | bit4; + Packet external("external-qos", makeShared(bytes)); + auto decoded = external.peekAtFront(); + ASSERT(decoded->getTid() == tids[policy]); + ASSERT(decoded->getAckPolicy() == policy); + ASSERT(decoded->getAMsduPresent() == (policy >= 2)); + } + } +} + { auto header = makeShared(); header->setType(ST_DATA); From a7e2c37a90b0da03cc10b70ac5cad4b78b6589f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Gonz=C3=A1lez=20L=C3=B3pez?= Date: Mon, 14 Sep 2026 11:08:13 +0200 Subject: [PATCH 5/9] ieee80211: generate and validate OFDM SIGNAL parity Preserve configured noncompliant reception: RATE 0 is a placeholder, not an undefined standard mode. Check parity in both operating modes and gate the standard RATE table on receiver compliance. OFDM SIGNAL bit 17 supplies even parity over bits 0-16, and reception must reject undefined RATE values (IEEE Std 802.11-2024, 17.3.4.2 and 17.3.4.4). Share the wire-integrity calculation between packet-level and bit-level radios, and test valid, corrupted, reserved-bit and undefined-rate inputs through the real radio methods. The 158 explicitly selected legacy fingerprint cases pass in debug mode. This commit changes 158 selected rows: 0 with trajectory changes and 158 with serialized-byte changes. Record only measured causal differences; preserve graphical expectations and unselected entries. Attribution and per-case deltas are in ai-logs/executions/2026-09-14_pr1189-cleanup/. Validation: incremental debug build, directly related tests and scoped opp_repl controls passed. --- WHATSNEW | 3 + .../bitlevel/Ieee80211LayeredOfdmReceiver.h | 2 + .../ieee80211/bitlevel/Ieee80211OfdmRadio.cc | 13 ++ .../packetlevel/Ieee80211OfdmSignalField.h | 21 ++ .../ieee80211/packetlevel/Ieee80211Radio.cc | 12 + tests/fingerprint/examples.csv | 106 ++++----- tests/fingerprint/showcases.csv | 208 +++++++++--------- tests/fingerprint/tutorials.csv | 10 +- tests/unit/Ieee80211RadioWireIdentity_1.test | 149 +++++++++++++ 9 files changed, 362 insertions(+), 162 deletions(-) create mode 100644 tests/unit/Ieee80211RadioWireIdentity_1.test diff --git a/WHATSNEW b/WHATSNEW index a09f9df167d..85c4e820058 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -35,6 +35,9 @@ Notable backward incompatible changes are the following: Non-QoS Data no longer aliases the QoS TID-0 duplicate cache. + OFDM radios generate and check SIGNAL parity and reject undefined RATE codes in compliant mode. + Noncompliant layered reception uses its configured mode and still checks parity. + The mesh no-forwarding-information reason code is corrected from 60 to 62. These corrections change affected packet bytes and may change Wi-Fi simulation trajectories and fingerprints. diff --git a/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211LayeredOfdmReceiver.h b/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211LayeredOfdmReceiver.h index 68e61771d33..eb4de6aa6bb 100644 --- a/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211LayeredOfdmReceiver.h +++ b/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211LayeredOfdmReceiver.h @@ -86,6 +86,8 @@ class INET_API Ieee80211LayeredOfdmReceiver : public SnirReceiverBase public: virtual ~Ieee80211LayeredOfdmReceiver(); + bool getIsCompliant() const { return isCompliant; } + virtual const Ieee80211OfdmMode *getMode(const Packet *packet) const; virtual bool computeIsReceptionPossible(const IListening *listening, const ITransmission *transmission) const override; virtual bool computeIsReceptionPossible(const IListening *listening, const IReception *reception, IRadioSignal::SignalPart part) const override; diff --git a/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211OfdmRadio.cc b/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211OfdmRadio.cc index 26a781952f2..5f8c26b2ea3 100644 --- a/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211OfdmRadio.cc +++ b/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211OfdmRadio.cc @@ -34,6 +34,7 @@ void Ieee80211OfdmRadio::encapsulate(Packet *packet) const auto mode = ofdmTransmitter->getMode(packet); phyHeader->setRate(mode->getSignalMode()->getRate()); phyHeader->setLengthField(B(packet->getDataLength())); + phyHeader->setParity(computeIeee80211OfdmSignalParity(phyHeader->getRate(), false, phyHeader->getLengthField().get())); packet->insertAtFront(phyHeader); auto paddingLength = mode->getDataMode()->getPaddingLength(B(phyHeader->getLengthField())); const auto& phyTrailer = makeShared(paddingLength + b(6)); @@ -44,9 +45,21 @@ void Ieee80211OfdmRadio::encapsulate(Packet *packet) const void Ieee80211OfdmRadio::decapsulate(Packet *packet) const { if (!packet->hasBitError()) { + if (packet->getDataLength() < B(5)) { + packet->setBitError(true); + return; + } auto ofdmReceiver = check_and_cast(receiver); const auto& phyHeaderBytes = packet->peekDataAt(b(0), B(5), Chunk::PF_ALLOW_IMPROPERLY_REPRESENTED); auto signalField = unpackIeee80211OfdmSignalField(phyHeaderBytes->getByte(0), phyHeaderBytes->getByte(1), phyHeaderBytes->getByte(2)); + // Noncompliant modes use a configured modulation/coding scheme and RATE 0. + // Their SIGNAL still carries parity, but RATE does not select a standard mode. + bool isSignalValid = ofdmReceiver->getIsCompliant() ? isIeee80211OfdmSignalValid(signalField) : + signalField.parity == computeIeee80211OfdmSignalParity(signalField.rate, signalField.reserved, signalField.length); + if (!isSignalValid) { + packet->setBitError(true); + return; + } const auto& phyHeader = makeShared(); phyHeader->setRate(signalField.rate); phyHeader->setReserved(signalField.reserved); diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211OfdmSignalField.h b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211OfdmSignalField.h index b0cc0223859..322d16a902c 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211OfdmSignalField.h +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211OfdmSignalField.h @@ -44,6 +44,27 @@ inline Ieee80211OfdmSignalField unpackIeee80211OfdmSignalField(uint32_t signal) return field; } +inline bool computeIeee80211OfdmSignalParity(uint8_t rate, bool reserved, uint16_t length) +{ + // IEEE Std 802.11-2024, 17.3.4.4: bit 17 gives even parity over bits 0-16. + uint32_t protectedBits = packIeee80211OfdmSignalField(rate, reserved, length, false, 0); + bool parity = false; + while (protectedBits != 0) { + parity = !parity; + protectedBits &= protectedBits - 1; + } + return parity; +} + +inline bool isIeee80211OfdmSignalValid(const Ieee80211OfdmSignalField& field) +{ + // IEEE Std 802.11-2024, 17.3.4.2 and 17.3.12: all eight defined + // RATE codes are odd four-bit values. Reserved is ignored on receive, + // but still participates in the parity check (17.3.4.4). + return (field.rate & 1) != 0 && + field.parity == computeIeee80211OfdmSignalParity(field.rate, field.reserved, field.length); +} + inline Ieee80211OfdmSignalField unpackIeee80211OfdmSignalField(uint8_t byte0, uint8_t byte1, uint8_t byte2) { uint32_t signal = static_cast(byte0) | diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc index 026cff806bb..79ca4826946 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc @@ -19,6 +19,7 @@ #include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211OfdmMode.h" #include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211VhtMode.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211ControlInfo_m.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211OfdmSignalField.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211PhyHeader_m.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Receiver.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Tag_m.h" @@ -241,6 +242,11 @@ void Ieee80211Radio::encapsulate(Packet *packet) const auto phyHeader = mode->getHeaderMode()->createHeader(); phyHeader->setChunkLength(b(mode->getHeaderMode()->getLength())); phyHeader->setLengthField(B(packet->getDataLength())); + if (auto ofdmHeader = dynamicPtrCast(phyHeader)) { + auto ofdmMode = check_and_cast(mode); + ofdmHeader->setRate(ofdmMode->getSignalMode()->getRate()); + ofdmHeader->setParity(computeIeee80211OfdmSignalParity(ofdmHeader->getRate(), false, ofdmHeader->getLengthField().get())); + } insertFcs(phyHeader); packet->insertAtFront(phyHeader); @@ -278,6 +284,12 @@ void Ieee80211Radio::decapsulate(Packet *packet) const const auto& phyHeader = popIeee80211PhyHeaderAtFront(packet, b(-1), Chunk::PF_ALLOW_INCORRECT | Chunk::PF_ALLOW_INCOMPLETE | Chunk::PF_ALLOW_IMPROPERLY_REPRESENTED); if (phyHeader->isIncorrect() || phyHeader->isIncomplete() || phyHeader->isImproperlyRepresented() || !verifyFcs(phyHeader)) packet->setBitError(true); + if (auto ofdmHeader = dynamicPtrCast(phyHeader)) { + auto signal = unpackIeee80211OfdmSignalField(packIeee80211OfdmSignalField(ofdmHeader->getRate(), + ofdmHeader->getReserved(), ofdmHeader->getLengthField().get(), ofdmHeader->getParity(), ofdmHeader->getTail())); + if (!isIeee80211OfdmSignalValid(signal)) + packet->setBitError(true); + } auto tailLength = dynamic_cast(mode) ? b(6) : b(0); auto paddingLength = mode->getDataMode()->getPaddingLength(B(phyHeader->getLengthField())); if (tailLength + paddingLength != b(0)) diff --git a/tests/fingerprint/examples.csv b/tests/fingerprint/examples.csv index d8ba0933bb9..e59d2d29c98 100644 --- a/tests/fingerprint/examples.csv +++ b/tests/fingerprint/examples.csv @@ -5,11 +5,11 @@ # /examples/adhoc/idealwireless/, -f omnetpp.ini -c Ping2 -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, ERROR, wireless adhoc # interactive config, needed a *.numHosts parameter /examples/adhoc/ieee80211/, -f omnetpp.ini -c Ping1 -r 0, 1000s, 8668-d4e7/tplx;e2b1-205b/~tNl;4083-075c/~tND;e1f1-f93c/tyf, PASS, wireless adhoc Ipv4 # /examples/adhoc/ieee80211/, -f omnetpp.ini -c Ping2 -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, ERROR, wireless adhoc # [Config Ping2] # interactive config, needed a *.numHosts parameter -/examples/adhoc/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, 5749-0281/tplx;f38a-cb93/~tNl;fd9b-683f/~tND;0eb8-3e3b/tyf, PASS, wireless adhoc Ipv4 -/examples/adhoc/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 1486-cbae/tplx;521b-977a/~tNl;9b97-0582/~tND;2c1e-66e5/tyf, PASS, wireless adhoc Ipv4 -/examples/adhoc/qos/, -f omnetpp.ini -c MacQos -r 1, 10s, 783f-d09a/tplx;13d1-ec15/~tNl;a76f-129b/~tND;a587-3a4d/tyf, PASS, wireless adhoc Ipv4 -/examples/adhoc/qos/, -f omnetpp.ini -c Fragmentation, 10s, 9c66-e6f0/tplx;cc9e-d1a6/~tNl;77be-c98e/~tND;33b7-00f9/tyf, PASS, wireless adhoc Ipv4 -/examples/adhoc/qos/, -f omnetpp.ini -c MsduAggregation, 10s, 85bd-85c6/tplx;22f6-085d/~tNl;3f2d-f771/~tND;df04-18f7/tyf, PASS, wireless adhoc Ipv4 +/examples/adhoc/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, 5749-0281/tplx;f38a-cb93/~tNl;c2ed-b352/~tND;0eb8-3e3b/tyf, PASS, wireless adhoc Ipv4 +/examples/adhoc/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 1486-cbae/tplx;521b-977a/~tNl;f7ee-50fd/~tND;2c1e-66e5/tyf, PASS, wireless adhoc Ipv4 +/examples/adhoc/qos/, -f omnetpp.ini -c MacQos -r 1, 10s, 783f-d09a/tplx;13d1-ec15/~tNl;aa88-cefd/~tND;a587-3a4d/tyf, PASS, wireless adhoc Ipv4 +/examples/adhoc/qos/, -f omnetpp.ini -c Fragmentation, 10s, 9c66-e6f0/tplx;cc9e-d1a6/~tNl;e740-f7d4/~tND;33b7-00f9/tyf, PASS, wireless adhoc Ipv4 +/examples/adhoc/qos/, -f omnetpp.ini -c MsduAggregation, 10s, 85bd-85c6/tplx;22f6-085d/~tNl;e4ea-962c/~tND;df04-18f7/tyf, PASS, wireless adhoc Ipv4 /examples/aodv/, -f omnetpp.ini -c IPv4SlowMobility -r 0, 50s, 77fe-0daf/tplx;1d8d-30ff/~tNl;6467-0c74/~tND;ac08-940e/tyf, PASS, wireless adhoc AckingWirelessInterface Ipv4 /examples/aodv/, -f omnetpp.ini -c IPv4ModerateFastMobility -r 0, 50s, ed5e-39c4/tplx;3f90-6604/~tNl;b754-ceda/~tND, PASS, wireless adhoc AckingWirelessInterface Ipv4 @@ -42,13 +42,13 @@ /examples/clock/, -f omnetpp.ini -c General -r 0, 10ms, 35c3-8325/tplx;0000-0000/~tNl;0000-0000/~tND;a4b7-bff5/tyf, PASS, -/examples/communicationcache/, -f omnetpp.ini -c ReferenceCommunicationCache -r 0, 10s, 4c65-91ae/tplx;72b5-8f0b/~tNl;2b5e-4ca8/~tND;40ef-e3e2/tyf, PASS, wireless Ipv4 -/examples/communicationcache/, -f omnetpp.ini -c MapCommunicationCache -r 0, 10s, 4c65-91ae/tplx;72b5-8f0b/~tNl;2b5e-4ca8/~tND;40ef-e3e2/tyf, PASS, wireless Ipv4 -/examples/communicationcache/, -f omnetpp.ini -c VectorCommunicationCache -r 0, 10s, 4c65-91ae/tplx;72b5-8f0b/~tNl;2b5e-4ca8/~tND;40ef-e3e2/tyf, PASS, wireless Ipv4 +/examples/communicationcache/, -f omnetpp.ini -c ReferenceCommunicationCache -r 0, 10s, 4c65-91ae/tplx;72b5-8f0b/~tNl;190a-bc02/~tND;40ef-e3e2/tyf, PASS, wireless Ipv4 +/examples/communicationcache/, -f omnetpp.ini -c MapCommunicationCache -r 0, 10s, 4c65-91ae/tplx;72b5-8f0b/~tNl;190a-bc02/~tND;40ef-e3e2/tyf, PASS, wireless Ipv4 +/examples/communicationcache/, -f omnetpp.ini -c VectorCommunicationCache -r 0, 10s, 4c65-91ae/tplx;72b5-8f0b/~tNl;190a-bc02/~tND;40ef-e3e2/tyf, PASS, wireless Ipv4 /examples/dhcp/, -f omnetpp.ini -c WiredDHCP -r 0, 5000s, df67-0fe0/tplx;023a-3c37/~tNl;fdc9-84e1/~tND;8a53-9a15/tyf, PASS, EthernetMac Ipv4 -/examples/dhcp/, -f omnetpp.ini -c WirelessDHCP -r 0, 500s, a931-fbf9/tplx;f19a-7352/~tNl;efdb-02ac/~tND;d3a7-5f49/tyf, PASS, wireless EthernetMac Ipv4 -/examples/dhcp/, -f omnetpp.ini -c Wireless2DHCP -r 0, 500s, c440-71e7/tplx;6ca7-4ad3/~tNl;8dcb-e3d0/~tND;3497-9980/tyf, PASS, wireless EthernetMac Ipv4 +/examples/dhcp/, -f omnetpp.ini -c WirelessDHCP -r 0, 500s, a931-fbf9/tplx;f19a-7352/~tNl;c02f-f110/~tND;d3a7-5f49/tyf, PASS, wireless EthernetMac Ipv4 +/examples/dhcp/, -f omnetpp.ini -c Wireless2DHCP -r 0, 500s, c440-71e7/tplx;6ca7-4ad3/~tNl;cfb3-5fa9/~tND;3497-9980/tyf, PASS, wireless EthernetMac Ipv4 /examples/dhcp/, -f omnetpp.ini -c RebootingDHCP -r 0, 500s, df1a-1a1e/tplx;0610-405e/~tNl;4ae3-3dec/~tND;fbd6-20e8/tyf, PASS, EthernetMac Ipv4 # /examples/diffserv/onedomain/, -f omnetpp.ini -c Apps -r 0, 10s, 0, PASS, # abstract-config @@ -380,10 +380,10 @@ /examples/manetrouting/multiradio/, -f omnetpp.ini -c MultiRadio -r 0, 20s, ec17-5cc2/tplx;55f5-0894/~tNl, PASS, wireless adhoc Ipv4 /examples/manetrouting/multiradio/, -f omnetpp.ini -c SingleRadio -r 0, 20s, 85a0-51b8/tplx;c07a-44e1/~tNl;3aa0-49ed/tyf, PASS, wireless adhoc Ipv4 -/examples/ipv6/mipv6/, -f omnetpp.ini -c Handover -r 0, 70s, 17ac-0898/tplx;8bbc-d083/~tNl;fdb7-4ab1/~tND;44ef-1a45/tyf, PASS, wireless EthernetMac -/examples/ipv6/mipv6/, -f omnetpp.ini -c RouteOptimizationTwoCNs -r 0, 60s, 19e2-a165/tplx;d96c-5e41/~tNl;ee03-5334/~tND;ed3e-17fa/tyf, PASS, wireless EthernetMac -/examples/ipv6/mipv6roaming/, -f omnetpp.ini -c Roaming -r 0, 70s, 123e-b941/tplx;4e91-d6bb/~tNl;8642-5854/~tND;afae-2b3c/tyf, PASS, wireless EthernetMac -/examples/ipv6/pmipv6/, -f omnetpp.ini -c General -r 0, 60s, 8bf1-01f5/tplx;c5d4-bce4/~tNl;0f9a-c178/~tND;0277-d784/tyf, PASS, wireless EthernetMac +/examples/ipv6/mipv6/, -f omnetpp.ini -c Handover -r 0, 70s, 17ac-0898/tplx;8bbc-d083/~tNl;5b2d-7e79/~tND;44ef-1a45/tyf, PASS, wireless EthernetMac +/examples/ipv6/mipv6/, -f omnetpp.ini -c RouteOptimizationTwoCNs -r 0, 60s, 19e2-a165/tplx;d96c-5e41/~tNl;28d2-bf93/~tND;ed3e-17fa/tyf, PASS, wireless EthernetMac +/examples/ipv6/mipv6roaming/, -f omnetpp.ini -c Roaming -r 0, 70s, 123e-b941/tplx;4e91-d6bb/~tNl;0064-ad46/~tND;afae-2b3c/tyf, PASS, wireless EthernetMac +/examples/ipv6/pmipv6/, -f omnetpp.ini -c General -r 0, 60s, 8bf1-01f5/tplx;c5d4-bce4/~tNl;3228-a825/~tND;0277-d784/tyf, PASS, wireless EthernetMac /examples/mobility/, -f omnetpp.ini -c AnsimMobility -r 0, 10000s, 72f8-5c0b/tplx;0000-0000/~tNl;0000-0000/~tND;7dd1-18eb/tyf, PASS, /examples/mobility, -f omnetpp.ini -c AttachedMobility, 10s, 566c-6355/tplx;0000-0000/~tNl;0000-0000/~tND;fa92-f68c/tyf, PASS, @@ -548,45 +548,45 @@ ### /examples/voipstream/* : see voipstream.csv -/examples/wireless/antenna/, -f omnetpp.ini -c OrbitX -r 0, 3610s, 74b3-5fc1/tplx;6755-9aa4/~tNl;d654-3227/~tND;30be-38c8/tyf, PASS, wireless Ipv4 -/examples/wireless/antenna/, -f omnetpp.ini -c OrbitY -r 0, 3610s, c95e-2d0b/tplx;b108-c520/~tNl;5a88-69d7/~tND;4dc9-95a8/tyf, PASS, wireless Ipv4 -/examples/wireless/antenna/, -f omnetpp.ini -c OrbitZ -r 0, 3610s, 843f-badf/tplx;bc8b-7dc3/~tNl;46b1-c888/~tND;48aa-9874/tyf, PASS, wireless Ipv4 -/examples/wireless/antenna, -f omnetpp.ini -c RotationX, 1s, 8abc-79c7/tplx;d274-6adc/~tNl;7a3e-d509/~tND;13ab-53ce/tyf, PASS, wireless Ipv4 -/examples/wireless/antenna, -f omnetpp.ini -c RotationY, 1s, 8abc-79c7/tplx;d274-6adc/~tNl;7a3e-d509/~tND;13ab-53ce/tyf, PASS, wireless Ipv4 -/examples/wireless/antenna, -f omnetpp.ini -c RotationZ, 1s, 8abc-79c7/tplx;d274-6adc/~tNl;7a3e-d509/~tND;13ab-53ce/tyf, PASS, wireless Ipv4 +/examples/wireless/antenna/, -f omnetpp.ini -c OrbitX -r 0, 3610s, 74b3-5fc1/tplx;6755-9aa4/~tNl;910c-e93d/~tND;30be-38c8/tyf, PASS, wireless Ipv4 +/examples/wireless/antenna/, -f omnetpp.ini -c OrbitY -r 0, 3610s, c95e-2d0b/tplx;b108-c520/~tNl;a1c6-a910/~tND;4dc9-95a8/tyf, PASS, wireless Ipv4 +/examples/wireless/antenna/, -f omnetpp.ini -c OrbitZ -r 0, 3610s, 843f-badf/tplx;bc8b-7dc3/~tNl;1b0c-92e9/~tND;48aa-9874/tyf, PASS, wireless Ipv4 +/examples/wireless/antenna, -f omnetpp.ini -c RotationX, 1s, 8abc-79c7/tplx;d274-6adc/~tNl;2e3e-0580/~tND;13ab-53ce/tyf, PASS, wireless Ipv4 +/examples/wireless/antenna, -f omnetpp.ini -c RotationY, 1s, 8abc-79c7/tplx;d274-6adc/~tNl;2e3e-0580/~tND;13ab-53ce/tyf, PASS, wireless Ipv4 +/examples/wireless/antenna, -f omnetpp.ini -c RotationZ, 1s, 8abc-79c7/tplx;d274-6adc/~tNl;2e3e-0580/~tND;13ab-53ce/tyf, PASS, wireless Ipv4 -/examples/wireless/configurator/, -f omnetpp.ini -c General -r 0, 100s, 372a-a6e4/tplx;68c7-d228/~tNl;2563-d523/~tND;fc5b-3fc7/tyf, PASS, wireless EthernetMac Ipv4 +/examples/wireless/configurator/, -f omnetpp.ini -c General -r 0, 100s, 372a-a6e4/tplx;68c7-d228/~tNl;bb1c-22ee/~tND;fc5b-3fc7/tyf, PASS, wireless EthernetMac Ipv4 /examples/wireless/corruptionmode/, -f omnetpp.ini -c PacketCorruptionMode -r 0, 10s, a36d-5d6f/tplx;5a95-e079/~tNl;b338-6f01/~tND;8719-8294/tyf, PASS, CsmaCaInterface Ipv4 /examples/wireless/corruptionmode/, -f omnetpp.ini -c ChunkCorruptionMode -r 0, 10s, 1937-ef84/tplx;d8dc-6c11/~tNl;f0e2-7948/~tND;7a10-2d10/tyf, PASS, CsmaCaInterface Ipv4 /examples/wireless/corruptionmode/, -f omnetpp.ini -c ByteCorruptionMode -r 0, 10s, 83d6-7602/tplx;cca7-c9b4/~tNl;b84d-0c77/~tND;720c-2c82/tyf, PASS, CsmaCaInterface Ipv4 /examples/wireless/corruptionmode/, -f omnetpp.ini -c BitCorruptionMode -r 0, 10s, aecd-b23c/tplx;6bea-0e84/~tNl;a111-68d2/~tND;7185-dc50/tyf, PASS, CsmaCaInterface Ipv4 -/examples/wireless/crosstalk/, -f omnetpp.ini -c General -r 0, 2s, 0a4f-e755/tplx;7ef5-c624/~tNl;8421-882c/~tND;d12f-bf0a/tyf, PASS, wireless Ipv4 +/examples/wireless/crosstalk/, -f omnetpp.ini -c General -r 0, 2s, 0a4f-e755/tplx;7ef5-c624/~tNl;7e1c-2bb8/~tND;d12f-bf0a/tyf, PASS, wireless Ipv4 -/examples/wireless/dynamic/, -f omnetpp.ini -c General -r 0, 100s, 4b91-925c/tplx;2b55-3ab9/~tNl;2e17-afec/~tND;31fc-9fcd/tyf, PASS, wireless Ipv4 +/examples/wireless/dynamic/, -f omnetpp.ini -c General -r 0, 100s, 4b91-925c/tplx;2b55-3ab9/~tNl;5131-552d/~tND;31fc-9fcd/tyf, PASS, wireless Ipv4 -/examples/wireless/errorrate/, -f omnetpp.ini -c General -r 0, 100s, 0bb3-adca/tplx;b0b7-4a84/~tNl;4221-c97d/~tND;6d1b-0366/tyf, PASS, wireless Ipv4 +/examples/wireless/errorrate/, -f omnetpp.ini -c General -r 0, 100s, 0bb3-adca/tplx;b0b7-4a84/~tNl;4445-eb5f/~tND;6d1b-0366/tyf, PASS, wireless Ipv4 -/examples/wireless/filtering/, -f omnetpp.ini -c CommunicationRangeFilter -r 0, 100s, 87b7-c7b5/tplx;ff49-aedd/~tNl;efa1-03da/~tND;6d8f-10fe/tyf, PASS, Ipv4 -/examples/wireless/filtering/, -f omnetpp.ini -c RadioModeFilter -r 0, 100s, eaeb-7cd9/tplx;e5d7-0ef7/~tNl;5b4a-50a5/~tND;f451-58df/tyf, PASS, Ipv4 -/examples/wireless/filtering/, -f omnetpp.ini -c ListeningFilter -r 0, 100s, 946b-6f7f/tplx;e5d7-0ef7/~tNl;5b4a-50a5/~tND;17b4-4f41/tyf, PASS, Ipv4 -/examples/wireless/filtering/, -f omnetpp.ini -c MacAddressFilter -r 0, 100s, d2d8-8182/tplx;d14e-6ff1/~tNl;dba4-2d05/~tND;1853-1300/tyf, PASS, Ipv4 +/examples/wireless/filtering/, -f omnetpp.ini -c CommunicationRangeFilter -r 0, 100s, 87b7-c7b5/tplx;ff49-aedd/~tNl;6947-70a7/~tND;6d8f-10fe/tyf, PASS, Ipv4 +/examples/wireless/filtering/, -f omnetpp.ini -c RadioModeFilter -r 0, 100s, eaeb-7cd9/tplx;e5d7-0ef7/~tNl;fc55-a160/~tND;f451-58df/tyf, PASS, Ipv4 +/examples/wireless/filtering/, -f omnetpp.ini -c ListeningFilter -r 0, 100s, 946b-6f7f/tplx;e5d7-0ef7/~tNl;fc55-a160/~tND;17b4-4f41/tyf, PASS, Ipv4 +/examples/wireless/filtering/, -f omnetpp.ini -c MacAddressFilter -r 0, 100s, d2d8-8182/tplx;d14e-6ff1/~tNl;1e5f-e0e5/~tND;1853-1300/tyf, PASS, Ipv4 -/examples/wireless/handover/, -f omnetpp.ini -c General -r 0, 1500s, eee3-0da3/tplx;baf5-5f0e/~tNl;2d92-6c0e/~tND;c710-ff2e/tyf, PASS, wireless +/examples/wireless/handover/, -f omnetpp.ini -c General -r 0, 1500s, eee3-0da3/tplx;baf5-5f0e/~tNl;1172-7007/~tND;c710-ff2e/tyf, PASS, wireless /examples/wireless/hiddennode/, -f omnetpp.ini -c General -r 0, 5s, 8383-735e/tplx;8e4d-20ee/~tNl;1298-9ea7/~tND;af51-7b12/tyf, PASS, wireless /examples/wireless/hosttohost/, -f omnetpp.ini -c Throughput1 -r 0, 5s, ea34-1b2b/tplx;336a-f6a4/~tNl;2d2e-5f3c/~tND;5202-5a49/tyf, PASS, wireless -/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Default -r '$distance=100 && $bitrate=6 && $repetition=0', 1s, 7d44-b2bb/tplx;d318-d210/~tNl;d2c9-0b63/~tND;8940-b4a8/tyf, PASS, wireless Ipv4 -/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Default -r '$distance=1000 && $bitrate=6 && $repetition=0', 1s, 2de9-fd45/tplx;8aa4-8d31/~tNl;03a6-2514/~tND;377c-8ff1/tyf, PASS, wireless Ipv4 -/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Default -r '$distance=100 && $bitrate=54 && $repetition=0', 1s, a102-3972/tplx;601f-dc79/~tNl;d2d0-6a5d/~tND;4626-3a20/tyf, PASS, wireless Ipv4 -/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Default -r '$distance=1000 && $bitrate=54 && $repetition=0', 1s, 9caf-0174/tplx;8a78-c0c1/~tNl;74c0-6736/~tND;0849-48ec/tyf, PASS, wireless Ipv4 +/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Default -r '$distance=100 && $bitrate=6 && $repetition=0', 1s, 7d44-b2bb/tplx;d318-d210/~tNl;0fc9-3f63/~tND;8940-b4a8/tyf, PASS, wireless Ipv4 +/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Default -r '$distance=1000 && $bitrate=6 && $repetition=0', 1s, 2de9-fd45/tplx;8aa4-8d31/~tNl;03a6-1114/~tND;377c-8ff1/tyf, PASS, wireless Ipv4 +/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Default -r '$distance=100 && $bitrate=54 && $repetition=0', 1s, a102-3972/tplx;601f-dc79/~tNl;1231-aa5c/~tND;4626-3a20/tyf, PASS, wireless Ipv4 +/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Default -r '$distance=1000 && $bitrate=54 && $repetition=0', 1s, 9caf-0174/tplx;8a78-c0c1/~tNl;b4c0-6737/~tND;0849-48ec/tyf, PASS, wireless Ipv4 /examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Layered -r '$distance=100 && $bitrate=6 && $repetition=0', 1s, 3578-4846/tplx;231b-2761/~tNl;bd52-5a41/~tND;d8a3-9fe3/tyf, PASS, wireless Ipv4 /examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Layered -r '$distance=1000 && $bitrate=6 && $repetition=0', 1s, cc58-8e28/tplx;8aa4-8d31/~tNl;03a6-1114/~tND;8746-e7dc/tyf, PASS, wireless Ipv4 -/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Layered -r '$distance=100 && $bitrate=54 && $repetition=0', 1s, 144f-08ca/tplx;901f-e38b/~tNl;37a6-1939/~tND;8701-fe04/tyf, PASS, wireless Ipv4 -/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Layered -r '$distance=1000 && $bitrate=54 && $repetition=0', 1s, 140d-f0e8/tplx;8a78-c0c1/~tNl;f4c0-6737/~tND;7809-dd01/tyf, PASS, wireless Ipv4 +/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Layered -r '$distance=100 && $bitrate=54 && $repetition=0', 1s, 144f-08ca/tplx;901f-e38b/~tNl;7786-5939/~tND;8701-fe04/tyf, PASS, wireless Ipv4 +/examples/wireless/ieee80211levelofdetail, -f omnetpp.ini -c Layered -r '$distance=1000 && $bitrate=54 && $repetition=0', 1s, 140d-f0e8/tplx;8a78-c0c1/~tNl;b4c0-6737/~tND;7809-dd01/tyf, PASS, wireless Ipv4 # /examples/wireless/lan80211/, -f .qtenv.ini -c General -r 0 /examples/wireless/lan80211/, -f omnetpp-ftp.ini -c TwoHosts -r 0, 100s, 774c-9780/tplx;3a85-4436/~tNl;a153-c4cd/~tND, PASS, wireless Ipv4 @@ -599,14 +599,14 @@ /examples/wireless/lan80211ac/, -f omnetpp.ini -c Ping1 -r 0, 100s, bb14-f903/tplx;538b-6566/~tNl, PASS, Ipv4 # /examples/wireless/lan80211ac/, -f omnetpp.ini -c Ping2 -r 0, ---100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, # [Config Ping2] # __interactive__ -/examples/wireless/layered80211/, -f omnetpp.ini -c LayeredCompliant80211Ping -r 0, 100s, 88dd-4b30/tplx;6264-75f5/~tNl;77ce-e367/~tND;7a22-c289/tyf, PASS, wireless Ipv4 -/examples/wireless/layered80211/, -f omnetpp.ini -c LayeredNonCompliant80211Ping -r 0, 100s, 3e43-f68c/tplx;868a-0d65/~tNl;f551-4997/~tND;fc5f-7e5d/tyf, PASS, wireless Ipv4 +/examples/wireless/layered80211/, -f omnetpp.ini -c LayeredCompliant80211Ping -r 0, 100s, 88dd-4b30/tplx;6264-75f5/~tNl;66de-a722/~tND;7a22-c289/tyf, PASS, wireless Ipv4 +/examples/wireless/layered80211/, -f omnetpp.ini -c LayeredNonCompliant80211Ping -r 0, 100s, 3e43-f68c/tplx;868a-0d65/~tNl;7ddb-6bb7/~tND;fc5f-7e5d/tyf, PASS, wireless Ipv4 /examples/wireless/layeredapsk/, -f omnetpp.ini -c General -r 0, 100s, 1d44-454e/tplx;a4c8-b076/~tNl;21b2-88a0/~tND;49fc-2324/tyf, PASS, wireless Ipv4 # /examples/wireless/mactest/, -f omnetpp.ini -c MacBase -r 0 # abstract-config -/examples/wireless/mactest/, -f omnetpp.ini -c MacEdca -r 0, 100s, 980d-e1b0/tplx;5c4e-cf00/~tNl;bcbe-cb45/~tND;dfcf-4644/tyf, PASS, wireless -/examples/wireless/mactest/, -f omnetpp.ini -c MacDcf -r 0, 100s, 02cf-58d1/tplx;4db6-9460/~tNl;8ae7-452d/~tND;f37f-cd48/tyf, PASS, wireless +/examples/wireless/mactest/, -f omnetpp.ini -c MacEdca -r 0, 100s, 980d-e1b0/tplx;5c4e-cf00/~tNl;e4df-1c55/~tND;dfcf-4644/tyf, PASS, wireless +/examples/wireless/mactest/, -f omnetpp.ini -c MacDcf -r 0, 100s, 02cf-58d1/tplx;4db6-9460/~tNl;4c1d-35a0/~tND;f37f-cd48/tyf, PASS, wireless # /examples/wireless/multiradio/, -f .qtenv.ini -c General -r 0 /examples/wireless/multiradio/, -f omnetpp.ini -c IndependentWlans -r 0, 100s, 1998-e0e1/tplx;bcf2-7eef/~tNl;e212-9ab0/~tND;552a-1fd5/tyf, PASS, wireless Ipv4 @@ -643,22 +643,22 @@ /examples/wireless/nic/, -f omnetpp.ini -c XMacWithUnitDiskRadio -r 0, 100s, c1b4-d21b/tplx;8594-8455/~tNl;896c-7bb3/~tND;5f06-85dc/tyf, PASS, wireless Ipv4 /examples/wireless/nic/, -f omnetpp.ini -c XMacWithApskScalarRadio -r 0, 100s, c1b4-d21b/tplx;8594-8455/~tNl;8736-8e34/~tND;5201-02e2/tyf, PASS, wireless Ipv4 /examples/wireless/nic/, -f omnetpp.ini -c XMacWithApskDimensionalRadio -r 0, 100s, c1b4-d21b/tplx;8594-8455/~tNl;8736-8e34/~tND;5201-02e2/tyf, PASS, wireless Ipv4 -/examples/wireless/nic/, -f omnetpp.ini -c Ieee80211MacV2X, 1s, 31cd-9228/tplx;525a-e618/~tNl;9484-edd4/~tND;2a29-890b/tyf, PASS, wireless Ipv4 +/examples/wireless/nic/, -f omnetpp.ini -c Ieee80211MacV2X, 1s, 31cd-9228/tplx;525a-e618/~tNl;775c-c5d4/~tND;2a29-890b/tyf, PASS, wireless Ipv4 /examples/wireless/nic/, -f omnetpp.ini -c Ieee80211MacWithUnitDiskRadio -r 0, 100s, 18e0-fd73/tplx;ce2f-7222/~tNl;ece3-9d9e/~tND;68f0-f5e2/tyf, PASS, wireless Ipv4 -/examples/wireless/nic/, -f omnetpp.ini -c Ieee80211MacWithIeee80211DimensionalRadio -r 0, 100s, ac92-009c/tplx;3628-f8af/~tNl;f043-141c/~tND;0731-6347/tyf, PASS, wireless Ipv4 -/examples/wireless/nic/, -f omnetpp.ini -c Ieee80211MacWithIeee80211ScalarRadio -r 0, 100s, 1e64-2bbd/tplx;5f04-c720/~tNl;bb13-eca7/~tND;2131-67b2/tyf, PASS, wireless Ipv4 +/examples/wireless/nic/, -f omnetpp.ini -c Ieee80211MacWithIeee80211DimensionalRadio -r 0, 100s, ac92-009c/tplx;3628-f8af/~tNl;f8e9-5080/~tND;0731-6347/tyf, PASS, wireless Ipv4 +/examples/wireless/nic/, -f omnetpp.ini -c Ieee80211MacWithIeee80211ScalarRadio -r 0, 100s, 1e64-2bbd/tplx;5f04-c720/~tNl;dd0a-7546/~tND;2131-67b2/tyf, PASS, wireless Ipv4 -/examples/wireless/obstacle/, -f omnetpp.ini -c Outdoor -r 0, 100s, d208-e7af/tplx;2176-a413/~tNl;613e-4464/~tND, PASS, wireless Ipv4 -/examples/wireless/obstacle/, -f omnetpp.ini -c Indoor -r 0, 100s, 2266-617f/tplx;10ba-3618/~tNl;cce7-e6cf/~tND;aa1f-6922/tyf, PASS, wireless Ipv4 -/examples/wireless/obstacle/, -f omnetpp.ini -c Orbit -r 0, 100s, 9d0b-2d8e/tplx;19c6-aa59/~tNl;16af-ea5f/~tND;84d5-634b/tyf, PASS, wireless Ipv4 +/examples/wireless/obstacle/, -f omnetpp.ini -c Outdoor -r 0, 100s, d208-e7af/tplx;2176-a413/~tNl;6289-9221/~tND, PASS, wireless Ipv4 +/examples/wireless/obstacle/, -f omnetpp.ini -c Indoor -r 0, 100s, 2266-617f/tplx;10ba-3618/~tNl;967d-adac/~tND;aa1f-6922/tyf, PASS, wireless Ipv4 +/examples/wireless/obstacle/, -f omnetpp.ini -c Orbit -r 0, 100s, 9d0b-2d8e/tplx;19c6-aa59/~tNl;a14d-5420/~tND;84d5-634b/tyf, PASS, wireless Ipv4 -/examples/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 6fae-d558/tplx;b8ea-b2fc/~tNl;5ea8-2cea/~tND, PASS, wireless Ipv4 +/examples/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 6fae-d558/tplx;b8ea-b2fc/~tNl;7a95-cf35/~tND, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, f252-8a4b/tplx;481d-4747/~tNl;5962-e45d/~tND;6097-a429/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 31b0-6212/tplx;82ec-9fde/~tNl;e5d0-a2f3/~tND;9f3c-4512/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithoutAggregation -r 0, 10s, acd6-0108/tplx;b339-294a/~tNl;d390-4799/~tND;a4c3-19bf/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithRtsCts -r 0, 10s, 9ece-fbfb/tplx;c1af-29ff/~tNl;867e-3040/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, d094-b008/tplx;173a-e3fb/~tNl;8679-dd56/~tND;08b5-d005/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, f252-8a4b/tplx;481d-4747/~tNl;713b-1d7f/~tND;6097-a429/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 31b0-6212/tplx;82ec-9fde/~tNl;4042-8007/~tND;9f3c-4512/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithoutAggregation -r 0, 10s, acd6-0108/tplx;b339-294a/~tNl;8ead-af05/~tND;a4c3-19bf/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithRtsCts -r 0, 10s, 9ece-fbfb/tplx;c1af-29ff/~tNl;0b19-cdb3/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, d094-b008/tplx;173a-e3fb/~tNl;92f3-e87f/~tND;08b5-d005/tyf, PASS, wireless Ipv4 /examples/wireless/ratecontrol/, -f omnetpp.ini -c Mac -r 0, 100s, bf30-2f13/tplx;7b2f-653d/~tNl;6e1e-3b7b/~tND;19fe-8b0e/tyf, PASS, wireless @@ -673,9 +673,9 @@ /examples/wireless/synchronized/, -f omnetpp.ini -c Synchronized -r 0, 2s, e7f2-040b/tplx;2c58-2e50/~tNl;2134-4ca3/~tND;9343-5f3e/tyf, PASS, wireless Ipv4 /examples/wireless/synchronized/, -f omnetpp.ini -c NonSynchronized -r 0, 2s, 6f66-ec37/tplx;4b8d-fd59/~tNl;2a03-b0af/~tND;6bd8-324e/tyf, PASS, wireless Ipv4 -/examples/wireless/testnewmac/, -f omnetpp.ini -c Mac -r 0, 10s, 6bfb-22e5/tplx;6a24-b25b/~tNl;98d9-d2b0/~tND;708a-85d8/tyf, PASS, wireless +/examples/wireless/testnewmac/, -f omnetpp.ini -c Mac -r 0, 10s, 6bfb-22e5/tplx;6a24-b25b/~tNl;1eaa-2424/~tND;708a-85d8/tyf, PASS, wireless /examples/wireless/throughput/, -f omnetpp.ini -c Throughput1 -r 0, 20s, a4d8-abf4/tplx;f424-9aaf/~tNl;24fe-19e3/~tND;bb2f-ec63/tyf, PASS, wireless /examples/wireless/throughput/, -f omnetpp.ini -c Throughput2 -r 0, 10s, 3b2b-5123/tplx;0009-ca8c/~tNl;a4a2-725a/~tND;032e-0333/tyf, PASS, wireless -/examples/wireless/wiredandwirelesshostswithap/, -f omnetpp.ini -c General -r 0, 100s, af04-d760/tplx;95c2-6625/~tNl;90fc-5017/~tND;b4df-273e/tyf, PASS, wireless EthernetMac Ipv4 +/examples/wireless/wiredandwirelesshostswithap/, -f omnetpp.ini -c General -r 0, 100s, af04-d760/tplx;95c2-6625/~tNl;5286-7eac/~tND;b4df-273e/tyf, PASS, wireless EthernetMac Ipv4 diff --git a/tests/fingerprint/showcases.csv b/tests/fingerprint/showcases.csv index 0e9de80f6a7..cb9f4c433c0 100644 --- a/tests/fingerprint/showcases.csv +++ b/tests/fingerprint/showcases.csv @@ -6,7 +6,7 @@ # /showcases/general/dynamic/, -f omnetpp.ini -c General -r 0, 100s, aa91-2c95/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, -/showcases/general/pcaprecording/, -f omnetpp.ini -c PcapRecording -r 0, 10s, 40e0-9ac8/tplx;96d0-d13f/~tNl;e062-e9c4/~tND;588a-7dd9/tyf, PASS, wireless EthernetMac Ipv4 +/showcases/general/pcaprecording/, -f omnetpp.ini -c PcapRecording -r 0, 10s, 40e0-9ac8/tplx;96d0-d13f/~tNl;4893-f8fa/~tND;588a-7dd9/tyf, PASS, wireless EthernetMac Ipv4 /showcases/measurement/datarate/, -f omnetpp.ini -c General -r 0, 1s, 7af9-93b4/tplx;2d48-cf54/~tNl;ce00-3055/~tND;c848-3d2a/tyf, PASS, Ipv4 /showcases/measurement/endtoenddelay/, -f omnetpp.ini -c General -r 0, 1s, a6ec-9c0d/tplx;5632-17e6/~tNl;3b24-2f2d/~tND;1479-9b89/tyf, PASS, Ipv4 @@ -39,8 +39,8 @@ /showcases/mobility/spatial/, -f omnetpp.ini -c Drone -r 0, 100s, 9475-d04c/tplx;0000-0000/~tNl;0000-0000/~tND;1ec0-fec3/tyf, PASS, # /showcases/routing/manet/, -f omnetpp.ini -c MobileNodesBase -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, # MobileNodesBase extended -/showcases/routing/manet/, -f omnetpp.ini -c Aodv -r 0, 100s, d4f1-1c35/tplx;c268-fae7/~tNl;5a70-e33f/~tND;cfeb-1d46/tyf, PASS, wireless Ipv4 -/showcases/routing/manet/, -f omnetpp.ini -c Dsdv -r 0, 100s, 84f0-9aea/tplx;bdad-9a28/~tNl;4638-0c29/~tND;91a6-dbc7/tyf, PASS, wireless Ipv4 +/showcases/routing/manet/, -f omnetpp.ini -c Aodv -r 0, 100s, d4f1-1c35/tplx;c268-fae7/~tNl;8d69-d2c8/~tND;cfeb-1d46/tyf, PASS, wireless Ipv4 +/showcases/routing/manet/, -f omnetpp.ini -c Dsdv -r 0, 100s, 84f0-9aea/tplx;bdad-9a28/~tNl;fefe-9ffb/~tND;91a6-dbc7/tyf, PASS, wireless Ipv4 /showcases/routing/manet/, -f omnetpp.ini -c Gpsr -r 0, 100s, 53c9-5456/tplx;5452-5da6/~tNl;fe57-b374/tyf, PASS, wireless Ipv4 /showcases/routing/aodvexternal/, -f omnetpp.ini -c General -r 0, 50s, b20b-1539/tplx;a764-edc8/~tNl, PASS, wireless Ipv4 @@ -109,10 +109,10 @@ # /showcases/visualizer/canvas/advanced/, -f omnetpp.ini -c Wireless -r 0, 5s, 1543-37d9/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, wireless /showcases/visualizer/canvas/datalinkactivity/, -f omnetpp.ini -c EnablingVisualizationWired -r 0, 500s, 7c74-e2a5/tplx;e06b-b6af/~tNl;5cf1-f86d/~tND;114c-1633/tyf, PASS, EthernetMac Ipv4 -/showcases/visualizer/canvas/datalinkactivity/, -f omnetpp.ini -c EnablingVisualizationWireless -r 0, 500s, e6c7-acc6/tplx;4456-ede1/~tNl;71e8-10e6/~tND;2fe7-a5c5/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/datalinkactivity/, -f omnetpp.ini -c EnablingVisualizationWireless -r 0, 500s, e6c7-acc6/tplx;4456-ede1/~tNl;77c8-10a2/~tND;2fe7-a5c5/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/datalinkactivity/, -f omnetpp.ini -c Filtering -r 0, 500s, 878e-1cac/tplx;26cd-3691/~tNl;1c8b-7d1b/~tND;1dec-8e55/tyf, PASS, EthernetMac Ipv4 -/showcases/visualizer/canvas/datalinkactivity/, -f omnetpp.ini -c ActivityLevel -r 0, 100s, 97d4-2b70/tplx;ceb8-c34c/~tNl;8ef8-cce9/~tND;f3c3-2a08/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/datalinkactivity/, -f omnetpp.ini -c Dynamic -r 0, 500s, 6362-d00a/tplx;54c0-9032/~tNl;17a9-4901/~tND, PASS, wireless Ipv4 +/showcases/visualizer/canvas/datalinkactivity/, -f omnetpp.ini -c ActivityLevel -r 0, 100s, 97d4-2b70/tplx;ceb8-c34c/~tNl;26cf-2678/~tND;f3c3-2a08/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/datalinkactivity/, -f omnetpp.ini -c Dynamic -r 0, 500s, 6362-d00a/tplx;54c0-9032/~tNl;4e42-e241/~tND, PASS, wireless Ipv4 # /showcases/visualizer/osg/earth/, -f omnetpp.ini -c DefaultSettings -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, # Osg doesn't work in command line DefaultSettings extended # /showcases/visualizer/osg/earth/, -f omnetpp.ini -c TempConfig -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, @@ -122,18 +122,18 @@ /showcases/visualizer/osg/environment/, -f omnetpp.ini -c DefaultView -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, # DefaultView extended /showcases/visualizer/osg/environment/, -f omnetpp.ini -c IsometricView -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c OneNetwork -r 0, 5s, d8ed-768c/tplx;4c02-603f/~tNl;cb02-064c/~tND;9c21-dd33/tyf, PASS, wireless -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c MultipleNetworks -r 0, 5s, 5f98-cd05/tplx;704f-4817/~tNl;9ed9-732b/~tND;3be5-9494/tyf, PASS, wireless -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c VisualizingHandover -r 0, 250s, 0f01-f016/tplx;6ded-d407/~tNl;3268-55d7/~tND;07bb-3973/tyf, PASS, wireless -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c SignalLevels -r 0, 100s, 8782-6f1c/tplx;7a73-4da5/~tNl;483a-1ff7/~tND;c099-e5c5/tyf, PASS, Ipv4 +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c OneNetwork -r 0, 5s, d8ed-768c/tplx;4c02-603f/~tNl;9845-7561/~tND;9c21-dd33/tyf, PASS, wireless +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c MultipleNetworks -r 0, 5s, 5f98-cd05/tplx;704f-4817/~tNl;ea00-6f59/~tND;3be5-9494/tyf, PASS, wireless +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c VisualizingHandover -r 0, 250s, 0f01-f016/tplx;6ded-d407/~tNl;e767-6a0b/~tND;07bb-3973/tyf, PASS, wireless +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c SignalLevels -r 0, 100s, 8782-6f1c/tplx;7a73-4da5/~tNl;44c3-92df/~tND;c099-e5c5/tyf, PASS, Ipv4 -/showcases/visualizer/canvas/submoduleinfo/, -f omnetpp.ini -c PacketCounts -r 0, 5s, 271c-6821/tplx;3c0c-db82/~tNl;d4d4-a4d5/~tND;b145-6576/tyf, PASS, wireless Ipv4 # VisualizingSubmoduleInformation extended -/showcases/visualizer/canvas/submoduleinfo/, -f omnetpp.ini -c MACStates -r 0, 5s, 271c-6821/tplx;3c0c-db82/~tNl;d4d4-a4d5/~tND;4677-fc97/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/submoduleinfo/, -f omnetpp.ini -c PacketCounts -r 0, 5s, 271c-6821/tplx;3c0c-db82/~tNl;8315-9723/~tND;b145-6576/tyf, PASS, wireless Ipv4 # VisualizingSubmoduleInformation extended +/showcases/visualizer/canvas/submoduleinfo/, -f omnetpp.ini -c MACStates -r 0, 5s, 271c-6821/tplx;3c0c-db82/~tNl;8315-9723/~tND;4677-fc97/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/instrumentfigures/, -f omnetpp.ini -c General -r 0, 3s, 6622-adb9/tplx;28ca-9f8c/~tNl;adfa-1bdd/~tND;4266-0d42/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/instrumentfigures/, -f omnetpp.ini -c General -r 0, 3s, 6622-adb9/tplx;28ca-9f8c/~tNl;85f0-a9c3/~tND;4266-0d42/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/interfacetable/, -f omnetpp.ini -c EnablingVisualization -r 0, 5s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/showcases/visualizer/canvas/interfacetable/, -f omnetpp.ini -c AdvancedFeatures -r 0, 5s, dfdf-7e0e/tplx;7bfc-e297/~tNl;a42e-6cc2/~tND;b2d8-b329/tyf, PASS, wireless EthernetMac Ipv4 +/showcases/visualizer/canvas/interfacetable/, -f omnetpp.ini -c AdvancedFeatures -r 0, 5s, dfdf-7e0e/tplx;7bfc-e297/~tNl;13ea-233d/~tND;b2d8-b329/tyf, PASS, wireless EthernetMac Ipv4 /showcases/visualizer/canvas/mobility/, -f omnetpp.ini -c VisualizingFeatures -r 0, 500s, 54a1-0f8d/tplx;0000-0000/~tNl;0000-0000/~tND;df51-b287/tyf, PASS, wireless @@ -145,68 +145,68 @@ /showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c EnablingVisualization -r 0, 500s, 456d-1982/tplx;bd58-e496/~tNl;1b76-9a17/~tND;4b2b-9088/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c StaticNetworkPaths -r 0, 500s, 5995-953f/tplx;cfc6-5083/~tNl;aa2b-919c/~tND;a8ff-b27d/tyf, PASS, EthernetMac Ipv4 -/showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c Mobile -r 0, 500s, cbb7-c036/tplx;fdcd-ce11/~tNl;6153-9684/~tND, PASS, wireless Ipv4 -/showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c ChangingPaths -r 0, 250s, 94b6-d4ca/tplx;e466-c6f7/~tNl;e32f-6d64/~tND;eade-62dc/tyf, PASS, EthernetMac Ipv4 +/showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c Mobile -r 0, 500s, cbb7-c036/tplx;fdcd-ce11/~tNl;5463-67a1/~tND, PASS, wireless Ipv4 +/showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c ChangingPaths -r 0, 250s, 94b6-d4ca/tplx;e466-c6f7/~tNl;d1ba-9ee7/~tND;eade-62dc/tyf, PASS, EthernetMac Ipv4 # /showcases/visualizer/canvas/obstacleloss/, -f omnetpp.ini -c EnablingVisualization -r 0, 250s, 2410-572d/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, wireless # /showcases/visualizer/canvas/obstacleloss/, -f omnetpp.ini -c MultipleObstacles -r 0, 500s, 89ca-0f0a/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, wireless # /showcases/visualizer/osg/osgdemo/, -f omnetpp.ini -c General -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, ERROR, -/showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c QueueOverflow -r 0, 2002ms, 835e-80ed/tplx;1858-ad28/~tNl;1651-5d11/~tND;dee8-a7c2/tyf, PASS, wireless EthernetMac Ipv4 +/showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c QueueOverflow -r 0, 2002ms, 835e-80ed/tplx;1858-ad28/~tNl;9562-a835/~tND;dee8-a7c2/tyf, PASS, wireless EthernetMac Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c ArpResolutionFailed -r 0, 500s, 9069-cca6/tplx;0000-0000/~tNl;0000-0000/~tND;db3b-e3e4/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c MACRetryLimitReached -r 0, 500s, 1f7a-e5f3/tplx;14cf-73d2/~tNl;7845-1012/~tND;24ba-9fa9/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c MACRetryLimitReached -r 0, 500s, 1f7a-e5f3/tplx;14cf-73d2/~tNl;c7ba-ef52/~tND;24ba-9fa9/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c InterfaceNotConnected -r 0, 500s, 280f-b030/tplx;0000-0000/~tNl;0000-0000/~tND;5f21-3687/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c NoRouteToDestination -r 0, 500s, 4c38-3589/tplx;0000-0000/~tNl;0000-0000/~tND;2ad2-161b/tyf, PASS, Ipv4 -/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c EnablingVisualization -r 0, 500s, a1da-0032/tplx;bde3-9c6e/~tNl;9df2-2f70/~tND;25e0-5171/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Filtering -r 0, 250s, b91f-f443/tplx;310a-f092/~tNl;0f65-e91a/~tND;5e9e-c6c7/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Mobile -r 0, 500s, a437-919f/tplx;03cf-d1b8/~tNl;bcdb-9b7b/~tND;7bf9-d50f/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c EnablingVisualization -r 0, 500s, a1da-0032/tplx;bde3-9c6e/~tNl;de93-cd82/~tND;25e0-5171/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Filtering -r 0, 250s, b91f-f443/tplx;310a-f092/~tNl;1237-aee0/~tND;5e9e-c6c7/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Mobile -r 0, 500s, a437-919f/tplx;03cf-d1b8/~tNl;f5ff-0d7f/~tND;7bf9-d50f/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/radiomediumactivity/, -f omnetpp.ini -c DisplayingSignalsTransmissionsReceptions -r 0, 500s, 771b-bffb/tplx;ca1b-c59c/~tNl;9740-c54f/~tND, PASS, wireless # unfinished -/showcases/visualizer/canvas/radiomediumactivity/, -f omnetpp.ini -c MultipleNodes -r 0, 500s, d609-0855/tplx;c3dc-e8b6/~tNl;09ce-b18a/~tND, PASS, wireless -/showcases/visualizer/canvas/radiomediumactivity/, -f omnetpp.ini -c InterferingSignals -r 0, 500s, 0c15-ccd5/tplx;5a8d-56aa/~tNl;0a40-dd0d/~tND, PASS, wireless +/showcases/visualizer/canvas/radiomediumactivity/, -f omnetpp.ini -c DisplayingSignalsTransmissionsReceptions -r 0, 500s, 771b-bffb/tplx;ca1b-c59c/~tNl;4ebb-fab0/~tND, PASS, wireless # unfinished +/showcases/visualizer/canvas/radiomediumactivity/, -f omnetpp.ini -c MultipleNodes -r 0, 500s, d609-0855/tplx;c3dc-e8b6/~tNl;2391-8516/~tND, PASS, wireless +/showcases/visualizer/canvas/radiomediumactivity/, -f omnetpp.ini -c InterferingSignals -r 0, 500s, 0c15-ccd5/tplx;5a8d-56aa/~tNl;66d8-8c75/~tND, PASS, wireless /showcases/visualizer/canvas/routingtable/, -f omnetpp.ini -c DisplayingAll -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /showcases/visualizer/canvas/routingtable/, -f omnetpp.ini -c Unfiltered -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /showcases/visualizer/canvas/routingtable/, -f omnetpp.ini -c Filtered -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/showcases/visualizer/canvas/routingtable/, -f omnetpp.ini -c Dynamic -r 0, 500s, 308c-2c32/tplx;6788-888c/~tNl;cd9b-6547/~tND;39e0-78c4/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/routingtable/, -f omnetpp.ini -c Dynamic -r 0, 500s, 308c-2c32/tplx;6788-888c/~tNl;87a8-42ce/~tND;39e0-78c4/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/spectrum/, -f omnetpp.ini -c SpectrumFigure -r 0, 1s, 23cb-bc0c/tplx;5ba5-b602/~tNl;ec3f-7195/~tND;38d4-6203/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/spectrum/, -f omnetpp.ini -c Spectrogram -r 0, 1s, 23cb-bc0c/tplx;5ba5-b602/~tNl;ec3f-7195/~tND;6f43-7810/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/spectrum/, -f omnetpp.ini -c PowerDensityMap -r 0, 1s, 2622-bc42/tplx;6db5-38b6/~tNl;45da-c896/~tND;88d9-8b3f/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/spectrum/, -f omnetpp.ini -c SpectrumFigure -r 0, 1s, 23cb-bc0c/tplx;5ba5-b602/~tNl;1be3-b019/~tND;38d4-6203/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/spectrum/, -f omnetpp.ini -c Spectrogram -r 0, 1s, 23cb-bc0c/tplx;5ba5-b602/~tNl;1be3-b019/~tND;6f43-7810/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/spectrum/, -f omnetpp.ini -c PowerDensityMap -r 0, 1s, 2622-bc42/tplx;6db5-38b6/~tNl;df7a-beae/~tND;88d9-8b3f/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/statistic/, -f omnetpp.ini -c PingRtt -r 0, 500s, 1479-6398/tplx;9b09-5004/~tNl;c483-33cf/~tND;71d6-de16/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/statistic/, -f omnetpp.ini -c PacketErrorRate -r 0, 25s, eb0f-ff32/tplx;025d-a600/~tNl;d957-cacd/~tND;0b84-e1e1/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/statistic/, -f omnetpp.ini -c PingRtt -r 0, 500s, 1479-6398/tplx;9b09-5004/~tNl;87e2-d13d/~tND;71d6-de16/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/statistic/, -f omnetpp.ini -c PacketErrorRate -r 0, 25s, eb0f-ff32/tplx;025d-a600/~tNl;0a60-f71c/~tND;0b84-e1e1/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Line -r 0, 25s, cb1d-a154/tplx;a565-1a98/~tNl;6950-9c50/~tND;7b44-2fb8/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Font -r 0, 25s, cb1d-a154/tplx;a565-1a98/~tNl;6950-9c50/~tND;5e90-6a92/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Icon -r 0, 25s, 9218-0d5b/tplx;1a94-46a8/~tNl;c094-fead/~tND;62e8-28b7/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Annotation -r 0, 25s, 9349-7ae5/tplx;5207-a7b7/~tNl;37de-f185/~tND;342b-0033/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Line -r 0, 25s, cb1d-a154/tplx;a565-1a98/~tNl;ee1b-5f7a/~tND;7b44-2fb8/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Font -r 0, 25s, cb1d-a154/tplx;a565-1a98/~tNl;ee1b-5f7a/~tND;5e90-6a92/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Icon -r 0, 25s, 9218-0d5b/tplx;1a94-46a8/~tNl;530b-257e/~tND;62e8-28b7/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Annotation -r 0, 25s, 9349-7ae5/tplx;5207-a7b7/~tNl;c86d-dfcf/~tND;342b-0033/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/transportconnection/, -f omnetpp.ini -c EnablingVisualization -r 0, 2s, fc86-91c1/tplx;817d-6638/~tNl;b2d4-0aff/~tND;d5f4-f615/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/transportconnection/, -f omnetpp.ini -c MultipleConnections -r 0, 2s, 511a-236b/tplx;0bd4-4f1e/~tNl;050f-8d69/~tND;1584-363d/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/transportpathactivity/, -f omnetpp.ini -c EnablingPathVisualizationWired -r 0, 500s, 1939-d7f9/tplx;56a5-52e3/~tNl;f34f-f329/~tND;6b93-2fc6/tyf, PASS, EthernetMac Ipv4 -/showcases/visualizer/canvas/transportpathactivity/, -f omnetpp.ini -c EnablingPathVisualizationWireless -r 0, 500s, 691e-0e35/tplx;5dfc-9178/~tNl;abcb-b068/~tND;9224-5dd7/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/transportpathactivity/, -f omnetpp.ini -c EnablingPathVisualizationWireless -r 0, 500s, 691e-0e35/tplx;5dfc-9178/~tNl;0fa0-c15f/~tND;9224-5dd7/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/transportpathactivity/, -f omnetpp.ini -c Filtering -r 0, 100s, 8bcf-d426/tplx;8f09-7a80/~tNl;92a4-c3ec/~tND;0694-d5be/tyf, PASS, wireless EthernetMac Ipv4 -/showcases/wireless/aggregation/, -f omnetpp.ini -c NoAggregation -r 0, 1s, 97f6-a969/tplx;ecf2-6e33/~tNl;9d9f-0fdb/~tND;27f2-4a52/tyf, PASS, wireless Ipv4 -/showcases/wireless/aggregation/, -f omnetpp.ini -c Aggregation -r 0, 1s, 671b-274c/tplx;6d84-9720/~tNl;1994-8283/~tND;95cc-1859/tyf, PASS, wireless Ipv4 -/showcases/wireless/aggregation/, -f omnetpp.ini -c VoicePriorityAggregation -r 0, 1s, 1dbe-6672/tplx;a253-dbe3/~tNl;3e6f-89d7/~tND;bd88-5ba6/tyf, PASS, wireless Ipv4 +/showcases/wireless/aggregation/, -f omnetpp.ini -c NoAggregation -r 0, 1s, 97f6-a969/tplx;ecf2-6e33/~tNl;5d9e-8fdf/~tND;27f2-4a52/tyf, PASS, wireless Ipv4 +/showcases/wireless/aggregation/, -f omnetpp.ini -c Aggregation -r 0, 1s, 671b-274c/tplx;6d84-9720/~tNl;b29d-4083/~tND;95cc-1859/tyf, PASS, wireless Ipv4 +/showcases/wireless/aggregation/, -f omnetpp.ini -c VoicePriorityAggregation -r 0, 1s, 1dbe-6672/tplx;a253-dbe3/~tNl;3bb2-9797/~tND;bd88-5ba6/tyf, PASS, wireless Ipv4 -/showcases/wireless/analogmodel/, -f omnetpp.ini -c Routing -r 0, 5s, 56b0-3510/tplx;baeb-0d2c/~tNl;378f-fb30/~tND;00a2-e4ee/tyf, PASS, wireless Ipv4 -/showcases/wireless/analogmodel/, -f omnetpp.ini -c Distance -r 0, 2.5s, 1e75-270e/tplx;6d7a-d84c/~tNl;b380-6cd5/~tND;5575-fd8f/tyf, PASS, wireless Ipv4 -/showcases/wireless/analogmodel/, -f omnetpp.ini -c Noise -r 0, 0.1s, dd08-a63c/tplx;e167-9c84/~tNl;643d-41a6/~tND;0d1f-df73/tyf, PASS, wireless Ipv4 +/showcases/wireless/analogmodel/, -f omnetpp.ini -c Routing -r 0, 5s, 56b0-3510/tplx;baeb-0d2c/~tNl;3d4b-65fc/~tND;00a2-e4ee/tyf, PASS, wireless Ipv4 +/showcases/wireless/analogmodel/, -f omnetpp.ini -c Distance -r 0, 2.5s, 1e75-270e/tplx;6d7a-d84c/~tNl;7b7c-2bfb/~tND;5575-fd8f/tyf, PASS, wireless Ipv4 +/showcases/wireless/analogmodel/, -f omnetpp.ini -c Noise -r 0, 0.1s, dd08-a63c/tplx;e167-9c84/~tNl;d680-b8ad/~tND;0d1f-df73/tyf, PASS, wireless Ipv4 -/showcases/wireless/blockack/, -f omnetpp.ini -c NoFragmentation -r 0, 1s, aa2d-5d35/tplx;2094-1f2a/~tNl;09ae-d7db/~tND, PASS, wireless Ipv4 -/showcases/wireless/blockack/, -f omnetpp.ini -c Fragmentation -r 0, 1s, 7ae9-e07d/tplx;db8b-3b81/~tNl;c669-32e2/~tND, PASS, wireless Ipv4 -/showcases/wireless/blockack/, -f omnetpp.ini -c MixedTraffic -r 0, 1s, 462d-10c7/tplx;727b-d26a/~tNl;029a-96bc/~tND, PASS, wireless Ipv4 +/showcases/wireless/blockack/, -f omnetpp.ini -c NoFragmentation -r 0, 1s, aa2d-5d35/tplx;2094-1f2a/~tNl;767c-ced7/~tND, PASS, wireless Ipv4 +/showcases/wireless/blockack/, -f omnetpp.ini -c Fragmentation -r 0, 1s, 7ae9-e07d/tplx;db8b-3b81/~tNl;bfe2-d067/~tND, PASS, wireless Ipv4 +/showcases/wireless/blockack/, -f omnetpp.ini -c MixedTraffic -r 0, 1s, 462d-10c7/tplx;727b-d26a/~tNl;8586-c9db/~tND, PASS, wireless Ipv4 -/showcases/wireless/crosstalk/, -f omnetpp.ini -c CompletelyOverlappingFrequencyBands -r 0, 1s, d0d7-43e0/tplx;867a-07a4/~tNl;df78-8445/~tND;3ea3-43da/tyf, PASS, wireless Ipv4 -/showcases/wireless/crosstalk/, -f omnetpp.ini -c IndependentFrequencyBandsOneRadioMediumModule -r 0, 1s, 70c6-72b6/tplx;cf96-5e4d/~tNl;3cba-ae59/~tND;d1b2-9fd4/tyf, PASS, wireless Ipv4 -/showcases/wireless/crosstalk/, -f omnetpp.ini -c IndependentFrequencyBandsTwoRadioMediumModules -r 0, 1s, 257e-ce2a/tplx;04b4-808a/~tNl;a798-73b2/~tND;3015-228c/tyf, PASS, wireless Ipv4 -/showcases/wireless/crosstalk/, -f omnetpp.ini -c PartiallyOverlappingFrequencyBands -r 0, 1s, 387b-bb0e/tplx;867a-07a4/~tNl;df78-8445/~tND;6bd7-7283/tyf, PASS, wireless Ipv4 +/showcases/wireless/crosstalk/, -f omnetpp.ini -c CompletelyOverlappingFrequencyBands -r 0, 1s, d0d7-43e0/tplx;867a-07a4/~tNl;fc60-7eb7/~tND;3ea3-43da/tyf, PASS, wireless Ipv4 +/showcases/wireless/crosstalk/, -f omnetpp.ini -c IndependentFrequencyBandsOneRadioMediumModule -r 0, 1s, 70c6-72b6/tplx;cf96-5e4d/~tNl;6f3a-074a/~tND;d1b2-9fd4/tyf, PASS, wireless Ipv4 +/showcases/wireless/crosstalk/, -f omnetpp.ini -c IndependentFrequencyBandsTwoRadioMediumModules -r 0, 1s, 257e-ce2a/tplx;04b4-808a/~tNl;77e3-4c5e/~tND;3015-228c/tyf, PASS, wireless Ipv4 +/showcases/wireless/crosstalk/, -f omnetpp.ini -c PartiallyOverlappingFrequencyBands -r 0, 1s, 387b-bb0e/tplx;867a-07a4/~tNl;fc60-7eb7/~tND;6bd7-7283/tyf, PASS, wireless Ipv4 /showcases/wireless/coexistence/, -f omnetpp.ini -c Coexistence -r 0, 5s, 6a9f-c21b/tplx;1d7b-ac79/~tNl, PASS, wireless ieee802154 Ipv4 /showcases/wireless/coexistence/, -f omnetpp.ini -c Coexistence -r 1, 5s, 8cb8-6ac7/tplx;2d3f-addc/~tNl, PASS, wireless ieee802154 Ipv4 @@ -216,14 +216,14 @@ /showcases/wireless/coexistence/, -f omnetpp.ini -c Coexistence -r 5, 5s, 251e-cd6d/tplx;3b52-8020/~tNl, PASS, wireless ieee802154 Ipv4 /showcases/wireless/coexistence/, -f omnetpp.ini -c Coexistence -r 6, 5s, 708d-0f0f/tplx;e31b-2209/~tNl, PASS, wireless ieee802154 Ipv4 /showcases/wireless/coexistence/, -f omnetpp.ini -c Coexistence -r 7, 5s, 954e-f1f8/tplx;56a8-5df3/~tNl, PASS, wireless ieee802154 Ipv4 -/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 0, 5s, bd14-085a/tplx;c147-5e89/~tNl;ed29-7068/~tND, PASS, wireless Ipv4 -/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 1, 5s, 648a-0502/tplx;1ee8-3fca/~tNl;5908-22d3/~tND, PASS, wireless Ipv4 -/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 2, 5s, e4e5-712f/tplx;feda-d467/~tNl;6554-bd1d/~tND, PASS, wireless Ipv4 -/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 3, 5s, 996e-7a02/tplx;8874-9fbe/~tNl;6db0-638f/~tND, PASS, wireless Ipv4 -/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 4, 5s, fc8e-a90a/tplx;c4c6-7525/~tNl;dff6-20d8/~tND, PASS, wireless Ipv4 -/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 5, 5s, ef2d-7b0b/tplx;ad2f-3ff9/~tNl;46f0-6373/~tND, PASS, wireless Ipv4 -/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 6, 5s, 839c-d0d6/tplx;4288-aca5/~tNl;fda0-2de7/~tND, PASS, wireless Ipv4 -/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 7, 5s, 3845-90eb/tplx;42d3-911e/~tNl;5ffe-985d/~tND, PASS, wireless Ipv4 +/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 0, 5s, bd14-085a/tplx;c147-5e89/~tNl;e566-7669/~tND, PASS, wireless Ipv4 +/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 1, 5s, 648a-0502/tplx;1ee8-3fca/~tNl;16b3-9d3d/~tND, PASS, wireless Ipv4 +/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 2, 5s, e4e5-712f/tplx;feda-d467/~tNl;c4f4-1317/~tND, PASS, wireless Ipv4 +/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 3, 5s, 996e-7a02/tplx;8874-9fbe/~tNl;fa88-1a52/~tND, PASS, wireless Ipv4 +/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 4, 5s, fc8e-a90a/tplx;c4c6-7525/~tNl;2006-ff27/~tND, PASS, wireless Ipv4 +/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 5, 5s, ef2d-7b0b/tplx;ad2f-3ff9/~tNl;8d6b-cf9d/~tND, PASS, wireless Ipv4 +/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 6, 5s, 839c-d0d6/tplx;4288-aca5/~tNl;2357-d6d8/~tND, PASS, wireless Ipv4 +/showcases/wireless/coexistence/, -f omnetpp.ini -c WifiHosts -r 7, 5s, 3845-90eb/tplx;42d3-911e/~tNl;1aa5-8da9/~tND, PASS, wireless Ipv4 /showcases/wireless/coexistence/, -f omnetpp.ini -c WpanHosts -r 0, 5s, b448-04a6/tplx;614c-805e/~tNl;5bd0-99e1/tyf, PASS, wireless ieee802154 Ipv4 /showcases/wireless/coexistence/, -f omnetpp.ini -c WpanHosts -r 1, 5s, 2567-560d/tplx;ab10-0018/~tNl;dd59-c5c5/tyf, PASS, wireless ieee802154 Ipv4 /showcases/wireless/coexistence/, -f omnetpp.ini -c WpanHosts -r 2, 5s, 4ddb-efe4/tplx;0524-50ac/~tNl;b950-38ea/tyf, PASS, wireless ieee802154 Ipv4 @@ -234,47 +234,47 @@ /showcases/wireless/coexistence/, -f omnetpp.ini -c WpanHosts -r 7, 5s, aec2-be1a/tplx;81b2-01f2/~tNl;7974-8197/tyf, PASS, wireless ieee802154 Ipv4 /showcases/wireless/directionalantennas/, -f omnetpp.ini -c IsotropicAntenna -r 0, 360s, cb2c-76b8/tplx;34d3-be84/~tNl;2bf0-cbb3/~tND;dfba-aeaf/tyf, PASS, wireless Ipv4 -/showcases/wireless/directionalantennas/, -f omnetpp.ini -c ParabolicAntenna -r 0, 360s, 814f-c3c5/tplx;ff14-8923/~tNl;9ea9-a712/~tND;40c4-7e8d/tyf, PASS, wireless Ipv4 -/showcases/wireless/directionalantennas/, -f omnetpp.ini -c DipoleAntenna -r 0, 360s, 41ce-90fc/tplx;c00c-d575/~tNl;b554-61e5/~tND;8d9c-c38e/tyf, PASS, wireless Ipv4 -/showcases/wireless/directionalantennas/, -f omnetpp.ini -c CosineAntenna -r 0, 360s, 01f3-50b8/tplx;53be-e739/~tNl;af08-9dc6/~tND;8ba2-f9fc/tyf, PASS, wireless Ipv4 -/showcases/wireless/directionalantennas/, -f omnetpp.ini -c AxiallySymmetricAntenna -r 0, 360s, b026-a022/tplx;6206-2bf6/~tNl;47dc-fa2f/~tND;9083-82bb/tyf, PASS, wireless Ipv4 - -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==6 && $distance==50', 500s, 95ac-0d44/tplx;841c-1fe2/~tNl;1572-968d/~tND;dda3-632d/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==9 && $distance==50', 500s, c77b-67bf/tplx;78e7-b6e0/~tNl;23ae-5f38/~tND;e590-222a/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==12 && $distance==50', 500s, 1b16-8136/tplx;48e6-5b94/~tNl;4831-cf2f/~tND;6c2c-8950/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==18 && $distance==50', 500s, 4236-0535/tplx;2cff-da85/~tNl;4025-8f49/~tND;a4cb-e4ad/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==24 && $distance==50', 500s, fcfa-b9d1/tplx;e0d1-48e5/~tNl;a2e1-2461/~tND;e74b-3383/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==36 && $distance==50', 500s, 9d10-2bd2/tplx;2cd1-59a6/~tNl;a533-f357/~tND;2b2a-7ea2/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==48 && $distance==50', 500s, e1fd-d585/tplx;5fb5-11eb/~tNl;050d-8afb/~tND;f813-7977/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==54 && $distance==50', 500s, b3d1-f8f1/tplx;ac1d-96d4/~tNl;4eed-1a87/~tND;2c5c-197e/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==6 && $distance==200', 500s, 42c0-3f59/tplx;004a-7dde/~tNl;626b-7ec5/~tND;8813-ec75/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==9 && $distance==200', 500s, f8c2-9615/tplx;8638-e0ec/~tNl;c3e5-f14c/~tND;7078-e5cc/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==12 && $distance==200', 500s, 52ce-a481/tplx;e4e9-ef63/~tNl;bf99-4a10/~tND;5037-1894/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==18 && $distance==200', 500s, e21f-85a3/tplx;ce4b-e6de/~tNl;f2e3-6098/~tND;f3a1-faeb/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==24 && $distance==200', 500s, cb82-e75b/tplx;5e88-7b80/~tNl;667b-df14/~tND;8e35-d9d1/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==36 && $distance==200', 500s, 13d8-037c/tplx;e03d-3534/~tNl;3431-5faf/~tND;592b-c7aa/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==48 && $distance==200', 500s, 5f54-2e07/tplx;167a-8318/~tNl;61b1-7a2d/~tND;1577-ef6d/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==54 && $distance==200', 500s, 5bab-99d2/tplx;2076-8708/~tNl;210f-7ff3/~tND;34d2-95a8/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==6 && $distance==350', 500s, ffef-47ea/tplx;2722-555c/~tNl;20f6-5aca/~tND;ab20-517a/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==9 && $distance==350', 500s, 8c7b-99a7/tplx;c41c-5e24/~tNl;145b-664f/~tND;8613-6abe/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==12 && $distance==350', 500s, 240f-fae5/tplx;158f-a393/~tNl;a119-91a5/~tND;644e-9328/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==18 && $distance==350', 500s, be06-ac3b/tplx;29dd-9b06/~tNl;37b7-cb5d/~tND;63f3-2e10/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==24 && $distance==350', 500s, d7fc-252f/tplx;f8f8-260d/~tNl;587b-8b77/~tND;ba81-7dc6/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==36 && $distance==350', 500s, e2af-14f5/tplx;0c7b-e752/~tNl;5efc-799f/~tND;13a7-ae8e/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==48 && $distance==350', 500s, 6518-1016/tplx;b21f-0ea2/~tNl;6f12-51f8/~tND;9b47-3a1d/tyf, PASS, wireless Ipv4 -/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==54 && $distance==350', 500s, 7a69-d427/tplx;3aa8-584d/~tNl;84f2-9812/~tND;6be5-e4ba/tyf, PASS, wireless Ipv4 - -/showcases/wireless/fragmentation/, -f omnetpp.ini -c DCFnofrag -r 0, 1s, 52b9-628f/tplx;3fec-74a2/~tNl;6073-4582/~tND;8871-1dd1/tyf, PASS, wireless Ipv4 -/showcases/wireless/fragmentation/, -f omnetpp.ini -c DCFfrag -r 0, 1s, 57ee-7ddf/tplx;dab9-5e8d/~tNl;7f9b-00fc/~tND;f985-34fb/tyf, PASS, wireless Ipv4 -/showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfrag -r 0, 1s, f7a5-cf0a/tplx;a24a-a070/~tNl;1c00-f465/~tND;335d-6687/tyf, PASS, wireless Ipv4 -/showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfragblockack -r 0, 1s, 0702-c692/tplx;1bf9-b035/~tNl;ec77-3283/~tND;6f6e-b101/tyf, PASS, wireless Ipv4 - -/showcases/wireless/handover/, -f omnetpp.ini -c General -r 0, 250s, b287-6940/tplx;45c3-a292/~tNl;99ae-332d/~tND;02e9-9ad3/tyf, PASS, wireless - -/showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOnRtsOff -r 0, 5s, 7912-bed4/tplx;c1e8-3622/~tNl;064a-ed2b/~tND;d824-8757/tyf, PASS, wireless Ipv4 -/showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOnRtsOn -r 0, 5s, 321b-f7f2/tplx;75e5-07b7/~tNl;1033-6cd1/~tND;35cb-1d85/tyf, PASS, wireless Ipv4 -/showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOffRtsOff -r 0, 5s, 0712-b86a/tplx;57a0-9a27/~tNl;dba0-5b36/~tND;23b3-39d5/tyf, PASS, wireless Ipv4 -/showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOffRtsOn -r 0, 5s, b9cb-6393/tplx;61b5-984b/~tNl;2aef-be5e/~tND;56d6-8a96/tyf, PASS, wireless Ipv4 +/showcases/wireless/directionalantennas/, -f omnetpp.ini -c ParabolicAntenna -r 0, 360s, 814f-c3c5/tplx;ff14-8923/~tNl;f88b-8572/~tND;40c4-7e8d/tyf, PASS, wireless Ipv4 +/showcases/wireless/directionalantennas/, -f omnetpp.ini -c DipoleAntenna -r 0, 360s, 41ce-90fc/tplx;c00c-d575/~tNl;9174-43a5/~tND;8d9c-c38e/tyf, PASS, wireless Ipv4 +/showcases/wireless/directionalantennas/, -f omnetpp.ini -c CosineAntenna -r 0, 360s, 01f3-50b8/tplx;53be-e739/~tNl;cb68-bd82/~tND;8ba2-f9fc/tyf, PASS, wireless Ipv4 +/showcases/wireless/directionalantennas/, -f omnetpp.ini -c AxiallySymmetricAntenna -r 0, 360s, b026-a022/tplx;6206-2bf6/~tNl;47f8-fa0d/~tND;9083-82bb/tyf, PASS, wireless Ipv4 + +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==6 && $distance==50', 500s, 95ac-0d44/tplx;841c-1fe2/~tNl;15a2-973d/~tND;dda3-632d/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==9 && $distance==50', 500s, c77b-67bf/tplx;78e7-b6e0/~tNl;237e-5038/~tND;e590-222a/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==12 && $distance==50', 500s, 1b16-8136/tplx;48e6-5b94/~tNl;4869-ca2f/~tND;6c2c-8950/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==18 && $distance==50', 500s, 4236-0535/tplx;2cff-da85/~tNl;407d-88c9/~tND;a4cb-e4ad/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==24 && $distance==50', 500s, fcfa-b9d1/tplx;e0d1-48e5/~tNl;8471-2461/~tND;e74b-3383/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==36 && $distance==50', 500s, 9d10-2bd2/tplx;2cd1-59a6/~tNl;8331-1357/~tND;2b2a-7ea2/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==48 && $distance==50', 500s, e1fd-d585/tplx;5fb5-11eb/~tNl;a30d-8afa/~tND;f813-7977/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==54 && $distance==50', 500s, b3d1-f8f1/tplx;ac1d-96d4/~tNl;696d-1a87/~tND;2c5c-197e/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==6 && $distance==200', 500s, 42c0-3f59/tplx;004a-7dde/~tNl;62bb-7f75/~tND;8813-ec75/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==9 && $distance==200', 500s, f8c2-9615/tplx;8638-e0ec/~tNl;c335-fe4c/~tND;7078-e5cc/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==12 && $distance==200', 500s, 52ce-a481/tplx;e4e9-ef63/~tNl;bfc1-4f10/~tND;5037-1894/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==18 && $distance==200', 500s, e21f-85a3/tplx;ce4b-e6de/~tNl;f2bb-6718/~tND;f3a1-faeb/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==24 && $distance==200', 500s, cb82-e75b/tplx;5e88-7b80/~tNl;42e9-9479/~tND;8e35-d9d1/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==36 && $distance==200', 500s, 13d8-037c/tplx;e03d-3534/~tNl;0702-d49c/~tND;592b-c7aa/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==48 && $distance==200', 500s, 5f54-2e07/tplx;167a-8318/~tNl;0056-fc35/~tND;1577-ef6d/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==54 && $distance==200', 500s, 5bab-99d2/tplx;2076-8708/~tNl;4c8f-7928/~tND;34d2-95a8/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==6 && $distance==350', 500s, ffef-47ea/tplx;2722-555c/~tNl;50ce-baba/~tND;ab20-517a/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==9 && $distance==350', 500s, 8c7b-99a7/tplx;c41c-5e24/~tNl;eba4-69b0/~tND;8613-6abe/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==12 && $distance==350', 500s, 240f-fae5/tplx;158f-a393/~tNl;f44c-94f0/~tND;644e-9328/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==18 && $distance==350', 500s, be06-ac3b/tplx;29dd-9b06/~tNl;c848-4ca2/~tND;63f3-2e10/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==24 && $distance==350', 500s, d7fc-252f/tplx;f8f8-260d/~tNl;7ce9-c01a/~tND;ba81-7dc6/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==36 && $distance==350', 500s, e2af-14f5/tplx;0c7b-e752/~tNl;6dcf-f2ac/~tND;13a7-ae8e/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==48 && $distance==350', 500s, 6518-1016/tplx;b21f-0ea2/~tNl;0ef5-d7e0/~tND;9b47-3a1d/tyf, PASS, wireless Ipv4 +/showcases/wireless/errorrate/, -f omnetpp.ini -c General -r '$bitrate==54 && $distance==350', 500s, 7a69-d427/tplx;3aa8-584d/~tNl;e972-9ec9/~tND;6be5-e4ba/tyf, PASS, wireless Ipv4 + +/showcases/wireless/fragmentation/, -f omnetpp.ini -c DCFnofrag -r 0, 1s, 52b9-628f/tplx;3fec-74a2/~tNl;dbb5-67b0/~tND;8871-1dd1/tyf, PASS, wireless Ipv4 +/showcases/wireless/fragmentation/, -f omnetpp.ini -c DCFfrag -r 0, 1s, 57ee-7ddf/tplx;dab9-5e8d/~tNl;2e7b-0729/~tND;f985-34fb/tyf, PASS, wireless Ipv4 +/showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfrag -r 0, 1s, f7a5-cf0a/tplx;a24a-a070/~tNl;5dae-0b8e/~tND;335d-6687/tyf, PASS, wireless Ipv4 +/showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfragblockack -r 0, 1s, 0702-c692/tplx;1bf9-b035/~tNl;a51c-9f3d/~tND;6f6e-b101/tyf, PASS, wireless Ipv4 + +/showcases/wireless/handover/, -f omnetpp.ini -c General -r 0, 250s, b287-6940/tplx;45c3-a292/~tNl;9f9a-88ce/~tND;02e9-9ad3/tyf, PASS, wireless + +/showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOnRtsOff -r 0, 5s, 7912-bed4/tplx;c1e8-3622/~tNl;9b60-a38b/~tND;d824-8757/tyf, PASS, wireless Ipv4 +/showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOnRtsOn -r 0, 5s, 321b-f7f2/tplx;75e5-07b7/~tNl;4c45-33b3/~tND;35cb-1d85/tyf, PASS, wireless Ipv4 +/showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOffRtsOff -r 0, 5s, 0712-b86a/tplx;57a0-9a27/~tNl;15ce-9281/~tND;23b3-39d5/tyf, PASS, wireless Ipv4 +/showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOffRtsOn -r 0, 5s, b9cb-6393/tplx;61b5-984b/~tNl;e467-891a/~tND;56d6-8a96/tyf, PASS, wireless Ipv4 # /showcases/wireless/ieee802154/, -f omnetpp.ini -c Ieee802154 -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, wireless ieee802154 # Ieee802154 extended /showcases/wireless/ieee802154/, -f omnetpp.ini -c Ieee802154Power -r 0, 100s, 4507-9162/tplx;b99a-4436/~tNl;f6bf-fa08/tyf, PASS, wireless ieee802154 Ipv4 @@ -307,17 +307,17 @@ # /showcases/wireless/levelofdetail/, -f omnetpp.ini -c General -r '$detail=="bit" && $modulation=="QAM-64" && $fecType=="" && $distance==225', 100s, 7794-9306/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, wireless # /showcases/wireless/levelofdetail/, -f omnetpp.ini -c General -r '$detail=="symbol" && $modulation=="QAM-64" && $fecType=="" && $distance==125', 100s, 54ce-ce35/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, wireless -/showcases/wireless/multiradio/, -f omnetpp.ini -c General -r 0, 100s, 6f2f-9b0b/tplx;6b4f-f8fd/~tNl;147a-85cd/~tND;92c1-ccc2/tyf, PASS, wireless Ipv4 +/showcases/wireless/multiradio/, -f omnetpp.ini -c General -r 0, 100s, 6f2f-9b0b/tplx;6b4f-f8fd/~tNl;338d-ba9d/~tND;92c1-ccc2/tyf, PASS, wireless Ipv4 /showcases/wireless/pathloss/, -f omnetpp.ini -c General -r 0, 100s, 171a-e6eb/tplx;3466-822d/~tNl;5909-6e87/~tND;929d-03d5/tyf, PASS, wireless Ipv4 -/showcases/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 498f-b665/tplx;6f50-5caf/~tNl;0ad4-1089/~tND, PASS, wireless Ipv4 +/showcases/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 498f-b665/tplx;6f50-5caf/~tNl;1403-6fb2/~tND, PASS, wireless Ipv4 -/showcases/wireless/qos/, -f omnetpp.ini -c NonQos -r 0, 10s, 37fd-5401/tplx;92f7-198c/~tNl;955c-ee96/~tND;093e-1ca4/tyf, PASS, wireless Ipv4 -/showcases/wireless/qos/, -f omnetpp.ini -c Qos -r 0, 10s, 1a49-72b3/tplx;e605-d79d/~tNl;9369-2a76/~tND;bda9-15d1/tyf, PASS, wireless Ipv4 +/showcases/wireless/qos/, -f omnetpp.ini -c NonQos -r 0, 10s, 37fd-5401/tplx;92f7-198c/~tNl;2fa3-9994/~tND;093e-1ca4/tyf, PASS, wireless Ipv4 +/showcases/wireless/qos/, -f omnetpp.ini -c Qos -r 0, 10s, 1a49-72b3/tplx;e605-d79d/~tNl;25f0-9c73/~tND;bda9-15d1/tyf, PASS, wireless Ipv4 -/showcases/wireless/ratecontrol/, -f omnetpp.ini -c NoRateControl -r 0, 14s, 7ee9-503a/tplx;0816-e58f/~tNl;648e-6e84/~tND;dad3-7f89/tyf, PASS, wireless Ipv4 -/showcases/wireless/ratecontrol/, -f omnetpp.ini -c AarfRateControl -r 0, 12s, a7bc-05bb/tplx;9de0-4dd3/~tNl;1209-101b/~tND;7539-d32d/tyf, PASS, wireless Ipv4 +/showcases/wireless/ratecontrol/, -f omnetpp.ini -c NoRateControl -r 0, 14s, 7ee9-503a/tplx;0816-e58f/~tNl;ec30-e32d/~tND;dad3-7f89/tyf, PASS, wireless Ipv4 +/showcases/wireless/ratecontrol/, -f omnetpp.ini -c AarfRateControl -r 0, 12s, a7bc-05bb/tplx;9de0-4dd3/~tNl;de90-6575/~tND;7539-d32d/tyf, PASS, wireless Ipv4 # /showcases/wireless/scaling/, -f omnetpp.ini -c PingBase -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, # PingBase extended # /showcases/wireless/scaling/, -f omnetpp.ini -c UDPBase -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, # UDPBase extended @@ -339,7 +339,7 @@ /showcases/wireless/sensornetwork/, -f omnetpp.ini -c StatisticXMac -r 100, 25s, 9271-1704/tplx;1890-24d8/~tNl;aa99-97ee/tyf, PASS, wireless Ipv4 /showcases/wireless/sensornetwork/, -f omnetpp.ini -c StatisticLMac -r 100, 25s, 60e4-3fd6/tplx;6f72-dc77/~tNl;518f-2a81/tyf, PASS, wireless EthernetMac Ipv4 -/showcases/wireless/throughput/, -f omnetpp.ini -c General -r 0, 1s, 030e-c416/tplx;66e6-0bca/~tNl;3cb6-43bd/~tND;e6a5-bde0/tyf, PASS, wireless Ipv4 +/showcases/wireless/throughput/, -f omnetpp.ini -c General -r 0, 1s, 030e-c416/tplx;66e6-0bca/~tNl;3cb5-d354/~tND;e6a5-bde0/tyf, PASS, wireless Ipv4 /showcases/wireless/txop/, -f omnetpp.ini -c General -r 0, 5s, d2b6-a5d1/tplx;3a6f-4c28/~tNl;c87d-3f3a/tyf, PASS, wireless Ipv4 diff --git a/tests/fingerprint/tutorials.csv b/tests/fingerprint/tutorials.csv index 1a1b09eb160..d8f391cfc9c 100644 --- a/tests/fingerprint/tutorials.csv +++ b/tests/fingerprint/tutorials.csv @@ -10,15 +10,15 @@ /tutorials/configurator/, -f omnetpp.ini -c Step7A -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /tutorials/configurator/, -f omnetpp.ini -c Step7B -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /tutorials/configurator/, -f omnetpp.ini -c Step7C -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/tutorials/configurator/, -f omnetpp.ini -c Step8A -r 0, 100s, f99c-9e43/tplx;e810-af2b/~tNl;8f87-ee38/~tND;d3f3-ed4c/tyf, PASS, wireless EthernetMac Ipv4 # Step8A extended -/tutorials/configurator/, -f omnetpp.ini -c Step8B -r 0, 100s, 6daa-17f7/tplx;e810-af2b/~tNl;e839-e562/~tND;af16-1150/tyf, PASS, wireless EthernetMac Ipv4 -/tutorials/configurator/, -f omnetpp.ini -c Step9 -r 0, 100s, 7f72-228e/tplx;44d7-fbf3/~tNl;48a0-6adb/~tND;c38c-98ef/tyf, PASS, wireless EthernetMac Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step8A -r 0, 100s, f99c-9e43/tplx;e810-af2b/~tNl;0b8c-ee21/~tND;d3f3-ed4c/tyf, PASS, wireless EthernetMac Ipv4 # Step8A extended +/tutorials/configurator/, -f omnetpp.ini -c Step8B -r 0, 100s, 6daa-17f7/tplx;e810-af2b/~tNl;f7fb-93ca/~tND;af16-1150/tyf, PASS, wireless EthernetMac Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step9 -r 0, 100s, 7f72-228e/tplx;44d7-fbf3/~tNl;74e2-2326/~tND;c38c-98ef/tyf, PASS, wireless EthernetMac Ipv4 /tutorials/configurator/, -f omnetpp.ini -c Step10A -r 0, 100s, 4b6f-7cd9/tplx;0000-0000/~tNl;0000-0000/~tND;095d-75bd/tyf, PASS, wireless # Step10A extended /tutorials/configurator/, -f omnetpp.ini -c Step10B -r 0, 100s, 4b6f-7cd9/tplx;0000-0000/~tNl;0000-0000/~tND;4d60-fcf9/tyf, PASS, wireless # Step10B extended -/tutorials/configurator/, -f omnetpp.ini -c Step10C -r 0, 100s, 71f5-b341/tplx;4a61-20ba/~tNl;c614-3445/~tND;f078-56fe/tyf, PASS, wireless Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step10C -r 0, 100s, 71f5-b341/tplx;4a61-20ba/~tNl;707b-bb40/~tND;f078-56fe/tyf, PASS, wireless Ipv4 /tutorials/configurator/, -f omnetpp.ini -c Step11A -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /tutorials/configurator/, -f omnetpp.ini -c Step11B -r 0, 500s, 49cf-d241/tplx;725c-f075/~tNl;15a3-3f79/~tND;7082-ff49/tyf, PASS, EthernetMac Ipv4 -/tutorials/configurator/, -f omnetpp.ini -c Step12 -r 0, 100s, a186-bbc1/tplx;7370-3135/~tNl;1438-e824/~tND;4b03-e5a1/tyf, PASS, wireless EthernetMac Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step12 -r 0, 100s, a186-bbc1/tplx;7370-3135/~tNl;455c-1bbd/~tND;4b03-e5a1/tyf, PASS, wireless EthernetMac Ipv4 /tutorials/rip/, -f omnetpp.ini -c Step1 -r 0, 100s, 2c94-a8bb/tplx;b4e0-1e61/~tNl;4bd3-4530/~tND;1e4a-2625/tyf, PASS, /tutorials/rip/, -f omnetpp.ini -c Step2 -r 0, 100s, 6019-f318/tplx;9372-788f/~tNl;dec7-8e56/~tND;a345-d423/tyf, PASS, # Step2 extended diff --git a/tests/unit/Ieee80211RadioWireIdentity_1.test b/tests/unit/Ieee80211RadioWireIdentity_1.test new file mode 100644 index 00000000000..2b788ea2c88 --- /dev/null +++ b/tests/unit/Ieee80211RadioWireIdentity_1.test @@ -0,0 +1,149 @@ +%description: +Exercise real packet-level and bit-level radio encapsulation/decapsulation, +OFDM header generation and independent SIGNAL parity corruption. + +%includes: +#include "inet/common/ProtocolTag_m.h" +#include "inet/common/packet/Packet.h" +#include "inet/common/packet/chunk/ByteCountChunk.h" +#include "inet/common/packet/chunk/BytesChunk.h" +#include "inet/linklayer/ieee80211/mac/Rx.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Transmitter.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Tag_m.h" +#include "inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211OfdmRadio.h" +#include "inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211LayeredOfdmTransmitter.h" +#include "inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211LayeredOfdmReceiver.h" +#include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211DsssMode.h" +#include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211HrDsssMode.h" +#include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211ErpOfdmMode.h" + +%global: +using namespace inet; +using namespace inet::physicallayer; + +class TestRadio : public Ieee80211Radio +{ + public: + using Ieee80211Radio::encapsulate; + using Ieee80211Radio::decapsulate; + void configure(const ITransmitter *tx) { transmitter = tx; fcsMode = FCS_DECLARED_CORRECT; } +}; + +class TestOfdmRadio : public Ieee80211OfdmRadio +{ + public: + using Ieee80211OfdmRadio::encapsulate; + using Ieee80211OfdmRadio::decapsulate; + void configure(const ITransmitter *tx, const IReceiver *rx) { transmitter = tx; receiver = rx; } +}; + +class TestOfdmTransmitter : public Ieee80211LayeredOfdmTransmitter +{ + public: + TestOfdmTransmitter() { isCompliant = true; } +}; + +class TestOfdmReceiver : public Ieee80211LayeredOfdmReceiver +{ + public: + TestOfdmReceiver() { isCompliant = true; } + ~TestOfdmReceiver() { mode = nullptr; } // configured test mode is borrowed + void configureNonCompliant(const Ieee80211OfdmMode *configuredMode) { isCompliant = false; mode = configuredMode; } +}; + +class TestRx : public inet::ieee80211::Rx +{ + public: + using Rx::isFcsOk; +}; + +%activity: +Ieee80211Transmitter transmitter; +TestRadio radio; +radio.configure(&transmitter); +const auto *ofdm = &Ieee80211OfdmCompliantModes::getCompliantMode(13, MHz(20)); +const IIeee80211Mode *modes[] = {ofdm}; +const Protocol *protocols[] = {&Protocol::ieee80211OfdmPhy}; +for (int i = 0; i < 1; i++) { + Packet packet("radio", makeShared(B(3))); + packet.addTag()->setMode(modes[i]); + radio.encapsulate(&packet); + ASSERT(packet.getTag()->getProtocol() == protocols[i]); + { + auto header = packet.peekAtFront(); + ASSERT(header->getRate() == 13 && header->getParity()); + auto bytes = packet.peekDataAt(b(0), B(5)); + ASSERT(bytes->getByte(0) == 0x6D && bytes->getByte(1) == 0 && bytes->getByte(2) == 2); + auto corruptedBytes = bytes->getBytes(); + corruptedBytes[2] ^= 2; + Packet corrupted("bad-packet-signal", makeShared(corruptedBytes)); + corrupted.insertAtBack(packet.peekDataAt(B(5), packet.getDataLength() - B(5))); + corrupted.addTag()->setProtocol(protocols[i]); + corrupted.addTag()->setMode(modes[i]); + radio.decapsulate(&corrupted); + ASSERT(corrupted.hasBitError()); + } + packet.addTag()->setMode(modes[i]); + radio.decapsulate(&packet); + ASSERT(!packet.hasBitError()); + ASSERT(packet.getDataLength() == B(3)); + ASSERT(packet.getTag()->getProtocol() == &Protocol::ieee80211Mac); +} + +TestOfdmTransmitter bitTransmitter; +TestOfdmReceiver bitReceiver; +TestOfdmRadio bitRadio; +bitRadio.configure(&bitTransmitter, &bitReceiver); +for (int length : {1, 3}) { + Packet transmitted("signal", makeShared(B(length))); + transmitted.addTag()->setMode(ofdm); + bitRadio.encapsulate(&transmitted); + auto headerBytes = transmitted.peekDataAt(b(0), B(5))->getBytes(); + ASSERT(headerBytes[0] == (length == 1 ? 0x2D : 0x6D)); + ASSERT(headerBytes[1] == 0 && headerBytes[2] == (length == 1 ? 0 : 2)); + for (int variant = 0; variant < 4; variant++) { + auto bytes = headerBytes; + if (variant == 1) bytes[2] ^= 2; // parity corruption + if (variant == 2) { bytes[0] ^= 0x10; bytes[2] ^= 2; } // reserved, parity still valid + if (variant == 3) { bytes[0] ^= 1; bytes[2] ^= 2; } // undefined RATE, parity still valid + Packet received("received", makeShared(bytes)); + received.insertAtBack(transmitted.peekDataAt(B(5), transmitted.getDataLength() - B(5))); + received.addTag()->setMode(ofdm); + bitRadio.decapsulate(&received); + ASSERT(received.hasBitError() == (variant == 1 || variant == 3)); + if (received.hasBitError()) { + TestRx macReceiver; + ASSERT(!macReceiver.isFcsOk(&received)); + ASSERT(!macReceiver.lowerFrameReceived(received.dup())); + } + if (!received.hasBitError()) + ASSERT(received.getDataLength() == B(length)); + } +} +// Noncompliant reception uses the configured mode, not the standard RATE table. +bitReceiver.configureNonCompliant(ofdm); +for (int length : {1, 3}) { + Packet transmitted("noncompliant-signal", makeShared(B(length))); + transmitted.addTag()->setMode(ofdm); + bitRadio.encapsulate(&transmitted); + for (bool corruptParity : {false, true}) { + // RATE 0, reserved 0, length 1/3, and independently calculated even parity. + std::vector bytes = {static_cast(length << 5), 0, + static_cast(length == 1 ? 2 : 0), 0, 0}; + if (corruptParity) + bytes[2] ^= 2; + Packet received("noncompliant-received", makeShared(bytes)); + received.insertAtBack(transmitted.peekDataAt(B(5), transmitted.getDataLength() - B(5))); + bitRadio.decapsulate(&received); + ASSERT(received.hasBitError() == corruptParity); + if (!corruptParity) { + ASSERT(received.getDataLength() == B(length)); + ASSERT(received.getTag()->getProtocol() == &Protocol::ieee80211Mac); + } + } +} +EV << "Radio SIGNAL validation verified.\n"; + +%contains: stdout +Radio SIGNAL validation verified. From 1b6878a3f6eca0ded3cd9b4c02711520128a174c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Gonz=C3=A1lez=20L=C3=B3pez?= Date: Mon, 14 Sep 2026 11:14:59 +0200 Subject: [PATCH 6/9] ieee80211: preserve HR-DSSS and ERP PHY identities ERP reuses the OFDM SIGNAL factory, which constructs a base OFDM header. Preserve the selected ERP header type and protocol, and dispatch HR-DSSS before its DSSS base type. Verify the derived PHY identities through encapsulation, serialization and decapsulation. The 158 explicitly selected legacy fingerprint cases pass in debug mode. This commit changes 0 selected rows: 0 with trajectory changes and 0 with serialized-byte changes. Record only measured causal differences; preserve graphical expectations and unselected entries. Attribution and per-case deltas are in ai-logs/executions/2026-09-14_pr1189-cleanup/. Validation: incremental debug build, directly related tests and scoped opp_repl controls passed. --- WHATSNEW | 2 ++ .../ieee80211/packetlevel/Ieee80211Radio.cc | 13 ++++++----- tests/unit/Ieee80211RadioWireIdentity_1.test | 22 +++++++++++++------ 3 files changed, 25 insertions(+), 12 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index 85c4e820058..be77865df26 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -38,6 +38,8 @@ Notable backward incompatible changes are the following: OFDM radios generate and check SIGNAL parity and reject undefined RATE codes in compliant mode. Noncompliant layered reception uses its configured mode and still checks parity. + HR/DSSS and ERP transmissions carry their specific PHY protocol identities. + The mesh no-forwarding-information reason code is corrected from 60 to 62. These corrections change affected packet bytes and may change Wi-Fi simulation trajectories and fingerprints. diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc index 79ca4826946..d43fdfe149c 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc @@ -239,7 +239,10 @@ void Ieee80211Radio::encapsulate(Packet *packet) const { auto ieee80211Transmitter = check_and_cast(transmitter); auto mode = ieee80211Transmitter->computeTransmissionMode(packet); - auto phyHeader = mode->getHeaderMode()->createHeader(); + // ERP reuses OFDM's SIGNAL mode objects, whose factory creates a base + // OFDM header. Preserve the selected PHY family when constructing the PPDU. + auto phyHeader = dynamic_cast(mode) != nullptr ? + staticPtrCast(makeShared()) : mode->getHeaderMode()->createHeader(); phyHeader->setChunkLength(b(mode->getHeaderMode()->getLength())); phyHeader->setLengthField(B(packet->getDataLength())); if (auto ofdmHeader = dynamicPtrCast(phyHeader)) { @@ -261,14 +264,14 @@ void Ieee80211Radio::encapsulate(Packet *packet) const protocol = &Protocol::ieee80211FhssPhy; else if (dynamic_cast(phyHeader.get())) protocol = &Protocol::ieee80211IrPhy; - else if (dynamic_cast(phyHeader.get())) - protocol = &Protocol::ieee80211DsssPhy; else if (dynamic_cast(phyHeader.get())) protocol = &Protocol::ieee80211HrDsssPhy; - else if (dynamic_cast(phyHeader.get())) - protocol = &Protocol::ieee80211OfdmPhy; + else if (dynamic_cast(phyHeader.get())) + protocol = &Protocol::ieee80211DsssPhy; else if (dynamic_cast(phyHeader.get())) protocol = &Protocol::ieee80211ErpOfdmPhy; + else if (dynamic_cast(phyHeader.get())) + protocol = &Protocol::ieee80211OfdmPhy; else if (dynamic_cast(phyHeader.get())) protocol = &Protocol::ieee80211HtPhy; else if (dynamic_cast(phyHeader.get())) diff --git a/tests/unit/Ieee80211RadioWireIdentity_1.test b/tests/unit/Ieee80211RadioWireIdentity_1.test index 2b788ea2c88..a98d90bd225 100644 --- a/tests/unit/Ieee80211RadioWireIdentity_1.test +++ b/tests/unit/Ieee80211RadioWireIdentity_1.test @@ -1,6 +1,6 @@ %description: Exercise real packet-level and bit-level radio encapsulation/decapsulation, -OFDM header generation and independent SIGNAL parity corruption. +derived PHY factories and tags, and independent SIGNAL parity corruption. %includes: #include "inet/common/ProtocolTag_m.h" @@ -63,14 +63,22 @@ Ieee80211Transmitter transmitter; TestRadio radio; radio.configure(&transmitter); const auto *ofdm = &Ieee80211OfdmCompliantModes::getCompliantMode(13, MHz(20)); -const IIeee80211Mode *modes[] = {ofdm}; -const Protocol *protocols[] = {&Protocol::ieee80211OfdmPhy}; -for (int i = 0; i < 1; i++) { +const IIeee80211Mode *modes[] = { + &Ieee80211DsssCompliantModes::dsssMode1Mbps, + &Ieee80211HrDsssCompliantModes::hrDsssMode11MbpsCckLongPreamble, + ofdm, + &Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps +}; +const Protocol *protocols[] = {&Protocol::ieee80211DsssPhy, &Protocol::ieee80211HrDsssPhy, + &Protocol::ieee80211OfdmPhy, &Protocol::ieee80211ErpOfdmPhy}; +for (int i = 0; i < 4; i++) { Packet packet("radio", makeShared(B(3))); packet.addTag()->setMode(modes[i]); radio.encapsulate(&packet); ASSERT(packet.getTag()->getProtocol() == protocols[i]); - { + if (i == 3) + ASSERT(dynamicPtrCast(packet.peekAtFront()) != nullptr); + if (i >= 2) { auto header = packet.peekAtFront(); ASSERT(header->getRate() == 13 && header->getParity()); auto bytes = packet.peekDataAt(b(0), B(5)); @@ -143,7 +151,7 @@ for (int length : {1, 3}) { } } } -EV << "Radio SIGNAL validation verified.\n"; +EV << "Radio PHY identity and SIGNAL validation verified.\n"; %contains: stdout -Radio SIGNAL validation verified. +Radio PHY identity and SIGNAL validation verified. From 9ee9d2725fa8dacacf84d28176173a29f1931b01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Gonz=C3=A1lez=20L=C3=B3pez?= Date: Mon, 14 Sep 2026 13:23:35 +0200 Subject: [PATCH 7/9] ieee80211: normalize beacon intervals before scheduling AP target spacing must agree with the advertised TU interval (IEEE Std 802.11-2024, 9.4.1.3). Normalize once during initialization and reject values outside the 16-bit TU domain before scheduling or serialization. Include real AP target-spacing checks, serializer rejection coverage, and the valid-interval repair for the existing missing-channel fixture. The 158 explicitly selected legacy fingerprint cases pass in debug mode. This commit changes 30 selected rows: 30 with trajectory changes and 30 with serialized-byte changes. Record only measured causal differences; preserve graphical expectations and unselected entries. Attribution and per-case deltas are in ai-logs/executions/2026-09-14_pr1189-cleanup/. Validation: incremental debug build, directly related tests and scoped opp_repl controls passed. Introduce AP scheduling coverage in the module suite, whose explicit activity module exercises initialization and timer-driven Beacon/Probe Response creation. --- WHATSNEW | 4 + doc/src/migration-guide/index.rst | 14 ++ .../ieee80211/mgmt/Ieee80211BeaconInterval.h | 26 ++++ .../ieee80211/mgmt/Ieee80211MgmtAp.cc | 3 +- .../ieee80211/mgmt/Ieee80211MgmtAp.ned | 2 +- .../mgmt/Ieee80211MgmtFrameSerializer.cc | 5 +- tests/fingerprint/examples.csv | 26 ++-- tests/fingerprint/showcases.csv | 26 ++-- tests/fingerprint/tutorials.csv | 8 +- tests/module/Ieee80211BeaconSchedule_1.test | 147 ++++++++++++++++++ .../Ieee80211MgmtApUnavailableChannel_1.test | 2 +- tests/unit/Ieee80211BeaconWire_1.test | 61 +++++++- tests/unit/Ieee80211HtMgmtElements_1.test | 1 + 13 files changed, 287 insertions(+), 38 deletions(-) create mode 100644 src/inet/linklayer/ieee80211/mgmt/Ieee80211BeaconInterval.h create mode 100644 tests/module/Ieee80211BeaconSchedule_1.test diff --git a/WHATSNEW b/WHATSNEW index be77865df26..b5b98603bc1 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -40,6 +40,10 @@ Notable backward incompatible changes are the following: HR/DSSS and ERP transmissions carry their specific PHY protocol identities. + AP beacon intervals are rounded down to whole 1024-us TUs for both target + scheduling and advertisement (100ms becomes 99.328ms). Configured intervals + must be between 1 and 65535 TUs. + The mesh no-forwarding-information reason code is corrected from 60 to 62. These corrections change affected packet bytes and may change Wi-Fi simulation trajectories and fingerprints. diff --git a/doc/src/migration-guide/index.rst b/doc/src/migration-guide/index.rst index 2107aeb68ca..a05ae6f9768 100644 --- a/doc/src/migration-guide/index.rst +++ b/doc/src/migration-guide/index.rst @@ -4,6 +4,20 @@ Migrating Code from INET 3.x ============================ Release: |release| +IEEE 802.11 Beacon and Probe Response Fields +------------------------------------------ + +AP ``beaconInterval`` values are rounded down to whole 1024-us TUs once, during +initialization, and must be between 1 and 65535 TUs. The effective value drives +both target scheduling and advertised content. Use ``102400us`` for exactly +100 TUs; the default ``100ms`` now schedules targets 97 TUs apart. Actual beacon +transmissions can be delayed by channel access. Custom producers should put +the same effective interval in Beacon and Probe Response bodies as they use +for target scheduling. +The serializers require an interval between 1 and 65535 TUs for both frame +types and throw for out-of-range values, including the default zero interval. +Custom producers must set a valid interval before serialization. + ``RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION`` now has its standard value, 62. Code using the symbolic name needs only recompilation. Update external numeric mappings that used 60 for this reason. Old stored value 60 cannot be diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211BeaconInterval.h b/src/inet/linklayer/ieee80211/mgmt/Ieee80211BeaconInterval.h new file mode 100644 index 00000000000..3499656f216 --- /dev/null +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211BeaconInterval.h @@ -0,0 +1,26 @@ +// +// SPDX-License-Identifier: LGPL-3.0-or-later +// + +#ifndef __INET_IEEE80211BEACONINTERVAL_H +#define __INET_IEEE80211BEACONINTERVAL_H + +#include "inet/common/INETDefs.h" + +namespace inet { +namespace ieee80211 { + +inline simtime_t normalizeIeee80211BeaconInterval(simtime_t interval) +{ + // IEEE Std 802.11-2024, 9.4.1.3: a 16-bit count of 1024 us TUs. + // INET policy: round down once, matching the historical wire encoding, + // and use the resulting duration for both TBTTs and advertisements. + if (interval < SimTime(1024, SIMTIME_US) || interval > SimTime(65535LL * 1024, SIMTIME_US)) + throw cRuntimeError("Beacon interval must be between 1 and 65535 TUs (1024 us each)"); + return SimTime(interval.inUnit(SIMTIME_US) / 1024 * 1024, SIMTIME_US); +} + +} // namespace ieee80211 +} // namespace inet + +#endif diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.cc b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.cc index baad0d6e357..059ade5396a 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.cc +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.cc @@ -16,6 +16,7 @@ #include "inet/linklayer/ieee80211/mac/Ieee80211Mac.h" #include "inet/linklayer/ieee80211/mac/Ieee80211SubtypeTag_m.h" #include "inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.h" +#include "inet/linklayer/ieee80211/mgmt/Ieee80211BeaconInterval.h" #include "inet/linklayer/ieee80211/mgmt/Ieee80211HtMgmtElements.h" #include "inet/linklayer/ieee80211/mgmt/Ieee80211MgmtTransactionTag_m.h" #include "inet/networklayer/common/NetworkInterface.h" @@ -47,7 +48,7 @@ void Ieee80211MgmtAp::initialize(int stage) if (stage == INITSTAGE_LOCAL) { // read params and init vars ssid = par("ssid").stdstringValue(); - beaconInterval = par("beaconInterval"); + beaconInterval = normalizeIeee80211BeaconInterval(par("beaconInterval")); numAuthSteps = par("numAuthSteps"); if (numAuthSteps != 2 && numAuthSteps != 4) throw cRuntimeError("parameter 'numAuthSteps' (number of frames exchanged during authentication) must be 2 or 4, not %d", numAuthSteps); diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.ned b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.ned index f6801661aee..95397135f3b 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.ned +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.ned @@ -25,7 +25,7 @@ simple Ieee80211MgmtAp extends SimpleModule like IIeee80211Mgmt parameters: @class(Ieee80211MgmtAp); string ssid = default("SSID"); - double beaconInterval @unit(s) = default(100ms); + double beaconInterval @unit(s) = default(100ms); // 1..65535 TUs; rounded down to whole 1024 us TUs for scheduling and advertisement int numAuthSteps = default(4); // Use 2 for Open System auth, 4 for WEP string interfaceTableModule; string radioModule = default("^.radio"); // The path to the Radio module //FIXME remove default value diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrameSerializer.cc b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrameSerializer.cc index f874908b927..b93d656273f 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrameSerializer.cc +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrameSerializer.cc @@ -13,6 +13,7 @@ #include "inet/common/packet/serializer/ChunkSerializerRegistry.h" #include "inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame_m.h" +#include "inet/linklayer/ieee80211/mgmt/Ieee80211BeaconInterval.h" namespace inet { @@ -593,7 +594,7 @@ void Ieee80211MgmtFrameSerializer::serializeFields(MemoryOutputStream& stream, c // IEEE Std 802.11-2024, 9.4.1.10 and 11.1.3.1: the TSF timer counts in microseconds. stream.writeUint64Le(simTime().inUnit(SIMTIME_US)); // 2 Beacon interval - stream.writeUint16Le((uint16_t)(beaconFrame->getBeaconInterval().inUnit(SIMTIME_US) / 1024)); + stream.writeUint16Le(normalizeIeee80211BeaconInterval(beaconFrame->getBeaconInterval()).inUnit(SIMTIME_US) / 1024); // 3 Capability stream.writeUint16Le(0); // FIXME set capability // 4 Service Set Identifier (SSID) @@ -632,7 +633,7 @@ void Ieee80211MgmtFrameSerializer::serializeFields(MemoryOutputStream& stream, c // IEEE Std 802.11-2024, 9.4.1.10 and 11.1.3.1: the TSF timer counts in microseconds. stream.writeUint64Le(simTime().inUnit(SIMTIME_US)); // 2 Beacon interval - stream.writeUint16Le((uint16_t)(probeResponseFrame->getBeaconInterval().inUnit(SIMTIME_US) / 1024)); + stream.writeUint16Le(normalizeIeee80211BeaconInterval(probeResponseFrame->getBeaconInterval()).inUnit(SIMTIME_US) / 1024); // 3 Capability stream.writeUint16Le(0); // FIXME // 4 SSID diff --git a/tests/fingerprint/examples.csv b/tests/fingerprint/examples.csv index e59d2d29c98..3dc350e774a 100644 --- a/tests/fingerprint/examples.csv +++ b/tests/fingerprint/examples.csv @@ -47,8 +47,8 @@ /examples/communicationcache/, -f omnetpp.ini -c VectorCommunicationCache -r 0, 10s, 4c65-91ae/tplx;72b5-8f0b/~tNl;190a-bc02/~tND;40ef-e3e2/tyf, PASS, wireless Ipv4 /examples/dhcp/, -f omnetpp.ini -c WiredDHCP -r 0, 5000s, df67-0fe0/tplx;023a-3c37/~tNl;fdc9-84e1/~tND;8a53-9a15/tyf, PASS, EthernetMac Ipv4 -/examples/dhcp/, -f omnetpp.ini -c WirelessDHCP -r 0, 500s, a931-fbf9/tplx;f19a-7352/~tNl;c02f-f110/~tND;d3a7-5f49/tyf, PASS, wireless EthernetMac Ipv4 -/examples/dhcp/, -f omnetpp.ini -c Wireless2DHCP -r 0, 500s, c440-71e7/tplx;6ca7-4ad3/~tNl;cfb3-5fa9/~tND;3497-9980/tyf, PASS, wireless EthernetMac Ipv4 +/examples/dhcp/, -f omnetpp.ini -c WirelessDHCP -r 0, 500s, 1b57-d2e8/tplx;ac86-dd61/~tNl;a386-b193/~tND;d3a7-5f49/tyf, PASS, wireless EthernetMac Ipv4 +/examples/dhcp/, -f omnetpp.ini -c Wireless2DHCP -r 0, 500s, c938-527f/tplx;0566-81a4/~tNl;005d-ddb5/~tND;3497-9980/tyf, PASS, wireless EthernetMac Ipv4 /examples/dhcp/, -f omnetpp.ini -c RebootingDHCP -r 0, 500s, df1a-1a1e/tplx;0610-405e/~tNl;4ae3-3dec/~tND;fbd6-20e8/tyf, PASS, EthernetMac Ipv4 # /examples/diffserv/onedomain/, -f omnetpp.ini -c Apps -r 0, 10s, 0, PASS, # abstract-config @@ -380,10 +380,10 @@ /examples/manetrouting/multiradio/, -f omnetpp.ini -c MultiRadio -r 0, 20s, ec17-5cc2/tplx;55f5-0894/~tNl, PASS, wireless adhoc Ipv4 /examples/manetrouting/multiradio/, -f omnetpp.ini -c SingleRadio -r 0, 20s, 85a0-51b8/tplx;c07a-44e1/~tNl;3aa0-49ed/tyf, PASS, wireless adhoc Ipv4 -/examples/ipv6/mipv6/, -f omnetpp.ini -c Handover -r 0, 70s, 17ac-0898/tplx;8bbc-d083/~tNl;5b2d-7e79/~tND;44ef-1a45/tyf, PASS, wireless EthernetMac -/examples/ipv6/mipv6/, -f omnetpp.ini -c RouteOptimizationTwoCNs -r 0, 60s, 19e2-a165/tplx;d96c-5e41/~tNl;28d2-bf93/~tND;ed3e-17fa/tyf, PASS, wireless EthernetMac -/examples/ipv6/mipv6roaming/, -f omnetpp.ini -c Roaming -r 0, 70s, 123e-b941/tplx;4e91-d6bb/~tNl;0064-ad46/~tND;afae-2b3c/tyf, PASS, wireless EthernetMac -/examples/ipv6/pmipv6/, -f omnetpp.ini -c General -r 0, 60s, 8bf1-01f5/tplx;c5d4-bce4/~tNl;3228-a825/~tND;0277-d784/tyf, PASS, wireless EthernetMac +/examples/ipv6/mipv6/, -f omnetpp.ini -c Handover -r 0, 70s, 40da-712f/tplx;a44c-17bf/~tNl;b25a-96c2/~tND;44ef-1a45/tyf, PASS, wireless EthernetMac +/examples/ipv6/mipv6/, -f omnetpp.ini -c RouteOptimizationTwoCNs -r 0, 60s, 04c8-ea00/tplx;e6db-28c0/~tNl;1b44-dabf/~tND;ed3e-17fa/tyf, PASS, wireless EthernetMac +/examples/ipv6/mipv6roaming/, -f omnetpp.ini -c Roaming -r 0, 70s, 9a69-122e/tplx;28ce-974e/~tNl;261c-bbb8/~tND;afae-2b3c/tyf, PASS, wireless EthernetMac +/examples/ipv6/pmipv6/, -f omnetpp.ini -c General -r 0, 60s, 8e0a-8bc5/tplx;1064-9bd4/~tNl;c22c-d7f1/~tND;0277-d784/tyf, PASS, wireless EthernetMac /examples/mobility/, -f omnetpp.ini -c AnsimMobility -r 0, 10000s, 72f8-5c0b/tplx;0000-0000/~tNl;0000-0000/~tND;7dd1-18eb/tyf, PASS, /examples/mobility, -f omnetpp.ini -c AttachedMobility, 10s, 566c-6355/tplx;0000-0000/~tNl;0000-0000/~tND;fa92-f68c/tyf, PASS, @@ -573,7 +573,7 @@ /examples/wireless/filtering/, -f omnetpp.ini -c ListeningFilter -r 0, 100s, 946b-6f7f/tplx;e5d7-0ef7/~tNl;fc55-a160/~tND;17b4-4f41/tyf, PASS, Ipv4 /examples/wireless/filtering/, -f omnetpp.ini -c MacAddressFilter -r 0, 100s, d2d8-8182/tplx;d14e-6ff1/~tNl;1e5f-e0e5/~tND;1853-1300/tyf, PASS, Ipv4 -/examples/wireless/handover/, -f omnetpp.ini -c General -r 0, 1500s, eee3-0da3/tplx;baf5-5f0e/~tNl;1172-7007/~tND;c710-ff2e/tyf, PASS, wireless +/examples/wireless/handover/, -f omnetpp.ini -c General -r 0, 1500s, ccea-d0cd/tplx;7bfd-9fb3/~tNl;cb3d-a776/~tND;c710-ff2e/tyf, PASS, wireless /examples/wireless/hiddennode/, -f omnetpp.ini -c General -r 0, 5s, 8383-735e/tplx;8e4d-20ee/~tNl;1298-9ea7/~tND;af51-7b12/tyf, PASS, wireless @@ -654,11 +654,11 @@ /examples/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 6fae-d558/tplx;b8ea-b2fc/~tNl;7a95-cf35/~tND, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, f252-8a4b/tplx;481d-4747/~tNl;713b-1d7f/~tND;6097-a429/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 31b0-6212/tplx;82ec-9fde/~tNl;4042-8007/~tND;9f3c-4512/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithoutAggregation -r 0, 10s, acd6-0108/tplx;b339-294a/~tNl;8ead-af05/~tND;a4c3-19bf/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithRtsCts -r 0, 10s, 9ece-fbfb/tplx;c1af-29ff/~tNl;0b19-cdb3/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, d094-b008/tplx;173a-e3fb/~tNl;92f3-e87f/~tND;08b5-d005/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, 16b2-6f72/tplx;5eb9-6cea/~tNl;8ba8-df6e/~tND;6097-a429/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 0adf-0909/tplx;6188-6ffd/~tNl;7e19-5357/~tND;9f3c-4512/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithoutAggregation -r 0, 10s, 38e1-6afa/tplx;78d2-bb9a/~tNl;1956-a58c/~tND;a4c3-19bf/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithRtsCts -r 0, 10s, 2992-5bcb/tplx;7c57-849b/~tNl;55c3-c1ca/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, 83a2-4aad/tplx;a8c3-d9fe/~tNl;31bf-62c0/~tND;08b5-d005/tyf, PASS, wireless Ipv4 /examples/wireless/ratecontrol/, -f omnetpp.ini -c Mac -r 0, 100s, bf30-2f13/tplx;7b2f-653d/~tNl;6e1e-3b7b/~tND;19fe-8b0e/tyf, PASS, wireless @@ -678,4 +678,4 @@ /examples/wireless/throughput/, -f omnetpp.ini -c Throughput1 -r 0, 20s, a4d8-abf4/tplx;f424-9aaf/~tNl;24fe-19e3/~tND;bb2f-ec63/tyf, PASS, wireless /examples/wireless/throughput/, -f omnetpp.ini -c Throughput2 -r 0, 10s, 3b2b-5123/tplx;0009-ca8c/~tNl;a4a2-725a/~tND;032e-0333/tyf, PASS, wireless -/examples/wireless/wiredandwirelesshostswithap/, -f omnetpp.ini -c General -r 0, 100s, af04-d760/tplx;95c2-6625/~tNl;5286-7eac/~tND;b4df-273e/tyf, PASS, wireless EthernetMac Ipv4 +/examples/wireless/wiredandwirelesshostswithap/, -f omnetpp.ini -c General -r 0, 100s, 27e0-17f3/tplx;13cb-5046/~tNl;5add-7e09/~tND;b4df-273e/tyf, PASS, wireless EthernetMac Ipv4 diff --git a/tests/fingerprint/showcases.csv b/tests/fingerprint/showcases.csv index cb9f4c433c0..afa09652796 100644 --- a/tests/fingerprint/showcases.csv +++ b/tests/fingerprint/showcases.csv @@ -122,10 +122,10 @@ /showcases/visualizer/osg/environment/, -f omnetpp.ini -c DefaultView -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, # DefaultView extended /showcases/visualizer/osg/environment/, -f omnetpp.ini -c IsometricView -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c OneNetwork -r 0, 5s, d8ed-768c/tplx;4c02-603f/~tNl;9845-7561/~tND;9c21-dd33/tyf, PASS, wireless -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c MultipleNetworks -r 0, 5s, 5f98-cd05/tplx;704f-4817/~tNl;ea00-6f59/~tND;3be5-9494/tyf, PASS, wireless -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c VisualizingHandover -r 0, 250s, 0f01-f016/tplx;6ded-d407/~tNl;e767-6a0b/~tND;07bb-3973/tyf, PASS, wireless -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c SignalLevels -r 0, 100s, 8782-6f1c/tplx;7a73-4da5/~tNl;44c3-92df/~tND;c099-e5c5/tyf, PASS, Ipv4 +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c OneNetwork -r 0, 5s, ebc6-6029/tplx;c427-dece/~tNl;bad5-c15b/~tND;9c21-dd33/tyf, PASS, wireless +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c MultipleNetworks -r 0, 5s, c569-d311/tplx;3c17-6ee0/~tNl;c9dc-27c6/~tND;3be5-9494/tyf, PASS, wireless +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c VisualizingHandover -r 0, 250s, 9c90-dba8/tplx;2f60-762d/~tNl;bbd8-1256/~tND;07bb-3973/tyf, PASS, wireless +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c SignalLevels -r 0, 100s, 4951-b23d/tplx;cec5-d464/~tNl;8570-13a4/~tND;c099-e5c5/tyf, PASS, Ipv4 /showcases/visualizer/canvas/submoduleinfo/, -f omnetpp.ini -c PacketCounts -r 0, 5s, 271c-6821/tplx;3c0c-db82/~tNl;8315-9723/~tND;b145-6576/tyf, PASS, wireless Ipv4 # VisualizingSubmoduleInformation extended /showcases/visualizer/canvas/submoduleinfo/, -f omnetpp.ini -c MACStates -r 0, 5s, 271c-6821/tplx;3c0c-db82/~tNl;8315-9723/~tND;4677-fc97/tyf, PASS, wireless Ipv4 @@ -133,7 +133,7 @@ /showcases/visualizer/canvas/instrumentfigures/, -f omnetpp.ini -c General -r 0, 3s, 6622-adb9/tplx;28ca-9f8c/~tNl;85f0-a9c3/~tND;4266-0d42/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/interfacetable/, -f omnetpp.ini -c EnablingVisualization -r 0, 5s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/showcases/visualizer/canvas/interfacetable/, -f omnetpp.ini -c AdvancedFeatures -r 0, 5s, dfdf-7e0e/tplx;7bfc-e297/~tNl;13ea-233d/~tND;b2d8-b329/tyf, PASS, wireless EthernetMac Ipv4 +/showcases/visualizer/canvas/interfacetable/, -f omnetpp.ini -c AdvancedFeatures -r 0, 5s, b83e-ac7f/tplx;ca8c-8410/~tNl;3ff0-79e4/~tND;b2d8-b329/tyf, PASS, wireless EthernetMac Ipv4 /showcases/visualizer/canvas/mobility/, -f omnetpp.ini -c VisualizingFeatures -r 0, 500s, 54a1-0f8d/tplx;0000-0000/~tNl;0000-0000/~tND;df51-b287/tyf, PASS, wireless @@ -146,21 +146,21 @@ /showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c EnablingVisualization -r 0, 500s, 456d-1982/tplx;bd58-e496/~tNl;1b76-9a17/~tND;4b2b-9088/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c StaticNetworkPaths -r 0, 500s, 5995-953f/tplx;cfc6-5083/~tNl;aa2b-919c/~tND;a8ff-b27d/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c Mobile -r 0, 500s, cbb7-c036/tplx;fdcd-ce11/~tNl;5463-67a1/~tND, PASS, wireless Ipv4 -/showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c ChangingPaths -r 0, 250s, 94b6-d4ca/tplx;e466-c6f7/~tNl;d1ba-9ee7/~tND;eade-62dc/tyf, PASS, EthernetMac Ipv4 +/showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c ChangingPaths -r 0, 250s, 3e0a-798d/tplx;47ff-ba81/~tNl;a551-c86e/~tND;eade-62dc/tyf, PASS, EthernetMac Ipv4 # /showcases/visualizer/canvas/obstacleloss/, -f omnetpp.ini -c EnablingVisualization -r 0, 250s, 2410-572d/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, wireless # /showcases/visualizer/canvas/obstacleloss/, -f omnetpp.ini -c MultipleObstacles -r 0, 500s, 89ca-0f0a/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, wireless # /showcases/visualizer/osg/osgdemo/, -f omnetpp.ini -c General -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, ERROR, -/showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c QueueOverflow -r 0, 2002ms, 835e-80ed/tplx;1858-ad28/~tNl;9562-a835/~tND;dee8-a7c2/tyf, PASS, wireless EthernetMac Ipv4 +/showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c QueueOverflow -r 0, 2002ms, 14d8-752e/tplx;0fde-9533/~tNl;b7f3-a26d/~tND;dee8-a7c2/tyf, PASS, wireless EthernetMac Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c ArpResolutionFailed -r 0, 500s, 9069-cca6/tplx;0000-0000/~tNl;0000-0000/~tND;db3b-e3e4/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c MACRetryLimitReached -r 0, 500s, 1f7a-e5f3/tplx;14cf-73d2/~tNl;c7ba-ef52/~tND;24ba-9fa9/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c InterfaceNotConnected -r 0, 500s, 280f-b030/tplx;0000-0000/~tNl;0000-0000/~tND;5f21-3687/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c NoRouteToDestination -r 0, 500s, 4c38-3589/tplx;0000-0000/~tNl;0000-0000/~tND;2ad2-161b/tyf, PASS, Ipv4 /showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c EnablingVisualization -r 0, 500s, a1da-0032/tplx;bde3-9c6e/~tNl;de93-cd82/~tND;25e0-5171/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Filtering -r 0, 250s, b91f-f443/tplx;310a-f092/~tNl;1237-aee0/~tND;5e9e-c6c7/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Filtering -r 0, 250s, 7ef9-76c6/tplx;3a21-efc6/~tNl;0eec-b4ad/~tND;5e9e-c6c7/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Mobile -r 0, 500s, a437-919f/tplx;03cf-d1b8/~tNl;f5ff-0d7f/~tND;7bf9-d50f/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/radiomediumactivity/, -f omnetpp.ini -c DisplayingSignalsTransmissionsReceptions -r 0, 500s, 771b-bffb/tplx;ca1b-c59c/~tNl;4ebb-fab0/~tND, PASS, wireless # unfinished @@ -182,7 +182,7 @@ /showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Line -r 0, 25s, cb1d-a154/tplx;a565-1a98/~tNl;ee1b-5f7a/~tND;7b44-2fb8/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Font -r 0, 25s, cb1d-a154/tplx;a565-1a98/~tNl;ee1b-5f7a/~tND;5e90-6a92/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Icon -r 0, 25s, 9218-0d5b/tplx;1a94-46a8/~tNl;530b-257e/~tND;62e8-28b7/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Annotation -r 0, 25s, 9349-7ae5/tplx;5207-a7b7/~tNl;c86d-dfcf/~tND;342b-0033/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Annotation -r 0, 25s, 8015-56a9/tplx;8f8e-db57/~tNl;8912-a7d2/~tND;342b-0033/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/transportconnection/, -f omnetpp.ini -c EnablingVisualization -r 0, 2s, fc86-91c1/tplx;817d-6638/~tNl;b2d4-0aff/~tND;d5f4-f615/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/transportconnection/, -f omnetpp.ini -c MultipleConnections -r 0, 2s, 511a-236b/tplx;0bd4-4f1e/~tNl;050f-8d69/~tND;1584-363d/tyf, PASS, EthernetMac Ipv4 @@ -269,7 +269,7 @@ /showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfrag -r 0, 1s, f7a5-cf0a/tplx;a24a-a070/~tNl;5dae-0b8e/~tND;335d-6687/tyf, PASS, wireless Ipv4 /showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfragblockack -r 0, 1s, 0702-c692/tplx;1bf9-b035/~tNl;a51c-9f3d/~tND;6f6e-b101/tyf, PASS, wireless Ipv4 -/showcases/wireless/handover/, -f omnetpp.ini -c General -r 0, 250s, b287-6940/tplx;45c3-a292/~tNl;9f9a-88ce/~tND;02e9-9ad3/tyf, PASS, wireless +/showcases/wireless/handover/, -f omnetpp.ini -c General -r 0, 250s, 2adb-31c2/tplx;bcc9-11d2/~tNl;7e6b-9475/~tND;02e9-9ad3/tyf, PASS, wireless /showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOnRtsOff -r 0, 5s, 7912-bed4/tplx;c1e8-3622/~tNl;9b60-a38b/~tND;d824-8757/tyf, PASS, wireless Ipv4 /showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOnRtsOn -r 0, 5s, 321b-f7f2/tplx;75e5-07b7/~tNl;4c45-33b3/~tND;35cb-1d85/tyf, PASS, wireless Ipv4 @@ -307,14 +307,14 @@ # /showcases/wireless/levelofdetail/, -f omnetpp.ini -c General -r '$detail=="bit" && $modulation=="QAM-64" && $fecType=="" && $distance==225', 100s, 7794-9306/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, wireless # /showcases/wireless/levelofdetail/, -f omnetpp.ini -c General -r '$detail=="symbol" && $modulation=="QAM-64" && $fecType=="" && $distance==125', 100s, 54ce-ce35/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, wireless -/showcases/wireless/multiradio/, -f omnetpp.ini -c General -r 0, 100s, 6f2f-9b0b/tplx;6b4f-f8fd/~tNl;338d-ba9d/~tND;92c1-ccc2/tyf, PASS, wireless Ipv4 +/showcases/wireless/multiradio/, -f omnetpp.ini -c General -r 0, 100s, 548b-38d9/tplx;9a9e-aa20/~tNl;3ab2-d934/~tND;92c1-ccc2/tyf, PASS, wireless Ipv4 /showcases/wireless/pathloss/, -f omnetpp.ini -c General -r 0, 100s, 171a-e6eb/tplx;3466-822d/~tNl;5909-6e87/~tND;929d-03d5/tyf, PASS, wireless Ipv4 /showcases/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 498f-b665/tplx;6f50-5caf/~tNl;1403-6fb2/~tND, PASS, wireless Ipv4 -/showcases/wireless/qos/, -f omnetpp.ini -c NonQos -r 0, 10s, 37fd-5401/tplx;92f7-198c/~tNl;2fa3-9994/~tND;093e-1ca4/tyf, PASS, wireless Ipv4 -/showcases/wireless/qos/, -f omnetpp.ini -c Qos -r 0, 10s, 1a49-72b3/tplx;e605-d79d/~tNl;25f0-9c73/~tND;bda9-15d1/tyf, PASS, wireless Ipv4 +/showcases/wireless/qos/, -f omnetpp.ini -c NonQos -r 0, 10s, 0287-c5f4/tplx;9c39-00a3/~tNl;c760-a0f8/~tND;093e-1ca4/tyf, PASS, wireless Ipv4 +/showcases/wireless/qos/, -f omnetpp.ini -c Qos -r 0, 10s, 3574-8b26/tplx;84a6-b893/~tNl;7c6f-3aec/~tND;bda9-15d1/tyf, PASS, wireless Ipv4 /showcases/wireless/ratecontrol/, -f omnetpp.ini -c NoRateControl -r 0, 14s, 7ee9-503a/tplx;0816-e58f/~tNl;ec30-e32d/~tND;dad3-7f89/tyf, PASS, wireless Ipv4 /showcases/wireless/ratecontrol/, -f omnetpp.ini -c AarfRateControl -r 0, 12s, a7bc-05bb/tplx;9de0-4dd3/~tNl;de90-6575/~tND;7539-d32d/tyf, PASS, wireless Ipv4 diff --git a/tests/fingerprint/tutorials.csv b/tests/fingerprint/tutorials.csv index d8f391cfc9c..ce86e2ef665 100644 --- a/tests/fingerprint/tutorials.csv +++ b/tests/fingerprint/tutorials.csv @@ -10,15 +10,15 @@ /tutorials/configurator/, -f omnetpp.ini -c Step7A -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /tutorials/configurator/, -f omnetpp.ini -c Step7B -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /tutorials/configurator/, -f omnetpp.ini -c Step7C -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/tutorials/configurator/, -f omnetpp.ini -c Step8A -r 0, 100s, f99c-9e43/tplx;e810-af2b/~tNl;0b8c-ee21/~tND;d3f3-ed4c/tyf, PASS, wireless EthernetMac Ipv4 # Step8A extended -/tutorials/configurator/, -f omnetpp.ini -c Step8B -r 0, 100s, 6daa-17f7/tplx;e810-af2b/~tNl;f7fb-93ca/~tND;af16-1150/tyf, PASS, wireless EthernetMac Ipv4 -/tutorials/configurator/, -f omnetpp.ini -c Step9 -r 0, 100s, 7f72-228e/tplx;44d7-fbf3/~tNl;74e2-2326/~tND;c38c-98ef/tyf, PASS, wireless EthernetMac Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step8A -r 0, 100s, 728f-9b8a/tplx;12a6-f004/~tNl;1e48-5ef0/~tND;d3f3-ed4c/tyf, PASS, wireless EthernetMac Ipv4 # Step8A extended +/tutorials/configurator/, -f omnetpp.ini -c Step8B -r 0, 100s, da99-56af/tplx;12a6-f004/~tNl;7715-8cdc/~tND;af16-1150/tyf, PASS, wireless EthernetMac Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step9 -r 0, 100s, af60-f8a0/tplx;13d8-880d/~tNl;0fc2-aaaa/~tND;c38c-98ef/tyf, PASS, wireless EthernetMac Ipv4 /tutorials/configurator/, -f omnetpp.ini -c Step10A -r 0, 100s, 4b6f-7cd9/tplx;0000-0000/~tNl;0000-0000/~tND;095d-75bd/tyf, PASS, wireless # Step10A extended /tutorials/configurator/, -f omnetpp.ini -c Step10B -r 0, 100s, 4b6f-7cd9/tplx;0000-0000/~tNl;0000-0000/~tND;4d60-fcf9/tyf, PASS, wireless # Step10B extended /tutorials/configurator/, -f omnetpp.ini -c Step10C -r 0, 100s, 71f5-b341/tplx;4a61-20ba/~tNl;707b-bb40/~tND;f078-56fe/tyf, PASS, wireless Ipv4 /tutorials/configurator/, -f omnetpp.ini -c Step11A -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /tutorials/configurator/, -f omnetpp.ini -c Step11B -r 0, 500s, 49cf-d241/tplx;725c-f075/~tNl;15a3-3f79/~tND;7082-ff49/tyf, PASS, EthernetMac Ipv4 -/tutorials/configurator/, -f omnetpp.ini -c Step12 -r 0, 100s, a186-bbc1/tplx;7370-3135/~tNl;455c-1bbd/~tND;4b03-e5a1/tyf, PASS, wireless EthernetMac Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step12 -r 0, 100s, 0b02-3ec4/tplx;d302-92c4/~tNl;b80a-2148/~tND;4b03-e5a1/tyf, PASS, wireless EthernetMac Ipv4 /tutorials/rip/, -f omnetpp.ini -c Step1 -r 0, 100s, 2c94-a8bb/tplx;b4e0-1e61/~tNl;4bd3-4530/~tND;1e4a-2625/tyf, PASS, /tutorials/rip/, -f omnetpp.ini -c Step2 -r 0, 100s, 6019-f318/tplx;9372-788f/~tNl;dec7-8e56/~tND;a345-d423/tyf, PASS, # Step2 extended diff --git a/tests/module/Ieee80211BeaconSchedule_1.test b/tests/module/Ieee80211BeaconSchedule_1.test new file mode 100644 index 00000000000..c35a7b4ca92 --- /dev/null +++ b/tests/module/Ieee80211BeaconSchedule_1.test @@ -0,0 +1,147 @@ +%description: +Verify real AP target spacing and advertised Beacon/Probe Response intervals. + +%file: TestBeaconSchedule.cc +#include "inet/common/packet/Packet.h" +#include "inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Transmitter.h" + +using namespace inet; +using namespace inet::ieee80211; + +namespace Ieee80211BeaconSchedule_1 { +class TestMgmtAp : public Ieee80211MgmtAp +{ + public: + using Ieee80211MgmtApBase::getHtOperationBand; + std::vector targets; + Ptr lastBeacon; + Ptr lastProbe; + + void requestProbe() + { + Enter_Method("requestProbe"); + auto request = makeShared(); + request->setSSID(""); + Ieee80211SupportedRatesElement rates; + rates.numRates = 1; + rates.rate[0] = 1; + request->setSupportedRates(rates); + request->setChunkLength(B(5)); + auto packet = new Packet("probe", request); + auto header = makeShared(); + header->setTransmitterAddress(MacAddress("02:00:00:00:00:99")); + handleProbeRequestFrame(packet, header); + } + + protected: + virtual void sendManagementFrame(const char *name, const Ptr& body, + int subtype, const MacAddress& destination, uint64_t transactionId = 0) override + { + if (subtype == ST_BEACON) { + targets.push_back(simTime()); + lastBeacon = dynamicPtrCast(body); + } + else if (subtype == ST_PROBERESPONSE) + lastProbe = dynamicPtrCast(body); + Ieee80211MgmtAp::sendManagementFrame(name, body, subtype, destination, transactionId); + } +}; +Define_Module(TestMgmtAp); +} + +namespace Ieee80211BeaconSchedule_1 { +class TestBeaconSchedule : public cSimpleModule +{ + public: + TestBeaconSchedule() : cSimpleModule(65536) {} + + protected: + void activity() override; +}; +Define_Module(TestBeaconSchedule); + +void TestBeaconSchedule::activity() +{ + wait(0.35); + for (const char *name : {"ap24", "ap5", "apn"}) { + auto path = std::string(name) + ".wlan[0].mgmt"; + auto ap = check_and_cast(cSimulation::getActiveSimulation()->getModuleByPath(path.c_str())); + bool band24 = strcmp(name, "ap5") != 0; + auto interval = SimTime(band24 ? 99328 : 102400, SIMTIME_US); + ASSERT(ap->targets.size() >= 3); + for (size_t i = 1; i < ap->targets.size(); i++) + ASSERT(ap->targets[i] - ap->targets[i - 1] == interval); + wait(0.001); // independent probe requests must not force simultaneous transmissions + ap->requestProbe(); + for (const auto& body : {ap->lastBeacon, ap->lastProbe}) { + ASSERT(body != nullptr); + ASSERT(body->getBeaconInterval() == interval); + if (strcmp(name, "apn") == 0) { + ASSERT(body->getHtOperationPresent()); + } + Packet packet("body", body); + auto bytes = packet.peekDataAsBytes()->getBytes(); + ASSERT(bytes.size() == body->getChunkLength().get()); + ASSERT(bytes[8] == (band24 ? 97 : 100) && bytes[9] == 0); + } + } + EV << "AP beacon targets and interval advertisements verified.\n"; + +} +} // namespace Ieee80211BeaconSchedule_1 + +%file: TestNetwork.ned +import inet.linklayer.ieee80211.mgmt.Ieee80211MgmtAp; +import inet.node.wireless.AccessPoint; +import inet.physicallayer.wireless.ieee80211.packetlevel.Ieee80211ScalarRadioMedium; +import inet.physicallayer.wireless.ieee80211.packetlevel.Ieee80211ScalarRadio; + +simple TestMgmtAp extends Ieee80211MgmtAp +{ + parameters: + @class(TestMgmtAp); +} + +simple TestBeaconSchedule +{ + parameters: + @class(TestBeaconSchedule); +} + +network TestNetwork +{ + submodules: + test: TestBeaconSchedule; + radioMedium: Ieee80211ScalarRadioMedium; + ap24: AccessPoint; + ap5: AccessPoint; + apn: AccessPoint; +} + +%inifile: omnetpp.ini +[General] +ned-path = .;../../../../src;../../lib +network = TestNetwork +seed-set = 0 +sim-time-limit = 0.36s +**.wlan[*].mgmt.typename = "TestMgmtAp" +**.wlan[*].mgmt.ssid = "test" +*.ap24.wlan[*].opMode = "g(mixed)" +*.ap24.wlan[*].radio.bandName = "2.4 GHz" +*.ap24.wlan[*].radio.channelNumber = 0 +*.ap24.wlan[*].mgmt.beaconInterval = 100ms +*.ap5.wlan[*].opMode = "a" +*.ap5.wlan[*].radio.bandName = "5 GHz" +*.ap5.wlan[*].radio.channelNumber = 0 +*.ap5.wlan[*].mgmt.beaconInterval = 102400us +*.apn.wlan[*].opMode = "n(mixed-2.4Ghz)" +*.apn.wlan[*].radio.channelNumber = 0 +**.mobility.initialX = 0m +**.mobility.initialY = 0m +**.mobility.initialZ = 0m +**.mobility.initFromDisplayString = false + +%contains: stdout +AP beacon targets and interval advertisements verified. diff --git a/tests/module/Ieee80211MgmtApUnavailableChannel_1.test b/tests/module/Ieee80211MgmtApUnavailableChannel_1.test index 5db13b43fb1..be8602d35b6 100644 --- a/tests/module/Ieee80211MgmtApUnavailableChannel_1.test +++ b/tests/module/Ieee80211MgmtApUnavailableChannel_1.test @@ -27,7 +27,7 @@ record-vector-results = false record-scalar-results = false *.ap.wlan[0].radio.channelNumber = -1 -*.ap.wlan[0].mgmt.beaconInterval = 1us +*.ap.wlan[0].mgmt.beaconInterval = 1024us **.wlan[0].opMode = "n(mixed-2.4Ghz)" **.wlan[0].bitrate = 65Mbps **.wlan[0].radio.bandName = "2.4 GHz" diff --git a/tests/unit/Ieee80211BeaconWire_1.test b/tests/unit/Ieee80211BeaconWire_1.test index bf03ebf0e43..4d044ee0f35 100644 --- a/tests/unit/Ieee80211BeaconWire_1.test +++ b/tests/unit/Ieee80211BeaconWire_1.test @@ -1,23 +1,78 @@ %description: -Check the mesh no-forwarding-information reason code on wire. +Check beacon interval bounds, Beacon/Probe Response interval bytes, and mesh reason code 62. %includes: #include "inet/common/packet/Packet.h" #include "inet/common/packet/chunk/BytesChunk.h" +#include "inet/linklayer/ieee80211/mgmt/Ieee80211BeaconInterval.h" #include "inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame_m.h" %global: using namespace inet; using namespace inet::ieee80211; +static Ptr decode(bool probe, const std::vector& bytes) +{ + Packet packet("external", makeShared(bytes)); + int flags = Chunk::PF_ALLOW_INCORRECT | Chunk::PF_ALLOW_INCOMPLETE; + return probe ? staticPtrCast(packet.peekAtFront(B(bytes.size()), flags)) : + packet.peekAtFront(B(bytes.size()), flags); +} + %activity: +ASSERT(normalizeIeee80211BeaconInterval(SimTime(100, SIMTIME_MS)) == SimTime(99328, SIMTIME_US)); +for (int tus : {1, 100, 65535}) { + auto aligned = SimTime(int64_t(tus) * 1024, SIMTIME_US); + ASSERT(normalizeIeee80211BeaconInterval(aligned) == aligned); +} +for (auto invalid : {SIMTIME_ZERO, SimTime(-1, SIMTIME_MS), SimTime(1023, SIMTIME_US), SimTime(67107841, SIMTIME_US)}) { + bool rejected = false; + try { normalizeIeee80211BeaconInterval(invalid); } + catch (const cRuntimeError&) { rejected = true; } + ASSERT(rejected); +} + +for (bool probe : {false, true}) { + for (auto invalid : {SIMTIME_ZERO, SimTime(-1, SIMTIME_MS), SimTime(1023, SIMTIME_US), SimTime(67107841, SIMTIME_US)}) { + Ptr frame = probe ? staticPtrCast(makeShared()) : makeShared(); + // Leave zero at its construction default to cover an unset interval. + if (invalid != SIMTIME_ZERO) + frame->setBeaconInterval(invalid); + frame->setChunkLength(B(17)); + Packet packet("invalid-beacon-interval", frame); + bool rejected = false; + try { packet.peekDataAsBytes(); } + catch (const cRuntimeError& error) { + rejected = std::string(error.what()).find("Beacon interval must be between 1 and 65535 TUs") != std::string::npos; + } + ASSERT(rejected); + } + // Timestamp=0, Interval=97 TU, Capability=0, SSID="", Supported Rate=1 Mbps. + const std::vector prefix = {0,0,0,0,0,0,0,0,97,0,0,0,0,0,1,1,2}; + { + Ptr frame = probe ? staticPtrCast(makeShared()) : makeShared(); + frame->setSSID(""); + frame->setBeaconInterval(normalizeIeee80211BeaconInterval(SimTime(100, SIMTIME_MS))); + Ieee80211SupportedRatesElement rates; + rates.numRates = 1; + rates.rate[0] = 1; + frame->setSupportedRates(rates); + auto expected = prefix; + frame->setChunkLength(B(expected.size())); + Packet packet("beacon", frame); + ASSERT(packet.peekDataAsBytes()->getBytes() == expected); + auto decoded = decode(probe, expected); + ASSERT(decoded->isCorrect()); + ASSERT(decoded->getBeaconInterval() == SimTime(99328, SIMTIME_US)); + } +} ASSERT(RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION == 62); auto reason = makeShared(); reason->setReasonCode(RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION); reason->setChunkLength(B(2)); Packet reasonPacket("reason", reason); ASSERT(reasonPacket.peekDataAsBytes()->getBytes() == std::vector({62, 0})); -EV << "Mesh reason wire checks passed.\n"; +EV << "Beacon interval and mesh reason wire checks passed.\n"; %contains: stdout -Mesh reason wire checks passed. +Beacon interval and mesh reason wire checks passed. diff --git a/tests/unit/Ieee80211HtMgmtElements_1.test b/tests/unit/Ieee80211HtMgmtElements_1.test index 6bde7a319d2..e8ec807b18c 100644 --- a/tests/unit/Ieee80211HtMgmtElements_1.test +++ b/tests/unit/Ieee80211HtMgmtElements_1.test @@ -273,6 +273,7 @@ ASSERT(allowedProbeRequestPacket.peekAllAsBytes()->getChunkLength() == B(34)); for (bool probeResponse : {false, true}) { Ptr discovery = probeResponse ? staticPtrCast(makeShared()) : makeShared(); discovery->setSSID(""); + discovery->setBeaconInterval(SimTime(102400, SIMTIME_US)); discovery->setSupportedRates(original->getSupportedRates()); discovery->setHtCapabilitiesPresent(true); discovery->setHtCapabilities(original->getHtCapabilities()); From b91685bea998e6d43ceebcdfd932359dc5b2c6e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Gonz=C3=A1lez=20L=C3=B3pez?= Date: Mon, 14 Sep 2026 13:25:36 +0200 Subject: [PATCH 8/9] ieee80211: publish consistent radio channel observations AP management needs the band and channel as a consistent radio observation, without accessing a concrete transmitter. Publish immutable band details during initialization and runtime changes. Give transmitter and receiver separate owned channel objects so later band changes cannot free a shared object twice. Verify preconfigured radios, synchronous detail lifetime, unavailable channels and runtime HT updates. The 158 explicitly selected legacy fingerprint cases pass in debug mode. This commit changes 0 selected rows: 0 with trajectory changes and 0 with serialized-byte changes. Record only measured causal differences; preserve graphical expectations and unselected entries. Attribution and per-case deltas are in ai-logs/executions/2026-09-14_pr1189-cleanup/. Validation: incremental debug build, directly related tests and scoped opp_repl controls passed. --- .../ieee80211/mgmt/Ieee80211MgmtApBase.cc | 30 ++++----- .../ieee80211/mgmt/Ieee80211MgmtApBase.h | 1 + .../ieee80211/packetlevel/Ieee80211Radio.cc | 23 +++++-- .../ieee80211/packetlevel/Ieee80211Radio.h | 6 +- .../ieee80211/packetlevel/Ieee80211Radio.ned | 2 +- .../Ieee80211RadioChannelChangedDetails.h | 33 ++++++++++ tests/module/Ieee80211BeaconSchedule_1.test | 61 ++++++++++++++++++- .../Ieee80211MgmtApChannelChange_1.test | 4 +- .../Ieee80211MgmtApUnavailableChannel_1.test | 2 +- 9 files changed, 134 insertions(+), 28 deletions(-) create mode 100644 src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211RadioChannelChangedDetails.h diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.cc b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.cc index 329f439ccc0..170bf3de776 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.cc +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.cc @@ -16,9 +16,8 @@ #endif // ifdef INET_WITH_ETHERNET #include "inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h" -#include "inet/physicallayer/wireless/common/contract/packetlevel/IRadio.h" -#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Transmitter.h" -#include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211Channel.h" +#include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211Band.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211RadioChannelChangedDetails.h" namespace inet { @@ -58,27 +57,24 @@ void Ieee80211MgmtApBase::receiveSignal(cComponent *source, simsignal_t signalID if (source == radio && signalID == ieee80211RadioChannelChangedSignal) { EV << "Updating AP primary channel to " << value << ".\n"; - if (mib->isHtOperationSupported()) - mib->setPrimaryChannel(value, getHtOperationBand()); + const auto *channelDetails = dynamic_cast(details); + const auto *band = channelDetails == nullptr ? nullptr : channelDetails->getBand(); + if (mib->isHtOperationSupported()) { + if (band == nullptr) + throw cRuntimeError("HT Operation channel conversion requires radioChannelChanged with IEEE 802.11 band details"); + mib->setPrimaryChannel(value, band); + } else mib->setPrimaryChannel(value); + radioBand = band; } } const physicallayer::IIeee80211Band *Ieee80211MgmtApBase::getHtOperationBand() const { - if (radio == nullptr) - throw cRuntimeError("HT Operation channel conversion requires a configured radioModule"); - const auto *radioContract = dynamic_cast(radio); - if (radioContract == nullptr) - throw cRuntimeError("HT Operation channel conversion requires radioModule to reference a radio, got %s", radio->getClassName()); - const auto *transmitter = dynamic_cast(radioContract->getTransmitter()); - if (transmitter == nullptr) - throw cRuntimeError("HT Operation channel conversion requires radioModule's transmitter to provide an IEEE 802.11 channel"); - const auto *channel = transmitter->getChannel(); - if (channel == nullptr || channel->getBand() == nullptr) - throw cRuntimeError("HT Operation channel conversion requires radioModule's IEEE 802.11 transmitter to have a configured channel and band"); - return channel->getBand(); + if (radioBand == nullptr) + throw cRuntimeError("HT Operation channel conversion requires radioChannelChanged with IEEE 802.11 band details"); + return radioBand; } } // namespace ieee80211 diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h index 13effaf6736..5baf33b6ada 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h @@ -31,6 +31,7 @@ class INET_API Ieee80211MgmtApBase : public Ieee80211MgmtBase { protected: cModule *radio = nullptr; + const physicallayer::IIeee80211Band *radioBand = nullptr; // Immutable band observed via radioChannelChanged const physicallayer::IIeee80211Band *getHtOperationBand() const; diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc index d43fdfe149c..000551f3cfa 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.cc @@ -6,6 +6,7 @@ #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211RadioChannelChangedDetails.h" #include "inet/common/packet/chunk/BitCountChunk.h" #include "inet/common/ProtocolTag_m.h" @@ -50,6 +51,14 @@ void Ieee80211Radio::initialize(int stage) int channelNumber = par("channelNumber"); if (channelNumber != -1) setChannelNumber(channelNumber); + else { + // Publish a channel configured directly on the transmitter as well. + const auto *channel = check_and_cast(transmitter)->getChannel(); + if (channel != nullptr) { + Ieee80211RadioChannelChangedDetails details(channel->getBand()); + emit(radioChannelChangedSignal, channel->getChannelNumber(), &details); + } + } } } @@ -110,8 +119,10 @@ void Ieee80211Radio::setBand(const IIeee80211Band *band) EV << "Changing radio band to " << band << endl; receptionTimer = nullptr; const auto *channel = ieee80211Transmitter->getChannel(); - if (channel != nullptr) - emit(radioChannelChangedSignal, channel->getChannelNumber()); + if (channel != nullptr) { + Ieee80211RadioChannelChangedDetails details(channel->getBand()); + emit(radioChannelChangedSignal, channel->getChannelNumber(), &details); + } emit(listeningChangedSignal, 0); } @@ -122,10 +133,11 @@ void Ieee80211Radio::setChannel(const Ieee80211Channel *channel) Ieee80211Transmitter *ieee80211Transmitter = const_cast(check_and_cast(transmitter)); Ieee80211Receiver *ieee80211Receiver = const_cast(check_and_cast(receiver)); ieee80211Transmitter->setChannel(channel); - ieee80211Receiver->setChannel(channel); + ieee80211Receiver->setChannel(new Ieee80211Channel(channel->getBand(), channel->getChannelNumber())); EV << "Changing radio channel to " << channel->getChannelNumber() << endl; receptionTimer = nullptr; - emit(radioChannelChangedSignal, channel->getChannelNumber()); + Ieee80211RadioChannelChangedDetails details(channel->getBand()); + emit(radioChannelChangedSignal, channel->getChannelNumber(), &details); emit(listeningChangedSignal, 0); } @@ -137,7 +149,8 @@ void Ieee80211Radio::setChannelNumber(int newChannelNumber) ieee80211Receiver->setChannelNumber(newChannelNumber); EV << "Changing radio channel to " << newChannelNumber << ".\n"; receptionTimer = nullptr; - emit(radioChannelChangedSignal, newChannelNumber); + Ieee80211RadioChannelChangedDetails details(ieee80211Transmitter->getChannel()->getBand()); + emit(radioChannelChangedSignal, newChannelNumber, &details); emit(listeningChangedSignal, 0); } diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h index 754091b7311..087703e87f5 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h @@ -22,8 +22,10 @@ class INET_API Ieee80211Radio : public FlatRadioBase { public: /** - * This signal is emitted every time the radio channel changes. - * The signal value is the new radio channel. + * This signal is emitted during physical-layer initialization when a channel + * is configured, and every time the radio channel or band changes. The value + * is the band-local channel index; Ieee80211RadioChannelChangedDetails carries + * the immutable band reference. */ static simsignal_t radioChannelChangedSignal; static const Ptr popIeee80211PhyHeaderAtFront(Packet *packet, b length = b(-1), int flags = 0); diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned index aedc519438d..86b85675aa6 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned @@ -46,6 +46,6 @@ module Ieee80211Radio extends FlatRadioBase *.bandName = this.bandName; *.channelNumber = this.channelNumber; @class(Ieee80211Radio); - @signal[radioChannelChanged](type=long); + @signal[radioChannelChanged](type=long); // Band-local index; Ieee80211RadioChannelChangedDetails carries the band @statistic[radioChannel](title="Radio channel"; source=radioChannelChanged; record=histogram,vector; interpolationmode=sample-hold); } diff --git a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211RadioChannelChangedDetails.h b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211RadioChannelChangedDetails.h new file mode 100644 index 00000000000..85906a7b151 --- /dev/null +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211RadioChannelChangedDetails.h @@ -0,0 +1,33 @@ +// +// SPDX-License-Identifier: LGPL-3.0-or-later +// + +#ifndef __INET_IEEE80211RADIOCHANNELCHANGEDDETAILS_H +#define __INET_IEEE80211RADIOCHANNELCHANGEDDETAILS_H + +#include "inet/common/INETDefs.h" + +namespace inet { +namespace physicallayer { + +class IIeee80211Band; + +/** + * Details for radioChannelChanged; the signal value is the band-local channel + * index. The details object is valid only during notification. The band is + * immutable, externally owned, and must outlive the radio and its listeners. + */ +class INET_API Ieee80211RadioChannelChangedDetails : public cObject +{ + protected: + const IIeee80211Band *band; + + public: + explicit Ieee80211RadioChannelChangedDetails(const IIeee80211Band *band) : band(band) {} + const IIeee80211Band *getBand() const { return band; } +}; + +} // namespace physicallayer +} // namespace inet + +#endif diff --git a/tests/module/Ieee80211BeaconSchedule_1.test b/tests/module/Ieee80211BeaconSchedule_1.test index c35a7b4ca92..74f4552b96c 100644 --- a/tests/module/Ieee80211BeaconSchedule_1.test +++ b/tests/module/Ieee80211BeaconSchedule_1.test @@ -5,12 +5,28 @@ Verify real AP target spacing and advertised Beacon/Probe Response intervals. #include "inet/common/packet/Packet.h" #include "inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211RadioChannelChangedDetails.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Transmitter.h" using namespace inet; using namespace inet::ieee80211; namespace Ieee80211BeaconSchedule_1 { +class TestPreconfiguredRadio : public physicallayer::Ieee80211Radio +{ + protected: + void initialize(int stage) override + { + if (stage == INITSTAGE_PHYSICAL_LAYER) { + // Model a PHY configured independently of the radio parameter. + const_cast(check_and_cast(transmitter))->setChannelNumber(0); + const_cast(check_and_cast(receiver))->setChannelNumber(0); + } + Ieee80211Radio::initialize(stage); + } +}; +Define_Module(TestPreconfiguredRadio); + class TestMgmtAp : public Ieee80211MgmtAp { public: @@ -65,7 +81,7 @@ Define_Module(TestBeaconSchedule); void TestBeaconSchedule::activity() { wait(0.35); - for (const char *name : {"ap24", "ap5", "apn"}) { + for (const char *name : {"ap24", "ap5", "apn", "apb"}) { auto path = std::string(name) + ".wlan[0].mgmt"; auto ap = check_and_cast(cSimulation::getActiveSimulation()->getModuleByPath(path.c_str())); bool band24 = strcmp(name, "ap5") != 0; @@ -87,6 +103,39 @@ void TestBeaconSchedule::activity() ASSERT(bytes[8] == (band24 ? 97 : 100) && bytes[9] == 0); } } + using namespace inet::physicallayer; + auto simulation = cSimulation::getActiveSimulation(); + auto ap = check_and_cast(simulation->getModuleByPath("ap24.wlan[0].mgmt")); + auto radio = check_and_cast(simulation->getModuleByPath("ap24.wlan[0].radio")); + wait(0.001); + radio->setChannelNumber(5); + ap->requestProbe(); + wait(0.001); + radio->setChannel(new Ieee80211Channel(&Ieee80211CompliantBands::band5GHz, 0)); + ASSERT(ap->getHtOperationBand() == &Ieee80211CompliantBands::band5GHz); + ap->requestProbe(); + wait(0.001); + radio->setBand(&Ieee80211CompliantBands::band2_4GHz); + ap->requestProbe(); + + // A legacy notification must invalidate the previous band observation. + radio->emit(Ieee80211Radio::radioChannelChangedSignal, 0L); + bool rejected = false; + try { ap->getHtOperationBand(); } + catch (const cRuntimeError&) { rejected = true; } + ASSERT(rejected); + // Details are consumed synchronously; they do not need to survive emission. + { + Ieee80211RadioChannelChangedDetails details(&Ieee80211CompliantBands::band2_4GHz); + radio->emit(Ieee80211Radio::radioChannelChangedSignal, 0L, &details); + } + + auto htAp = check_and_cast(simulation->getModuleByPath("apn.wlan[0].mgmt")); + auto htRadio = check_and_cast(simulation->getModuleByPath("apn.wlan[0].radio")); + wait(0.001); + htRadio->setChannelNumber(5); + htAp->requestProbe(); + ASSERT(htAp->lastProbe->getHtOperation().primaryChannel == 6); EV << "AP beacon targets and interval advertisements verified.\n"; } @@ -98,6 +147,12 @@ import inet.node.wireless.AccessPoint; import inet.physicallayer.wireless.ieee80211.packetlevel.Ieee80211ScalarRadioMedium; import inet.physicallayer.wireless.ieee80211.packetlevel.Ieee80211ScalarRadio; +module TestPreconfiguredRadio extends Ieee80211ScalarRadio +{ + parameters: + @class(TestPreconfiguredRadio); +} + simple TestMgmtAp extends Ieee80211MgmtAp { parameters: @@ -118,6 +173,7 @@ network TestNetwork ap24: AccessPoint; ap5: AccessPoint; apn: AccessPoint; + apb: AccessPoint; } %inifile: omnetpp.ini @@ -138,6 +194,9 @@ sim-time-limit = 0.36s *.ap5.wlan[*].mgmt.beaconInterval = 102400us *.apn.wlan[*].opMode = "n(mixed-2.4Ghz)" *.apn.wlan[*].radio.channelNumber = 0 +*.apb.wlan[*].opMode = "b" +*.apb.wlan[*].radio.channelNumber = -1 +*.apb.wlan[*].radio.typename = "TestPreconfiguredRadio" **.mobility.initialX = 0m **.mobility.initialY = 0m **.mobility.initialZ = 0m diff --git a/tests/module/Ieee80211MgmtApChannelChange_1.test b/tests/module/Ieee80211MgmtApChannelChange_1.test index da3f7bd1429..324c0369224 100644 --- a/tests/module/Ieee80211MgmtApChannelChange_1.test +++ b/tests/module/Ieee80211MgmtApChannelChange_1.test @@ -21,6 +21,7 @@ peer state consistent throughout. #include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211HtMode.h" #include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211ModeSet.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.h" +#include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211RadioChannelChangedDetails.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Receiver.h" #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Transmitter.h" @@ -272,7 +273,8 @@ class Ieee80211MgmtApChannelChangeTest : public cSimpleModule // Both signal-driven notifications and direct MIB calls must validate against active band. bool threwSignalInvalidChannel = false; try { - radio->emit(physicallayer::Ieee80211Radio::radioChannelChangedSignal, 99); + physicallayer::Ieee80211RadioChannelChangedDetails details(mgmt->getHtOperationBand()); + radio->emit(physicallayer::Ieee80211Radio::radioChannelChangedSignal, 99, &details); } catch (const cRuntimeError& e) { threwSignalInvalidChannel = true; diff --git a/tests/module/Ieee80211MgmtApUnavailableChannel_1.test b/tests/module/Ieee80211MgmtApUnavailableChannel_1.test index be8602d35b6..746235f952e 100644 --- a/tests/module/Ieee80211MgmtApUnavailableChannel_1.test +++ b/tests/module/Ieee80211MgmtApUnavailableChannel_1.test @@ -1,7 +1,7 @@ %description: An HT-capable AP must not serialize a management frame before its radio has published a valid primary channel. A radio channel of -1 suppresses the -initial channel signal, so the first beacon deterministically reports the +initial channel signal when the transmitter is also unconfigured, so initialization reports the missing MIB-owned channel instead of serializing an invalid value. %file: test.ned From b5c3c8ee49f8d61ed4d62446f433aa425d869163 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miguel=20Gonz=C3=A1lez=20L=C3=B3pez?= Date: Mon, 14 Sep 2026 13:28:12 +0200 Subject: [PATCH 9/9] ieee80211: advertise and decode standard DSSS channels The DSSS Current Channel element carries a standard channel number, not a band-local index (IEEE Std 802.11-2024, 9.4.2.4 and Tables 9-62/9-69). Advertise it for modeled 2.4 GHz operation, account for its wire length, and convert back through the receive band during discovery. Retain receive-channel fallback and HT Operation authority; test absent, malformed and duplicate elements. The 158 explicitly selected legacy fingerprint cases pass in debug mode. This commit changes 30 selected rows: 30 with trajectory changes and 30 with serialized-byte changes. Record only measured causal differences; preserve graphical expectations and unselected entries. Attribution and per-case deltas are in ai-logs/executions/2026-09-14_pr1189-cleanup/. Validation: incremental debug build, directly related tests and scoped opp_repl controls passed. Legacy custom 2.4 GHz bands without a standard-channel map otherwise abort on the next Beacon or Probe Response. Omit DSSS for this nonstandard legacy operation, keep channel-index validation and strict HT mapping, and document the modeling simplification. Cover mapped and unmapped custom bands through fresh scheduled Beacons, Probe Responses and serialized body lengths. --- WHATSNEW | 21 ++++--- doc/src/migration-guide/index.rst | 20 +++++++ .../ieee80211/mgmt/Ieee80211MgmtAp.cc | 12 ++-- .../ieee80211/mgmt/Ieee80211MgmtApBase.cc | 24 ++++++++ .../ieee80211/mgmt/Ieee80211MgmtApBase.h | 1 + .../ieee80211/mgmt/Ieee80211MgmtFrame.msg | 2 +- .../mgmt/Ieee80211MgmtFrameSerializer.cc | 33 ++++++++++- .../ieee80211/mgmt/Ieee80211MgmtSta.cc | 22 +++++-- tests/fingerprint/examples.csv | 26 ++++----- tests/fingerprint/showcases.csv | 26 ++++----- tests/fingerprint/tutorials.csv | 8 +-- tests/module/Ieee80211BeaconSchedule_1.test | 58 +++++++++++++++++-- tests/unit/Ieee80211BeaconWire_1.test | 18 ++++-- tests/unit/Ieee80211MgmtStaDiscovery_1.test | 32 ++++++---- 14 files changed, 231 insertions(+), 72 deletions(-) diff --git a/WHATSNEW b/WHATSNEW index b5b98603bc1..28e5537c306 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -31,23 +31,26 @@ Notable backward incompatible changes are the following: 2. IEEE 802.11 wire and reception corrections - QoS Control fields now use the standard bit positions. - - Non-QoS Data no longer aliases the QoS TID-0 duplicate cache. - - OFDM radios generate and check SIGNAL parity and reject undefined RATE codes in compliant mode. - Noncompliant layered reception uses its configured mode and still checks parity. - - HR/DSSS and ERP transmissions carry their specific PHY protocol identities. + QoS Control fields now use the standard bit positions. Non-QoS Data no + longer aliases the QoS TID-0 duplicate cache. OFDM radios generate and check + SIGNAL parity and reject undefined RATE codes; HR/DSSS and ERP transmissions + carry their specific PHY protocol identities. AP beacon intervals are rounded down to whole 1024-us TUs for both target scheduling and advertisement (100ms becomes 99.328ms). Configured intervals - must be between 1 and 65535 TUs. + must be between 1 and 65535 TUs. Beacon and Probe Response frames now encode + the DSSS Current Channel for 2.4 GHz operation. Their channelNumber field is + a standard channel number, with -1 for an absent element, rather than an + internal channel index. Radio channel parameters and scan results remain + internal indices. Custom frame producers should follow the migration guide. The mesh no-forwarding-information reason code is corrected from 60 to 62. These corrections change affected packet bytes and may change Wi-Fi simulation trajectories and fingerprints. + Noncompliant layered OFDM retains its configured mode and RATE-0 placeholder; + SIGNAL parity is checked in both compliant and noncompliant operation. + Notable backward compatible changes are the following: 1. IEEE 802.11 per-station rate statistics diff --git a/doc/src/migration-guide/index.rst b/doc/src/migration-guide/index.rst index a05ae6f9768..698474469b2 100644 --- a/doc/src/migration-guide/index.rst +++ b/doc/src/migration-guide/index.rst @@ -7,6 +7,26 @@ Release: |release| IEEE 802.11 Beacon and Probe Response Fields ------------------------------------------ +``Ieee80211BeaconFrame::channelNumber`` (also inherited by Probe Response) now +represents the DSSS Parameter Set's standard Current Channel value. Its default, +``-1``, means that the element is absent. Custom frame producers that previously +stored a radio's internal index must use +``band->getStandardChannelNumber(channelIndex)`` and account for the element's +three bytes in the body chunk length. Consumers convert a present value back +with ``receivedBand->getChannelIndex(currentChannel)``. These mapping functions +throw for unmappable values. Radio configuration and scan-result channel fields +continue to use internal indices. + +The built-in AP emits this element for its modeled 2.4 GHz operation and omits +it for other bands or radios without IEEE channel information. Without the +element, discovery uses the receive channel when available. HT discovery still +uses HT Operation as its primary-channel authority. + +As a modeling simplification, legacy APs using custom bands without a standard +channel-number mapping also omit the DSSS element. Supply an explicit mapping +to advertise a standard channel. HT operation still requires a valid mapping; +invalid internal channel indices remain errors in all modes. + AP ``beaconInterval`` values are rounded down to whole 1024-us TUs once, during initialization, and must be between 1 and 65535 TUs. The effective value drives both target scheduling and advertised content. Use ``102400us`` for exactly diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.cc b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.cc index 059ade5396a..1b52306987e 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.cc +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtAp.cc @@ -210,17 +210,15 @@ void Ieee80211MgmtAp::clearPendingAssociation(StaInfo *sta) void Ieee80211MgmtAp::sendBeacon() { EV << "Sending beacon\n"; - // Generic radios may not publish an IEEE channel; retain the legacy unknown value. - int primaryChannel = mib->hasPrimaryChannel() ? mib->requirePrimaryChannel() : -1; const auto& body = makeShared(); body->setSSID(ssid.c_str()); setSupportedRateElements(body); body->setBeaconInterval(beaconInterval); - body->setChannelNumber(primaryChannel); + body->setChannelNumber(getDsssParameterSetChannel()); addHtCapabilities(body); if (mib->isHtOperationSupported()) setHtOperation(body, getHtOperationBand(), mib->getHtOperation()); - body->setChunkLength(B(8 + 2 + 2 + (2 + ssid.length())) + getSupportedRateElementsLength(body) + getHtMgmtElementsLength(body)); + body->setChunkLength(B(8 + 2 + 2 + (2 + ssid.length()) + (body->getChannelNumber() != -1 ? 3 : 0)) + getSupportedRateElementsLength(body) + getHtMgmtElementsLength(body)); sendManagementFrame("Beacon", body, ST_BEACON, MacAddress::BROADCAST_ADDRESS); } @@ -526,17 +524,15 @@ void Ieee80211MgmtAp::handleProbeRequestFrame(Packet *packet, const PtrhasPrimaryChannel() ? mib->requirePrimaryChannel() : -1; const auto& body = makeShared(); body->setSSID(ssid.c_str()); setSupportedRateElements(body); body->setBeaconInterval(beaconInterval); - body->setChannelNumber(primaryChannel); + body->setChannelNumber(getDsssParameterSetChannel()); addHtCapabilities(body); if (mib->isHtOperationSupported()) setHtOperation(body, getHtOperationBand(), mib->getHtOperation()); - body->setChunkLength(B(8 + 2 + 2 + (2 + ssid.length())) + getSupportedRateElementsLength(body) + getHtMgmtElementsLength(body)); + body->setChunkLength(B(8 + 2 + 2 + (2 + ssid.length()) + (body->getChannelNumber() != -1 ? 3 : 0)) + getSupportedRateElementsLength(body) + getHtMgmtElementsLength(body)); sendManagementFrame("ProbeResp", body, ST_PROBERESPONSE, staAddress); } diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.cc b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.cc index 170bf3de776..8472d749736 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.cc +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.cc @@ -77,6 +77,30 @@ const physicallayer::IIeee80211Band *Ieee80211MgmtApBase::getHtOperationBand() c return radioBand; } +int Ieee80211MgmtApBase::getDsssParameterSetChannel() const +{ + // IEEE Std 802.11-2024, Tables 9-62 and 9-69, 9.4.2.4: + // advertise DSSS Current Channel for the modeled 2.4 GHz operation. + // Omit it for other bands and generic radios without an IEEE channel. + if (radioBand == nullptr || !mib->hasPrimaryChannel()) + return -1; + int channelIndex = mib->requirePrimaryChannel(); + auto frequency = radioBand->getCenterFrequency(channelIndex); + if (frequency < GHz(2.4) || frequency >= GHz(2.5)) + return -1; + try { + return radioBand->getStandardChannelNumber(channelIndex); + } + catch (const cRuntimeError&) { + if (mib->isHtOperationSupported()) + throw; + // Modeling simplification: nonstandard legacy bands can operate without + // a standards channel mapping. Omit DSSS rather than invent a wire value. + // Channel-index validity was checked by getCenterFrequency() above. + return -1; + } +} + } // namespace ieee80211 } // namespace inet diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h index 5baf33b6ada..6fb1cdfc3e8 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h @@ -34,6 +34,7 @@ class INET_API Ieee80211MgmtApBase : public Ieee80211MgmtBase const physicallayer::IIeee80211Band *radioBand = nullptr; // Immutable band observed via radioChannelChanged const physicallayer::IIeee80211Band *getHtOperationBand() const; + int getDsssParameterSetChannel() const; virtual int numInitStages() const override { return NUM_INIT_STAGES; } virtual void initialize(int) override; diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg index 4d7863c1153..69e062af31a 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg @@ -253,7 +253,7 @@ class Ieee80211BeaconFrame extends Ieee80211MgmtFrame string SSID; Ieee80211SupportedRatesElement supportedRates; simtime_t beaconInterval; - int channelNumber; + int channelNumber = -1; // DSSS Parameter Set Current Channel (standard channel number, not an internal index); -1 means absent Ieee80211HandoverParameters handoverParameters; //TODO is it a vendor-specific parameter in serializer? } diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrameSerializer.cc b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrameSerializer.cc index b93d656273f..ffd82dd06b7 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrameSerializer.cc +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrameSerializer.cc @@ -33,6 +33,7 @@ Register_Serializer(Ieee80211ReassociationRequestFrame, Ieee80211MgmtFrameSerial Register_Serializer(Ieee80211ReassociationResponseFrame, Ieee80211MgmtFrameSerializer); static constexpr uint8_t HT_CAPABILITIES_ELEMENT_ID = 45; +static constexpr uint8_t DSSS_PARAMETER_SET_ELEMENT_ID = 3; static constexpr uint8_t HT_OPERATION_ELEMENT_ID = 61; static constexpr uint8_t SUPPORTED_RATES_ELEMENT_ID = 1; static constexpr uint8_t EXTENDED_SUPPORTED_RATES_ELEMENT_ID = 50; @@ -52,6 +53,19 @@ static void validateSupportedRatesCount(int numRates) throw cRuntimeError("Malformed Supported Rates element length: %d", numRates); } +static void writeDsssParameterSet(MemoryOutputStream& stream, const Ptr& frame) +{ + // IEEE Std 802.11-2024, 9.4.2.4: one-octet Current Channel. + int channel = frame->getChannelNumber(); + if (channel == -1) + return; + if (channel < 1 || channel > 255) + throw cRuntimeError("Invalid DSSS Parameter Set Current Channel: %d", channel); + stream.writeByte(DSSS_PARAMETER_SET_ELEMENT_ID); + stream.writeByte(1); + stream.writeByte(channel); +} + static void validateExtendedSupportedRatesCount(int numRates) { // IEEE Std 802.11-2024, 9.4.2.11: Extended Supported Rates has one to @@ -94,6 +108,8 @@ template static void writeSupportedRateElements(MemoryOutputStream& stream, const Ptr& frame) { writeSupportedRatesElement(stream, frame->getSupportedRates()); + if (auto beacon = dynamicPtrCast(frame)) + writeDsssParameterSet(stream, beacon); const auto& extendedSupportedRates = frame->getExtendedSupportedRates(); if (frame->getExtendedSupportedRatesPresent()) writeExtendedSupportedRatesElement(stream, extendedSupportedRates); @@ -319,6 +335,21 @@ static void readHtElements(MemoryInputStream& stream, const PtrmarkIncorrect(); stream.seek(stream.getPosition() + declaredBodyLength); } + else if (elementId == DSSS_PARAMETER_SET_ELEMENT_ID) { + auto beacon = dynamicPtrCast(frame); + if (beacon == nullptr) + stream.seek(stream.getPosition() + declaredBodyLength); + else if (length != 1 || beacon->getChannelNumber() != -1) { + frame->markIncorrect(); + stream.seek(stream.getPosition() + declaredBodyLength); + } + else { + int channel = stream.readByte(); + beacon->setChannelNumber(channel); + if (channel == 0) + frame->markIncorrect(); + } + } else if (elementId == EXTENDED_SUPPORTED_RATES_ELEMENT_ID) { if (!(allowedElements & EXTENDED_SUPPORTED_RATES_ALLOWED)) { frame->markIncorrect(); @@ -607,7 +638,6 @@ void Ieee80211MgmtFrameSerializer::serializeFields(MemoryOutputStream& stream, c writeSupportedRateElements(stream, beaconFrame); writeHtElements(stream, beaconFrame, HT_CAPABILITIES_ALLOWED | HT_OPERATION_ALLOWED | EXTENDED_SUPPORTED_RATES_ALLOWED | BASIC_HT_MCS_SET_PRESENT); // 6 Frequency-Hopping (FH) Parameter Set The FH Parameter Set information element is present within Beacon frames generated by STAs using FH PHYs. - // 7 DS Parameter Set The DS Parameter Set information element is present within Beacon frames generated by STAs using Clause 15, Clause 18, and Clause 19 PHYs. // 8 CF Parameter Set The CF Parameter Set information element is present only within Beacon frames generated by APs supporting a PCF. // 9 IBSS Parameter Set The IBSS Parameter Set information element is present only within Beacon frames generated by STAs in an IBSS. // 10 Traffic indication map (TIM) The TIM information element is present only within Beacon frames generated by APs. @@ -646,7 +676,6 @@ void Ieee80211MgmtFrameSerializer::serializeFields(MemoryOutputStream& stream, c writeSupportedRateElements(stream, probeResponseFrame); writeHtElements(stream, probeResponseFrame, HT_CAPABILITIES_ALLOWED | HT_OPERATION_ALLOWED | EXTENDED_SUPPORTED_RATES_ALLOWED | BASIC_HT_MCS_SET_PRESENT); // 6 FH Parameter Set The FH Parameter Set information element is present within Probe Response frames generated by STAs using FH PHYs. - // 7 DS Parameter Set The DS Parameter Set information element is present within Probe Response frames generated by STAs using Clause 15, Clause 18, and Clause 19 PHYs. // 8 CF Parameter Set The CF Parameter Set information element is present only within Probe Response frames generated by APs supporting a PCF. // 9 IBSS Parameter Set The IBSS Parameter Set information element is present only within Probe Response frames generated by STAs in an IBSS. // 10 Country Included if dot11MultiDomainCapabilityEnabled or dot11SpectrumManagementRequired is true. diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtSta.cc b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtSta.cc index e397eee436d..859a5c108ea 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtSta.cc +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtSta.cc @@ -1156,10 +1156,26 @@ bool Ieee80211MgmtSta::storeAPInfo(Packet *packet, const PtrgetHtOperationPresent(); bool ignoreHt = mib != nullptr && !mib->isHtOperationSupported(); std::string reason; + const auto& channelInd = packet->findTag(); + const auto *receivedChannel = channelInd != nullptr ? channelInd->getChannel() : nullptr; + // IEEE Std 802.11-2024, 9.4.2.4: Current Channel is a standard + // channel number. Without this optional element, use the receive channel. + int legacyChannel = receivedChannel != nullptr ? receivedChannel->getChannelNumber() : -1; + if ((ignoreHt || !htOperationPresent) && body->getChannelNumber() != -1) { + if (receivedChannel == nullptr || receivedChannel->getBand() == nullptr) + return false; + try { + legacyChannel = receivedChannel->getBand()->getChannelIndex(body->getChannelNumber()); + } + catch (const cRuntimeError& error) { + EV_WARN << "Ignoring discovery with invalid DSSS Current Channel: " << error.what() << "\n"; + return false; + } + } if (ignoreHt) { // A legacy STA ignores optional HT information, including malformed // typed values, and retains the legacy channel advertisement. - candidate.channel = body->getChannelNumber(); + candidate.channel = legacyChannel; candidate.htCapabilitiesPresent = false; candidate.htOperationPresent = false; } @@ -1177,8 +1193,6 @@ bool Ieee80211MgmtSta::storeAPInfo(Packet *packet, const PtrfindTag(); - const auto *receivedChannel = channelInd != nullptr ? channelInd->getChannel() : nullptr; if (receivedChannel == nullptr) { reason = "HT Operation discovery has no received channel indication"; EV_WARN << "Ignoring HT discovery from AP address=" << address << ": " << reason << "\n"; @@ -1204,7 +1218,7 @@ bool Ieee80211MgmtSta::storeAPInfo(Packet *packet, const PtrgetChannelNumber(); + candidate.channel = legacyChannel; } candidate.beaconInterval = body->getBeaconInterval(); auto signalPowerInd = packet->getTag(); diff --git a/tests/fingerprint/examples.csv b/tests/fingerprint/examples.csv index 3dc350e774a..39f09678aec 100644 --- a/tests/fingerprint/examples.csv +++ b/tests/fingerprint/examples.csv @@ -47,8 +47,8 @@ /examples/communicationcache/, -f omnetpp.ini -c VectorCommunicationCache -r 0, 10s, 4c65-91ae/tplx;72b5-8f0b/~tNl;190a-bc02/~tND;40ef-e3e2/tyf, PASS, wireless Ipv4 /examples/dhcp/, -f omnetpp.ini -c WiredDHCP -r 0, 5000s, df67-0fe0/tplx;023a-3c37/~tNl;fdc9-84e1/~tND;8a53-9a15/tyf, PASS, EthernetMac Ipv4 -/examples/dhcp/, -f omnetpp.ini -c WirelessDHCP -r 0, 500s, 1b57-d2e8/tplx;ac86-dd61/~tNl;a386-b193/~tND;d3a7-5f49/tyf, PASS, wireless EthernetMac Ipv4 -/examples/dhcp/, -f omnetpp.ini -c Wireless2DHCP -r 0, 500s, c938-527f/tplx;0566-81a4/~tNl;005d-ddb5/~tND;3497-9980/tyf, PASS, wireless EthernetMac Ipv4 +/examples/dhcp/, -f omnetpp.ini -c WirelessDHCP -r 0, 500s, d282-cc4a/tplx;ac86-dd61/~tNl;e4f3-81b8/~tND;d3a7-5f49/tyf, PASS, wireless EthernetMac Ipv4 +/examples/dhcp/, -f omnetpp.ini -c Wireless2DHCP -r 0, 500s, 4149-27a9/tplx;0566-81a4/~tNl;5f5a-289c/~tND;3497-9980/tyf, PASS, wireless EthernetMac Ipv4 /examples/dhcp/, -f omnetpp.ini -c RebootingDHCP -r 0, 500s, df1a-1a1e/tplx;0610-405e/~tNl;4ae3-3dec/~tND;fbd6-20e8/tyf, PASS, EthernetMac Ipv4 # /examples/diffserv/onedomain/, -f omnetpp.ini -c Apps -r 0, 10s, 0, PASS, # abstract-config @@ -380,10 +380,10 @@ /examples/manetrouting/multiradio/, -f omnetpp.ini -c MultiRadio -r 0, 20s, ec17-5cc2/tplx;55f5-0894/~tNl, PASS, wireless adhoc Ipv4 /examples/manetrouting/multiradio/, -f omnetpp.ini -c SingleRadio -r 0, 20s, 85a0-51b8/tplx;c07a-44e1/~tNl;3aa0-49ed/tyf, PASS, wireless adhoc Ipv4 -/examples/ipv6/mipv6/, -f omnetpp.ini -c Handover -r 0, 70s, 40da-712f/tplx;a44c-17bf/~tNl;b25a-96c2/~tND;44ef-1a45/tyf, PASS, wireless EthernetMac -/examples/ipv6/mipv6/, -f omnetpp.ini -c RouteOptimizationTwoCNs -r 0, 60s, 04c8-ea00/tplx;e6db-28c0/~tNl;1b44-dabf/~tND;ed3e-17fa/tyf, PASS, wireless EthernetMac -/examples/ipv6/mipv6roaming/, -f omnetpp.ini -c Roaming -r 0, 70s, 9a69-122e/tplx;28ce-974e/~tNl;261c-bbb8/~tND;afae-2b3c/tyf, PASS, wireless EthernetMac -/examples/ipv6/pmipv6/, -f omnetpp.ini -c General -r 0, 60s, 8e0a-8bc5/tplx;1064-9bd4/~tNl;c22c-d7f1/~tND;0277-d784/tyf, PASS, wireless EthernetMac +/examples/ipv6/mipv6/, -f omnetpp.ini -c Handover -r 0, 70s, dca6-3751/tplx;a44c-17bf/~tNl;96ff-ed7c/~tND;44ef-1a45/tyf, PASS, wireless EthernetMac +/examples/ipv6/mipv6/, -f omnetpp.ini -c RouteOptimizationTwoCNs -r 0, 60s, 1560-028f/tplx;e6db-28c0/~tNl;805b-8a25/~tND;ed3e-17fa/tyf, PASS, wireless EthernetMac +/examples/ipv6/mipv6roaming/, -f omnetpp.ini -c Roaming -r 0, 70s, 342e-5e65/tplx;28ce-974e/~tNl;dcec-ae59/~tND;afae-2b3c/tyf, PASS, wireless EthernetMac +/examples/ipv6/pmipv6/, -f omnetpp.ini -c General -r 0, 60s, 081b-769c/tplx;1064-9bd4/~tNl;bd46-d85c/~tND;0277-d784/tyf, PASS, wireless EthernetMac /examples/mobility/, -f omnetpp.ini -c AnsimMobility -r 0, 10000s, 72f8-5c0b/tplx;0000-0000/~tNl;0000-0000/~tND;7dd1-18eb/tyf, PASS, /examples/mobility, -f omnetpp.ini -c AttachedMobility, 10s, 566c-6355/tplx;0000-0000/~tNl;0000-0000/~tND;fa92-f68c/tyf, PASS, @@ -573,7 +573,7 @@ /examples/wireless/filtering/, -f omnetpp.ini -c ListeningFilter -r 0, 100s, 946b-6f7f/tplx;e5d7-0ef7/~tNl;fc55-a160/~tND;17b4-4f41/tyf, PASS, Ipv4 /examples/wireless/filtering/, -f omnetpp.ini -c MacAddressFilter -r 0, 100s, d2d8-8182/tplx;d14e-6ff1/~tNl;1e5f-e0e5/~tND;1853-1300/tyf, PASS, Ipv4 -/examples/wireless/handover/, -f omnetpp.ini -c General -r 0, 1500s, ccea-d0cd/tplx;7bfd-9fb3/~tNl;cb3d-a776/~tND;c710-ff2e/tyf, PASS, wireless +/examples/wireless/handover/, -f omnetpp.ini -c General -r 0, 1500s, 1cb1-6c39/tplx;7bfd-9fb3/~tNl;6003-08fb/~tND;c710-ff2e/tyf, PASS, wireless /examples/wireless/hiddennode/, -f omnetpp.ini -c General -r 0, 5s, 8383-735e/tplx;8e4d-20ee/~tNl;1298-9ea7/~tND;af51-7b12/tyf, PASS, wireless @@ -654,11 +654,11 @@ /examples/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 6fae-d558/tplx;b8ea-b2fc/~tNl;7a95-cf35/~tND, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, 16b2-6f72/tplx;5eb9-6cea/~tNl;8ba8-df6e/~tND;6097-a429/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 0adf-0909/tplx;6188-6ffd/~tNl;7e19-5357/~tND;9f3c-4512/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithoutAggregation -r 0, 10s, 38e1-6afa/tplx;78d2-bb9a/~tNl;1956-a58c/~tND;a4c3-19bf/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithRtsCts -r 0, 10s, 2992-5bcb/tplx;7c57-849b/~tNl;55c3-c1ca/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, 83a2-4aad/tplx;a8c3-d9fe/~tNl;31bf-62c0/~tND;08b5-d005/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacNonQos -r 0, 10s, c3c0-dc93/tplx;5eb9-6cea/~tNl;87a5-11a1/~tND;6097-a429/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQos -r 0, 10s, 3a58-19c0/tplx;6188-6ffd/~tNl;377c-d4fc/~tND;9f3c-4512/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithoutAggregation -r 0, 10s, 33e5-c380/tplx;78d2-bb9a/~tNl;1524-d88f/~tND;a4c3-19bf/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithRtsCts -r 0, 10s, 7f3b-72ca/tplx;7c57-849b/~tNl;06e3-7901/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, d36c-2a5a/tplx;a8c3-d9fe/~tNl;3c29-a59c/~tND;08b5-d005/tyf, PASS, wireless Ipv4 /examples/wireless/ratecontrol/, -f omnetpp.ini -c Mac -r 0, 100s, bf30-2f13/tplx;7b2f-653d/~tNl;6e1e-3b7b/~tND;19fe-8b0e/tyf, PASS, wireless @@ -678,4 +678,4 @@ /examples/wireless/throughput/, -f omnetpp.ini -c Throughput1 -r 0, 20s, a4d8-abf4/tplx;f424-9aaf/~tNl;24fe-19e3/~tND;bb2f-ec63/tyf, PASS, wireless /examples/wireless/throughput/, -f omnetpp.ini -c Throughput2 -r 0, 10s, 3b2b-5123/tplx;0009-ca8c/~tNl;a4a2-725a/~tND;032e-0333/tyf, PASS, wireless -/examples/wireless/wiredandwirelesshostswithap/, -f omnetpp.ini -c General -r 0, 100s, 27e0-17f3/tplx;13cb-5046/~tNl;5add-7e09/~tND;b4df-273e/tyf, PASS, wireless EthernetMac Ipv4 +/examples/wireless/wiredandwirelesshostswithap/, -f omnetpp.ini -c General -r 0, 100s, a93e-c671/tplx;13cb-5046/~tNl;6a1b-eaf7/~tND;b4df-273e/tyf, PASS, wireless EthernetMac Ipv4 diff --git a/tests/fingerprint/showcases.csv b/tests/fingerprint/showcases.csv index afa09652796..26472800c51 100644 --- a/tests/fingerprint/showcases.csv +++ b/tests/fingerprint/showcases.csv @@ -122,10 +122,10 @@ /showcases/visualizer/osg/environment/, -f omnetpp.ini -c DefaultView -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, # DefaultView extended /showcases/visualizer/osg/environment/, -f omnetpp.ini -c IsometricView -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c OneNetwork -r 0, 5s, ebc6-6029/tplx;c427-dece/~tNl;bad5-c15b/~tND;9c21-dd33/tyf, PASS, wireless -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c MultipleNetworks -r 0, 5s, c569-d311/tplx;3c17-6ee0/~tNl;c9dc-27c6/~tND;3be5-9494/tyf, PASS, wireless -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c VisualizingHandover -r 0, 250s, 9c90-dba8/tplx;2f60-762d/~tNl;bbd8-1256/~tND;07bb-3973/tyf, PASS, wireless -/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c SignalLevels -r 0, 100s, 4951-b23d/tplx;cec5-d464/~tNl;8570-13a4/~tND;c099-e5c5/tyf, PASS, Ipv4 +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c OneNetwork -r 0, 5s, 46cc-9c41/tplx;c427-dece/~tNl;eae3-92e1/~tND;9c21-dd33/tyf, PASS, wireless +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c MultipleNetworks -r 0, 5s, 5094-e358/tplx;3c17-6ee0/~tNl;4dff-fa35/~tND;3be5-9494/tyf, PASS, wireless +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c VisualizingHandover -r 0, 250s, 7fb8-49dc/tplx;2f60-762d/~tNl;0437-f151/~tND;07bb-3973/tyf, PASS, wireless +/showcases/visualizer/canvas/ieee80211/, -f omnetpp.ini -c SignalLevels -r 0, 100s, 51ec-d359/tplx;cec5-d464/~tNl;a0c6-b121/~tND;c099-e5c5/tyf, PASS, Ipv4 /showcases/visualizer/canvas/submoduleinfo/, -f omnetpp.ini -c PacketCounts -r 0, 5s, 271c-6821/tplx;3c0c-db82/~tNl;8315-9723/~tND;b145-6576/tyf, PASS, wireless Ipv4 # VisualizingSubmoduleInformation extended /showcases/visualizer/canvas/submoduleinfo/, -f omnetpp.ini -c MACStates -r 0, 5s, 271c-6821/tplx;3c0c-db82/~tNl;8315-9723/~tND;4677-fc97/tyf, PASS, wireless Ipv4 @@ -133,7 +133,7 @@ /showcases/visualizer/canvas/instrumentfigures/, -f omnetpp.ini -c General -r 0, 3s, 6622-adb9/tplx;28ca-9f8c/~tNl;85f0-a9c3/~tND;4266-0d42/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/interfacetable/, -f omnetpp.ini -c EnablingVisualization -r 0, 5s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/showcases/visualizer/canvas/interfacetable/, -f omnetpp.ini -c AdvancedFeatures -r 0, 5s, b83e-ac7f/tplx;ca8c-8410/~tNl;3ff0-79e4/~tND;b2d8-b329/tyf, PASS, wireless EthernetMac Ipv4 +/showcases/visualizer/canvas/interfacetable/, -f omnetpp.ini -c AdvancedFeatures -r 0, 5s, 02f0-2327/tplx;ca8c-8410/~tNl;480f-18e6/~tND;b2d8-b329/tyf, PASS, wireless EthernetMac Ipv4 /showcases/visualizer/canvas/mobility/, -f omnetpp.ini -c VisualizingFeatures -r 0, 500s, 54a1-0f8d/tplx;0000-0000/~tNl;0000-0000/~tND;df51-b287/tyf, PASS, wireless @@ -146,21 +146,21 @@ /showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c EnablingVisualization -r 0, 500s, 456d-1982/tplx;bd58-e496/~tNl;1b76-9a17/~tND;4b2b-9088/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c StaticNetworkPaths -r 0, 500s, 5995-953f/tplx;cfc6-5083/~tNl;aa2b-919c/~tND;a8ff-b27d/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c Mobile -r 0, 500s, cbb7-c036/tplx;fdcd-ce11/~tNl;5463-67a1/~tND, PASS, wireless Ipv4 -/showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c ChangingPaths -r 0, 250s, 3e0a-798d/tplx;47ff-ba81/~tNl;a551-c86e/~tND;eade-62dc/tyf, PASS, EthernetMac Ipv4 +/showcases/visualizer/canvas/networkpathactivity/, -f omnetpp.ini -c ChangingPaths -r 0, 250s, a7da-151a/tplx;47ff-ba81/~tNl;abc8-ce80/~tND;eade-62dc/tyf, PASS, EthernetMac Ipv4 # /showcases/visualizer/canvas/obstacleloss/, -f omnetpp.ini -c EnablingVisualization -r 0, 250s, 2410-572d/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, wireless # /showcases/visualizer/canvas/obstacleloss/, -f omnetpp.ini -c MultipleObstacles -r 0, 500s, 89ca-0f0a/tplx;0000-0000/~tNl;0000-0000/~tND, PASS, wireless # /showcases/visualizer/osg/osgdemo/, -f omnetpp.ini -c General -r 0, 100s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND, ERROR, -/showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c QueueOverflow -r 0, 2002ms, 14d8-752e/tplx;0fde-9533/~tNl;b7f3-a26d/~tND;dee8-a7c2/tyf, PASS, wireless EthernetMac Ipv4 +/showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c QueueOverflow -r 0, 2002ms, 9a7d-08d1/tplx;0fde-9533/~tNl;fcc2-4b02/~tND;dee8-a7c2/tyf, PASS, wireless EthernetMac Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c ArpResolutionFailed -r 0, 500s, 9069-cca6/tplx;0000-0000/~tNl;0000-0000/~tND;db3b-e3e4/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c MACRetryLimitReached -r 0, 500s, 1f7a-e5f3/tplx;14cf-73d2/~tNl;c7ba-ef52/~tND;24ba-9fa9/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c InterfaceNotConnected -r 0, 500s, 280f-b030/tplx;0000-0000/~tNl;0000-0000/~tND;5f21-3687/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/packetdrop/, -f omnetpp.ini -c NoRouteToDestination -r 0, 500s, 4c38-3589/tplx;0000-0000/~tNl;0000-0000/~tND;2ad2-161b/tyf, PASS, Ipv4 /showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c EnablingVisualization -r 0, 500s, a1da-0032/tplx;bde3-9c6e/~tNl;de93-cd82/~tND;25e0-5171/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Filtering -r 0, 250s, 7ef9-76c6/tplx;3a21-efc6/~tNl;0eec-b4ad/~tND;5e9e-c6c7/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Filtering -r 0, 250s, 9d23-f793/tplx;3a21-efc6/~tNl;c40d-b38c/~tND;5e9e-c6c7/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/physicallinkactivity/, -f omnetpp.ini -c Mobile -r 0, 500s, a437-919f/tplx;03cf-d1b8/~tNl;f5ff-0d7f/~tND;7bf9-d50f/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/radiomediumactivity/, -f omnetpp.ini -c DisplayingSignalsTransmissionsReceptions -r 0, 500s, 771b-bffb/tplx;ca1b-c59c/~tNl;4ebb-fab0/~tND, PASS, wireless # unfinished @@ -182,7 +182,7 @@ /showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Line -r 0, 25s, cb1d-a154/tplx;a565-1a98/~tNl;ee1b-5f7a/~tND;7b44-2fb8/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Font -r 0, 25s, cb1d-a154/tplx;a565-1a98/~tNl;ee1b-5f7a/~tND;5e90-6a92/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Icon -r 0, 25s, 9218-0d5b/tplx;1a94-46a8/~tNl;530b-257e/~tND;62e8-28b7/tyf, PASS, wireless Ipv4 -/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Annotation -r 0, 25s, 8015-56a9/tplx;8f8e-db57/~tNl;8912-a7d2/~tND;342b-0033/tyf, PASS, wireless Ipv4 +/showcases/visualizer/canvas/styling/, -f omnetpp.ini -c Annotation -r 0, 25s, b191-70c8/tplx;8f8e-db57/~tNl;4ce2-8b61/~tND;342b-0033/tyf, PASS, wireless Ipv4 /showcases/visualizer/canvas/transportconnection/, -f omnetpp.ini -c EnablingVisualization -r 0, 2s, fc86-91c1/tplx;817d-6638/~tNl;b2d4-0aff/~tND;d5f4-f615/tyf, PASS, EthernetMac Ipv4 /showcases/visualizer/canvas/transportconnection/, -f omnetpp.ini -c MultipleConnections -r 0, 2s, 511a-236b/tplx;0bd4-4f1e/~tNl;050f-8d69/~tND;1584-363d/tyf, PASS, EthernetMac Ipv4 @@ -269,7 +269,7 @@ /showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfrag -r 0, 1s, f7a5-cf0a/tplx;a24a-a070/~tNl;5dae-0b8e/~tND;335d-6687/tyf, PASS, wireless Ipv4 /showcases/wireless/fragmentation/, -f omnetpp.ini -c HCFfragblockack -r 0, 1s, 0702-c692/tplx;1bf9-b035/~tNl;a51c-9f3d/~tND;6f6e-b101/tyf, PASS, wireless Ipv4 -/showcases/wireless/handover/, -f omnetpp.ini -c General -r 0, 250s, 2adb-31c2/tplx;bcc9-11d2/~tNl;7e6b-9475/~tND;02e9-9ad3/tyf, PASS, wireless +/showcases/wireless/handover/, -f omnetpp.ini -c General -r 0, 250s, 3623-0ff6/tplx;bcc9-11d2/~tNl;99fd-923d/~tND;02e9-9ad3/tyf, PASS, wireless /showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOnRtsOff -r 0, 5s, 7912-bed4/tplx;c1e8-3622/~tNl;9b60-a38b/~tND;d824-8757/tyf, PASS, wireless Ipv4 /showcases/wireless/hiddennode/, -f omnetpp.ini -c WallOnRtsOn -r 0, 5s, 321b-f7f2/tplx;75e5-07b7/~tNl;4c45-33b3/~tND;35cb-1d85/tyf, PASS, wireless Ipv4 @@ -307,14 +307,14 @@ # /showcases/wireless/levelofdetail/, -f omnetpp.ini -c General -r '$detail=="bit" && $modulation=="QAM-64" && $fecType=="" && $distance==225', 100s, 7794-9306/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, wireless # /showcases/wireless/levelofdetail/, -f omnetpp.ini -c General -r '$detail=="symbol" && $modulation=="QAM-64" && $fecType=="" && $distance==125', 100s, 54ce-ce35/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, wireless -/showcases/wireless/multiradio/, -f omnetpp.ini -c General -r 0, 100s, 548b-38d9/tplx;9a9e-aa20/~tNl;3ab2-d934/~tND;92c1-ccc2/tyf, PASS, wireless Ipv4 +/showcases/wireless/multiradio/, -f omnetpp.ini -c General -r 0, 100s, 346f-d394/tplx;9a9e-aa20/~tNl;275e-da7d/~tND;92c1-ccc2/tyf, PASS, wireless Ipv4 /showcases/wireless/pathloss/, -f omnetpp.ini -c General -r 0, 100s, 171a-e6eb/tplx;3466-822d/~tNl;5909-6e87/~tND;929d-03d5/tyf, PASS, wireless Ipv4 /showcases/wireless/power/, -f omnetpp.ini -c General -r 0, 100s, 498f-b665/tplx;6f50-5caf/~tNl;1403-6fb2/~tND, PASS, wireless Ipv4 -/showcases/wireless/qos/, -f omnetpp.ini -c NonQos -r 0, 10s, 0287-c5f4/tplx;9c39-00a3/~tNl;c760-a0f8/~tND;093e-1ca4/tyf, PASS, wireless Ipv4 -/showcases/wireless/qos/, -f omnetpp.ini -c Qos -r 0, 10s, 3574-8b26/tplx;84a6-b893/~tNl;7c6f-3aec/~tND;bda9-15d1/tyf, PASS, wireless Ipv4 +/showcases/wireless/qos/, -f omnetpp.ini -c NonQos -r 0, 10s, 26be-ff05/tplx;9c39-00a3/~tNl;03a9-2f02/~tND;093e-1ca4/tyf, PASS, wireless Ipv4 +/showcases/wireless/qos/, -f omnetpp.ini -c Qos -r 0, 10s, 8d7c-5091/tplx;84a6-b893/~tNl;cb18-5b4d/~tND;bda9-15d1/tyf, PASS, wireless Ipv4 /showcases/wireless/ratecontrol/, -f omnetpp.ini -c NoRateControl -r 0, 14s, 7ee9-503a/tplx;0816-e58f/~tNl;ec30-e32d/~tND;dad3-7f89/tyf, PASS, wireless Ipv4 /showcases/wireless/ratecontrol/, -f omnetpp.ini -c AarfRateControl -r 0, 12s, a7bc-05bb/tplx;9de0-4dd3/~tNl;de90-6575/~tND;7539-d32d/tyf, PASS, wireless Ipv4 diff --git a/tests/fingerprint/tutorials.csv b/tests/fingerprint/tutorials.csv index ce86e2ef665..9db6440d865 100644 --- a/tests/fingerprint/tutorials.csv +++ b/tests/fingerprint/tutorials.csv @@ -10,15 +10,15 @@ /tutorials/configurator/, -f omnetpp.ini -c Step7A -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /tutorials/configurator/, -f omnetpp.ini -c Step7B -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /tutorials/configurator/, -f omnetpp.ini -c Step7C -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, -/tutorials/configurator/, -f omnetpp.ini -c Step8A -r 0, 100s, 728f-9b8a/tplx;12a6-f004/~tNl;1e48-5ef0/~tND;d3f3-ed4c/tyf, PASS, wireless EthernetMac Ipv4 # Step8A extended -/tutorials/configurator/, -f omnetpp.ini -c Step8B -r 0, 100s, da99-56af/tplx;12a6-f004/~tNl;7715-8cdc/~tND;af16-1150/tyf, PASS, wireless EthernetMac Ipv4 -/tutorials/configurator/, -f omnetpp.ini -c Step9 -r 0, 100s, af60-f8a0/tplx;13d8-880d/~tNl;0fc2-aaaa/~tND;c38c-98ef/tyf, PASS, wireless EthernetMac Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step8A -r 0, 100s, 0b7e-7adc/tplx;12a6-f004/~tNl;8b42-bf7b/~tND;d3f3-ed4c/tyf, PASS, wireless EthernetMac Ipv4 # Step8A extended +/tutorials/configurator/, -f omnetpp.ini -c Step8B -r 0, 100s, b1ac-8912/tplx;12a6-f004/~tNl;96e2-030b/~tND;af16-1150/tyf, PASS, wireless EthernetMac Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step9 -r 0, 100s, 3383-4549/tplx;4ff7-140d/~tNl;75f7-37ae/~tND;c38c-98ef/tyf, PASS, wireless EthernetMac Ipv4 /tutorials/configurator/, -f omnetpp.ini -c Step10A -r 0, 100s, 4b6f-7cd9/tplx;0000-0000/~tNl;0000-0000/~tND;095d-75bd/tyf, PASS, wireless # Step10A extended /tutorials/configurator/, -f omnetpp.ini -c Step10B -r 0, 100s, 4b6f-7cd9/tplx;0000-0000/~tNl;0000-0000/~tND;4d60-fcf9/tyf, PASS, wireless # Step10B extended /tutorials/configurator/, -f omnetpp.ini -c Step10C -r 0, 100s, 71f5-b341/tplx;4a61-20ba/~tNl;707b-bb40/~tND;f078-56fe/tyf, PASS, wireless Ipv4 /tutorials/configurator/, -f omnetpp.ini -c Step11A -r 0, 500s, 0000-0000/tplx;0000-0000/~tNl;0000-0000/~tND;0000-0000/tyf, PASS, /tutorials/configurator/, -f omnetpp.ini -c Step11B -r 0, 500s, 49cf-d241/tplx;725c-f075/~tNl;15a3-3f79/~tND;7082-ff49/tyf, PASS, EthernetMac Ipv4 -/tutorials/configurator/, -f omnetpp.ini -c Step12 -r 0, 100s, 0b02-3ec4/tplx;d302-92c4/~tNl;b80a-2148/~tND;4b03-e5a1/tyf, PASS, wireless EthernetMac Ipv4 +/tutorials/configurator/, -f omnetpp.ini -c Step12 -r 0, 100s, e75f-2a09/tplx;d302-92c4/~tNl;b67b-3f1f/~tND;4b03-e5a1/tyf, PASS, wireless EthernetMac Ipv4 /tutorials/rip/, -f omnetpp.ini -c Step1 -r 0, 100s, 2c94-a8bb/tplx;b4e0-1e61/~tNl;4bd3-4530/~tND;1e4a-2625/tyf, PASS, /tutorials/rip/, -f omnetpp.ini -c Step2 -r 0, 100s, 6019-f318/tplx;9372-788f/~tNl;dec7-8e56/~tND;a345-d423/tyf, PASS, # Step2 extended diff --git a/tests/module/Ieee80211BeaconSchedule_1.test b/tests/module/Ieee80211BeaconSchedule_1.test index 74f4552b96c..11317942d85 100644 --- a/tests/module/Ieee80211BeaconSchedule_1.test +++ b/tests/module/Ieee80211BeaconSchedule_1.test @@ -1,5 +1,8 @@ %description: -Verify real AP target spacing and advertised Beacon/Probe Response intervals. +Verify real AP initialization, beacon target scheduling, Beacon/Probe Response +construction, and standard-channel advertisement with 2.4 GHz and 5 GHz radios. +Verify initial and runtime channel signals, including band-only changes and +notifications without band details. %file: TestBeaconSchedule.cc #include "inet/common/packet/Packet.h" @@ -30,6 +33,7 @@ Define_Module(TestPreconfiguredRadio); class TestMgmtAp : public Ieee80211MgmtAp { public: + using Ieee80211MgmtApBase::getDsssParameterSetChannel; using Ieee80211MgmtApBase::getHtOperationBand; std::vector targets; Ptr lastBeacon; @@ -94,13 +98,23 @@ void TestBeaconSchedule::activity() for (const auto& body : {ap->lastBeacon, ap->lastProbe}) { ASSERT(body != nullptr); ASSERT(body->getBeaconInterval() == interval); + ASSERT(body->getChannelNumber() == (band24 ? 1 : -1)); if (strcmp(name, "apn") == 0) { ASSERT(body->getHtOperationPresent()); + ASSERT(body->getHtOperation().primaryChannel == body->getChannelNumber()); } Packet packet("body", body); auto bytes = packet.peekDataAsBytes()->getBytes(); ASSERT(bytes.size() == body->getChunkLength().get()); ASSERT(bytes[8] == (band24 ? 97 : 100) && bytes[9] == 0); + bool found = false; + for (size_t offset = 12; offset + 1 < bytes.size(); offset += 2 + bytes[offset + 1]) { + if (bytes[offset] == 3) { + ASSERT(bytes[offset + 1] == 1 && bytes[offset + 2] == 1); + found = true; + } + } + ASSERT(found == band24); } } using namespace inet::physicallayer; @@ -109,17 +123,24 @@ void TestBeaconSchedule::activity() auto radio = check_and_cast(simulation->getModuleByPath("ap24.wlan[0].radio")); wait(0.001); radio->setChannelNumber(5); + ASSERT(ap->getDsssParameterSetChannel() == 6); ap->requestProbe(); + ASSERT(ap->lastProbe->getChannelNumber() == 6); wait(0.001); radio->setChannel(new Ieee80211Channel(&Ieee80211CompliantBands::band5GHz, 0)); + ASSERT(ap->getDsssParameterSetChannel() == -1); ASSERT(ap->getHtOperationBand() == &Ieee80211CompliantBands::band5GHz); ap->requestProbe(); + ASSERT(ap->lastProbe->getChannelNumber() == -1); wait(0.001); radio->setBand(&Ieee80211CompliantBands::band2_4GHz); + ASSERT(ap->getDsssParameterSetChannel() == 1); ap->requestProbe(); + ASSERT(ap->lastProbe->getChannelNumber() == 1); // A legacy notification must invalidate the previous band observation. radio->emit(Ieee80211Radio::radioChannelChangedSignal, 0L); + ASSERT(ap->getDsssParameterSetChannel() == -1); bool rejected = false; try { ap->getHtOperationBand(); } catch (const cRuntimeError&) { rejected = true; } @@ -129,14 +150,43 @@ void TestBeaconSchedule::activity() Ieee80211RadioChannelChangedDetails details(&Ieee80211CompliantBands::band2_4GHz); radio->emit(Ieee80211Radio::radioChannelChangedSignal, 0L, &details); } + ASSERT(ap->getDsssParameterSetChannel() == 1); auto htAp = check_and_cast(simulation->getModuleByPath("apn.wlan[0].mgmt")); auto htRadio = check_and_cast(simulation->getModuleByPath("apn.wlan[0].radio")); wait(0.001); htRadio->setChannelNumber(5); htAp->requestProbe(); + ASSERT(htAp->lastProbe->getChannelNumber() == 6); ASSERT(htAp->lastProbe->getHtOperation().primaryChannel == 6); - EV << "AP beacon targets and interval advertisements verified.\n"; + // Nonstandard legacy bands may have no standards channel mapping. Exercise + // the real timer-driven Beacon and Probe Response factories in both cases. + static const Ieee80211EnumeratedBand unmappedBand("unmapped-2.4", {GHz(2.412)}); + static const Ieee80211EnumeratedBand mappedBand("mapped-2.4", {GHz(2.412)}, {1}); + for (const auto *band : {&unmappedBand, &mappedBand}) { + wait(0.001); + radio->setChannel(new Ieee80211Channel(band, 0)); + auto previousBeacon = ap->lastBeacon; + wait(0.11); // Longer than one 97-TU beacon interval. + ASSERT(ap->lastBeacon != previousBeacon); + ap->requestProbe(); + int expectedChannel = band == &mappedBand ? 1 : -1; + for (const auto& body : {ap->lastBeacon, ap->lastProbe}) { + ASSERT(body->getChannelNumber() == expectedChannel); + Packet packet("custom-band-body", body); + const auto bytes = packet.peekDataAsBytes()->getBytes(); + ASSERT(bytes.size() == body->getChunkLength().get()); + bool found = false; + for (size_t offset = 12; offset + 1 < bytes.size(); offset += 2 + bytes[offset + 1]) { + if (bytes[offset] == 3) { + ASSERT(bytes[offset + 1] == 1 && bytes[offset + 2] == expectedChannel); + found = true; + } + } + ASSERT(found == (expectedChannel != -1)); + } + } + EV << "AP beacon targets and channel advertisements verified.\n"; } } // namespace Ieee80211BeaconSchedule_1 @@ -181,7 +231,7 @@ network TestNetwork ned-path = .;../../../../src;../../lib network = TestNetwork seed-set = 0 -sim-time-limit = 0.36s +sim-time-limit = 0.65s **.wlan[*].mgmt.typename = "TestMgmtAp" **.wlan[*].mgmt.ssid = "test" *.ap24.wlan[*].opMode = "g(mixed)" @@ -203,4 +253,4 @@ sim-time-limit = 0.36s **.mobility.initFromDisplayString = false %contains: stdout -AP beacon targets and interval advertisements verified. +AP beacon targets and channel advertisements verified. diff --git a/tests/unit/Ieee80211BeaconWire_1.test b/tests/unit/Ieee80211BeaconWire_1.test index 4d044ee0f35..9a64ba67047 100644 --- a/tests/unit/Ieee80211BeaconWire_1.test +++ b/tests/unit/Ieee80211BeaconWire_1.test @@ -1,5 +1,6 @@ %description: -Check beacon interval bounds, Beacon/Probe Response interval bytes, and mesh reason code 62. +Check beacon interval bounds and independent Beacon/Probe Response wire bytes, +DSSS element absence, malformed lengths, duplicates, and mesh reason code 62. %includes: #include "inet/common/packet/Packet.h" @@ -49,22 +50,31 @@ for (bool probe : {false, true}) { } // Timestamp=0, Interval=97 TU, Capability=0, SSID="", Supported Rate=1 Mbps. const std::vector prefix = {0,0,0,0,0,0,0,0,97,0,0,0,0,0,1,1,2}; - { + for (int channel : {-1, 1, 14}) { Ptr frame = probe ? staticPtrCast(makeShared()) : makeShared(); frame->setSSID(""); frame->setBeaconInterval(normalizeIeee80211BeaconInterval(SimTime(100, SIMTIME_MS))); + frame->setChannelNumber(channel); Ieee80211SupportedRatesElement rates; rates.numRates = 1; rates.rate[0] = 1; frame->setSupportedRates(rates); auto expected = prefix; + if (channel != -1) + expected.insert(expected.end(), {3, 1, static_cast(channel)}); frame->setChunkLength(B(expected.size())); Packet packet("beacon", frame); ASSERT(packet.peekDataAsBytes()->getBytes() == expected); auto decoded = decode(probe, expected); ASSERT(decoded->isCorrect()); + ASSERT(decoded->getChannelNumber() == channel); ASSERT(decoded->getBeaconInterval() == SimTime(99328, SIMTIME_US)); } + for (const auto& suffix : std::vector>{{3,0}, {3,2,1,2}, {3,1,0}, {3,1}, {3,1,1,3,1,2}}) { + auto bytes = prefix; + bytes.insert(bytes.end(), suffix.begin(), suffix.end()); + ASSERT(decode(probe, bytes)->isIncorrect()); + } } ASSERT(RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION == 62); auto reason = makeShared(); @@ -72,7 +82,7 @@ reason->setReasonCode(RC_MESH_PATH_ERROR_NO_FORWARDING_INFORMATION); reason->setChunkLength(B(2)); Packet reasonPacket("reason", reason); ASSERT(reasonPacket.peekDataAsBytes()->getBytes() == std::vector({62, 0})); -EV << "Beacon interval and mesh reason wire checks passed.\n"; +EV << "Beacon interval, DSSS element and mesh reason wire checks passed.\n"; %contains: stdout -Beacon interval and mesh reason wire checks passed. +Beacon interval, DSSS element and mesh reason wire checks passed. diff --git a/tests/unit/Ieee80211MgmtStaDiscovery_1.test b/tests/unit/Ieee80211MgmtStaDiscovery_1.test index 42f18041e98..ee8083a8399 100644 --- a/tests/unit/Ieee80211MgmtStaDiscovery_1.test +++ b/tests/unit/Ieee80211MgmtStaDiscovery_1.test @@ -1,7 +1,7 @@ %description: Verify that serialized Beacon and Probe Response discovery preserves the HT Operation primary channel as the cached AP channel, while legacy discovery -continues to use channelNumber (including channel 0). +converts the DSSS Parameter Set channel to the internal index (including index 0). %includes: #include "inet/common/packet/Packet.h" @@ -38,7 +38,7 @@ static Ptr makeDiscovery(bool probeResponse, int channelNu rates.rate[0] = 6; body->setSupportedRates(rates); body->setBeaconInterval(SimTime(100, SIMTIME_MS)); - body->setChannelNumber(channelNumber); + body->setChannelNumber(channelNumber + 1); if (withHt) { Ieee80211HtCapabilities capabilities; capabilities.supportedChannelWidths.insert(MHz(20)); @@ -51,7 +51,7 @@ static Ptr makeDiscovery(bool probeResponse, int channelNu const auto *band = &physicallayer::Ieee80211CompliantBands::band2_4GHz; setHtOperation(body, band, operation); } - body->setChunkLength(B(8 + 2 + 2 + (2 + 10)) + B(3) + getHtMgmtElementsLength(body)); + body->setChunkLength(B(8 + 2 + 2 + (2 + 10)) + B(6) + getHtMgmtElementsLength(body)); return body; } @@ -76,6 +76,9 @@ static void storeSerializedDiscovery(TestIeee80211MgmtSta& sta, const PtrgetChannelIndex(original->getChannelNumber())); + encoded.addTag()->setChannel(&channel); auto header = makeShared(); header->setTransmitterAddress(address); sta.storeAPInfo(&encoded, header, decoded); @@ -92,7 +95,7 @@ static bool storePacketDomainDiscovery(TestIeee80211MgmtSta& sta, const PtrgetHtOperationPresent() ? (receivedChannelIndex >= 0 ? receivedChannelIndex : band->getChannelIndex(body->getHtOperation().primaryChannel)) : 0; physicallayer::Ieee80211Channel channel(band, channelIndex); - if (body->getHtOperationPresent() && addChannelInd) + if (addChannelInd) packet.addTag()->setChannel(&channel); auto header = makeShared(); header->setTransmitterAddress(address); @@ -106,7 +109,6 @@ const MacAddress beaconAddress("02:00:00:00:00:01"); const MacAddress probeAddress("02:00:00:00:00:02"); const MacAddress legacyAddress("02:00:00:00:00:03"); -// The serialized body has the fixed channelNumber at its default value, but // HT Operation carries the standards-facing primary channel (Table 9-230/11.14), // which is converted to the internal received channel index. storeSerializedDiscovery(sta, makeDiscovery(false, 0, 6, true), beaconAddress); @@ -115,7 +117,7 @@ sta.changeChannel(sta.lookupAP(beaconAddress)->channel); ASSERT(sta.changedChannel == 6); // Probe Response follows the same discovery rule. Its concrete subtype is -// decoded above, and the serialized fixed channel field is ignored in favor +// decoded above, and the serialized DSSS channel field is ignored in favor // of HT Operation. storeSerializedDiscovery(sta, makeDiscovery(true, 3, 13, true), probeAddress); ASSERT(sta.lookupAP(probeAddress)->channel == 13); @@ -261,14 +263,24 @@ invalidHt40Edge->setHtOperation(invalidHt40EdgeOperation); ASSERT(!storePacketDomainDiscovery(sta, invalidHt40Edge, probeAddress, 13)); ASSERT(sta.lookupAP(probeAddress)->channel == 12); -// Without HT Operation, preserve the packet-domain channelNumber exactly, -// including its legal/default value of zero. The management-body serializer -// does not encode the legacy field, so these assertions intentionally use the -// original packet-domain body. +// Without HT Operation, convert Current Channel to the internal index in both +// the packet and byte domains, including internal index zero (wire channel 1). storePacketDomainDiscovery(sta, makeDiscovery(false, 7, 0, false), legacyAddress); ASSERT(sta.lookupAP(legacyAddress)->channel == 7); storePacketDomainDiscovery(sta, makeDiscovery(false, 0, 0, false), legacyAddress); ASSERT(sta.lookupAP(legacyAddress)->channel == 0); +storeSerializedDiscovery(sta, makeDiscovery(false, 7, 0, false), legacyAddress); +ASSERT(sta.lookupAP(legacyAddress)->channel == 7); +storeSerializedDiscovery(sta, makeDiscovery(true, 0, 0, false), legacyAddress); +ASSERT(sta.lookupAP(legacyAddress)->channel == 0); +auto absentChannel = makeDiscovery(false, 0, 0, false); +absentChannel->setChannelNumber(-1); +ASSERT(storePacketDomainDiscovery(sta, absentChannel, legacyAddress)); +ASSERT(sta.lookupAP(legacyAddress)->channel == 0); +auto invalidChannel = makeDiscovery(false, 0, 0, false); +invalidChannel->setChannelNumber(99); +ASSERT(!storePacketDomainDiscovery(sta, invalidChannel, legacyAddress)); +ASSERT(sta.lookupAP(legacyAddress)->channel == 0); EV << "Serialized HT discovery channel and legacy fallback checks passed.\n";