diff --git a/WHATSNEW b/WHATSNEW index 5fdd7668423..63b321bb6b3 100644 --- a/WHATSNEW +++ b/WHATSNEW @@ -29,6 +29,25 @@ 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 + + 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. 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. + 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 942633d269f..eb949fac76b 100644 --- a/doc/src/migration-guide/index.rst +++ b/doc/src/migration-guide/index.rst @@ -4,6 +4,40 @@ Migrating Code from INET 3.x ============================ 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. + +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 +reinterpreted automatically: it also denoted invalid mesh security capability. + Migrating ``FieldsChunkSerializer`` Subclasses --------------------------------------------- @@ -381,4 +415,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/Ieee80211MacHeaderSerializer.cc b/src/inet/linklayer/ieee80211/mac/Ieee80211MacHeaderSerializer.cc index d6c90abeb3c..2de10f26196 100644 --- a/src/inet/linklayer/ieee80211/mac/Ieee80211MacHeaderSerializer.cc +++ b/src/inet/linklayer/ieee80211/mac/Ieee80211MacHeaderSerializer.cc @@ -345,10 +345,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()); @@ -601,10 +603,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/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc b/src/inet/linklayer/ieee80211/mac/duplicateremoval/QosDuplicateRemoval.cc index 361208a5f10..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); @@ -51,4 +53,3 @@ bool QoSDuplicateRemoval::isDuplicate(const Ptr } // namespace ieee80211 } // namespace inet - 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..1b52306987e 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); @@ -209,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); } @@ -525,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/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/Ieee80211MgmtApBase.cc b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.cc index 329f439ccc0..66c0bc25611 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,38 @@ 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; +} + +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; + return radioBand->getStandardChannelNumber(channelIndex); } } // namespace ieee80211 diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h index 4e3b095597e..6fb1cdfc3e8 100644 --- a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h +++ b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtApBase.h @@ -31,8 +31,10 @@ 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; + int getDsssParameterSetChannel() const; virtual int numInitStages() const override { return NUM_INIT_STAGES; } virtual void initialize(int) override; @@ -45,4 +47,3 @@ class INET_API Ieee80211MgmtApBase : public Ieee80211MgmtBase } // namespace inet #endif - diff --git a/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg b/src/inet/linklayer/ieee80211/mgmt/Ieee80211MgmtFrame.msg index 47632a7a5cd..69e062af31a 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; @@ -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 09f3ffbd05b..694e0698342 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 { @@ -32,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; @@ -51,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 @@ -93,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); @@ -318,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(); @@ -593,7 +625,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) @@ -606,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. @@ -632,7 +663,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 @@ -645,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/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211OfdmRadio.cc b/src/inet/physicallayer/wireless/ieee80211/bitlevel/Ieee80211OfdmRadio.cc index 26a781952f2..5b24c264a6e 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,17 @@ 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)); + if (!isIeee80211OfdmSignalValid(signalField)) { + 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 56114b6c2c6..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" @@ -19,6 +20,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" @@ -49,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); + } + } } } @@ -109,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); } @@ -121,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); } @@ -136,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); } @@ -238,9 +252,17 @@ 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)) { + 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); @@ -255,14 +277,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())) @@ -278,6 +300,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)) @@ -334,4 +362,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..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); @@ -57,4 +59,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..86b85675aa6 100644 --- a/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned +++ b/src/inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Radio.ned @@ -46,7 +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/fingerprint/examples.csv b/tests/fingerprint/examples.csv index 696ba2cb33b..d62ca9ce113 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;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;5aaf-cc7c/~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 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;552a-9859/~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, 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, 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, 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, @@ -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, 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 /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, 592d-479b/tplx;936f-4f45/~tNl;8ffd-df9a/~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;d0ca-c74e/~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;540d-c0a4/~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;8fe3-d7a6/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 -/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, d094-b008/tplx;173a-e3fb/~tNl;7147-4f5b/~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;798e-0591/~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;9965-06a2/~tND;b2d6-1329/tyf, PASS, wireless Ipv4 +/examples/wireless/qos/, -f omnetpp.ini -c MacQosWithBlockAck -r 0, 10s, d36c-2a5a/tplx;a8c3-d9fe/~tNl;99d4-87e5/~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, 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 ef401f4edb1..56088c7d615 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, 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;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, 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 @@ -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, 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, 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, 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;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, 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;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, 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 /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;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;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;1470-1e1b/~tND, PASS, wireless Ipv4 -/showcases/wireless/blockack/, -f omnetpp.ini -c Fragmentation -r 0, 1s, 7ae9-e07d/tplx;db8b-3b81/~tNl;9c41-dc97/~tND, PASS, wireless Ipv4 -/showcases/wireless/blockack/, -f omnetpp.ini -c MixedTraffic -r 0, 1s, 462d-10c7/tplx;727b-d26a/~tNl;62c4-cbc2/~tND, PASS, wireless Ipv4 +/showcases/wireless/blockack/, -f omnetpp.ini -c NoFragmentation -r 0, 1s, aa2d-5d35/tplx;2094-1f2a/~tNl;e97d-19a8/~tND, PASS, wireless Ipv4 +/showcases/wireless/blockack/, -f omnetpp.ini -c Fragmentation -r 0, 1s, 7ae9-e07d/tplx;db8b-3b81/~tNl;b8bf-2e1b/~tND, PASS, wireless Ipv4 +/showcases/wireless/blockack/, -f omnetpp.ini -c MixedTraffic -r 0, 1s, 462d-10c7/tplx;727b-d26a/~tNl;f27f-39c6/~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;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;9a04-4420/~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;c701-01ea/~tND;6f6e-b101/tyf, PASS, wireless Ipv4 + +/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 +/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, 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;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;10fc-7bb0/~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;18e1-c251/~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..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, 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, 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;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, 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/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 5db13b43fb1..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 @@ -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/Ieee80211BeaconSchedule_1.test b/tests/unit/Ieee80211BeaconSchedule_1.test new file mode 100644 index 00000000000..088d76e309a --- /dev/null +++ b/tests/unit/Ieee80211BeaconSchedule_1.test @@ -0,0 +1,208 @@ +%description: +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. + +%includes: +#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: + using Ieee80211MgmtApBase::getDsssParameterSetChannel; + 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); +} + +%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; + +module TestPreconfiguredRadio extends Ieee80211ScalarRadio +{ + parameters: + @class(TestPreconfiguredRadio); +} + +simple TestMgmtAp extends Ieee80211MgmtAp +{ + parameters: + @class(TestMgmtAp); +} + +network TestNetwork +{ + submodules: + test: Test; + radioMedium: Ieee80211ScalarRadioMedium; + ap24: AccessPoint; + ap5: AccessPoint; + apn: AccessPoint; + apb: 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 +*.apb.wlan[*].opMode = "b" +*.apb.wlan[*].radio.channelNumber = -1 +*.apb.wlan[*].radio.typename = "TestPreconfiguredRadio" +**.mobility.initialX = 0m +**.mobility.initialY = 0m +**.mobility.initialZ = 0m +**.mobility.initFromDisplayString = false + +%activity: +wait(0.35); +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; + 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); + 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; +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); +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; } +ASSERT(rejected); +// Details are consumed synchronously; they do not need to survive emission. +{ + 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 channel advertisements verified.\n"; + +%contains: stdout +AP beacon targets and channel advertisements verified. diff --git a/tests/unit/Ieee80211BeaconWire_1.test b/tests/unit/Ieee80211BeaconWire_1.test new file mode 100644 index 00000000000..9a64ba67047 --- /dev/null +++ b/tests/unit/Ieee80211BeaconWire_1.test @@ -0,0 +1,88 @@ +%description: +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" +#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}; + 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(); +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, DSSS element and mesh reason wire checks passed.\n"; + +%contains: stdout +Beacon interval, DSSS element 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()); 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"; 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); 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. diff --git a/tests/unit/Ieee80211RadioWireIdentity_1.test b/tests/unit/Ieee80211RadioWireIdentity_1.test new file mode 100644 index 00000000000..fde28f1580a --- /dev/null +++ b/tests/unit/Ieee80211RadioWireIdentity_1.test @@ -0,0 +1,133 @@ +%description: +Exercise real packet-level and bit-level radio encapsulation/decapsulation, +derived PHY factories and tags, 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; } +}; + +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[] = { + &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)); + 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)); + } +} +EV << "Radio PHY identity and SIGNAL validation verified.\n"; + +%contains: stdout +Radio PHY identity and SIGNAL validation verified.