|
1 | 1 | %description: |
2 | 2 | Checks that the 802.11n mixed and Greenfield mode profiles preserve distinct |
3 | | -preamble formats and timing, retain strict membership and supplementary Greenfield control-response support, including legacy fallback rates. Also checks VHT cache identity. |
| 3 | +preamble formats and timing, retain strict membership, and support the legacy |
| 4 | +2.4 GHz HT capabilities used for non-HT control responses. Also checks VHT cache identity. |
4 | 5 |
|
5 | 6 | %includes: |
6 | 7 | #include <cstring> |
7 | 8 |
|
8 | 9 | #include "inet/common/packet/Packet.h" |
| 10 | +#include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211DsssMode.h" |
9 | 11 | #include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211DsssOfdmMode.h" |
10 | 12 | #include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211ErpOfdmMode.h" |
| 13 | +#include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211HrDsssMode.h" |
11 | 14 | #include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211HtMode.h" |
12 | 15 | #include "inet/physicallayer/wireless/ieee80211/mode/Ieee80211ModeSet.h" |
13 | 16 | #include "inet/physicallayer/wireless/ieee80211/packetlevel/Ieee80211Transmitter.h" |
@@ -94,10 +97,38 @@ ASSERT(mixedProfile->supportsMode(mixedMode)); |
94 | 97 | ASSERT(greenfieldProfile->supportsMode(greenfieldMode)); |
95 | 98 | ASSERT(greenfieldProfile->supportsMode(mixedMode)); |
96 | 99 | ASSERT(!mixedProfile->supportsMode(greenfieldMode)); |
97 | | -ASSERT(!mixedProfile->supportsMode(&Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps)); |
98 | | -ASSERT(!mixedProfile->containsMode(&Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps)); |
99 | | -ASSERT(greenfieldProfile->supportsMode(&Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps)); |
100 | | -ASSERT(mixedProfile->getNonHtControlResponseMode(mixedMode) == mixedMode); |
| 100 | +ASSERT(mixedProfile->getSifsTime() == SimTime(10, SIMTIME_US)); |
| 101 | +ASSERT(greenfieldProfile->getSifsTime() == SimTime(10, SIMTIME_US)); |
| 102 | +ASSERT(mixedProfile->getSlotTime() == SimTime(20, SIMTIME_US)); |
| 103 | +ASSERT(greenfieldProfile->getSlotTime() == SimTime(20, SIMTIME_US)); |
| 104 | +ASSERT(mixedProfile->getCwMin() == 15); |
| 105 | +ASSERT(greenfieldProfile->getCwMin() == 15); |
| 106 | +const IIeee80211Mode *mandatoryLegacyModes[] = { |
| 107 | + &Ieee80211DsssCompliantModes::dsssMode1Mbps, |
| 108 | + &Ieee80211DsssCompliantModes::dsssMode2Mbps, |
| 109 | + &Ieee80211HrDsssCompliantModes::hrDsssMode2MbpsShortPreamble, |
| 110 | + &Ieee80211HrDsssCompliantModes::hrDsssMode5_5MbpsCckLongPreamble, |
| 111 | + &Ieee80211HrDsssCompliantModes::hrDsssMode5_5MbpsCckShortPreamble, |
| 112 | + &Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps, |
| 113 | + &Ieee80211HrDsssCompliantModes::hrDsssMode11MbpsCckLongPreamble, |
| 114 | + &Ieee80211HrDsssCompliantModes::hrDsssMode11MbpsCckShortPreamble, |
| 115 | + &Ieee80211ErpOfdmCompliantModes::erpOfdmMode12Mbps, |
| 116 | + &Ieee80211ErpOfdmCompliantModes::erpOfdmMode24Mbps, |
| 117 | +}; |
| 118 | +for (auto legacyMode : mandatoryLegacyModes) { |
| 119 | + ASSERT(mixedProfile->supportsMode(legacyMode)); |
| 120 | + ASSERT(greenfieldProfile->supportsMode(legacyMode)); |
| 121 | + ASSERT(!mixedProfile->containsMode(legacyMode)); |
| 122 | + ASSERT(!greenfieldProfile->containsMode(legacyMode)); |
| 123 | +} |
| 124 | +ASSERT(Ieee80211DsssCompliantModes::dsssMode1Mbps.getDataMode()->getBandwidth() == MHz(22)); |
| 125 | +ASSERT(Ieee80211DsssCompliantModes::dsssMode2Mbps.getDataMode()->getBandwidth() == MHz(22)); |
| 126 | +ASSERT(Ieee80211HrDsssCompliantModes::hrDsssMode2MbpsShortPreamble.getDataMode()->getBandwidth() == MHz(22)); |
| 127 | +ASSERT(Ieee80211HrDsssCompliantModes::hrDsssMode5_5MbpsCckLongPreamble.getDataMode()->getBandwidth() == MHz(22)); |
| 128 | +ASSERT(Ieee80211HrDsssCompliantModes::hrDsssMode5_5MbpsCckShortPreamble.getDataMode()->getBandwidth() == MHz(22)); |
| 129 | +ASSERT(Ieee80211HrDsssCompliantModes::hrDsssMode11MbpsCckLongPreamble.getDataMode()->getBandwidth() == MHz(22)); |
| 130 | +ASSERT(Ieee80211HrDsssCompliantModes::hrDsssMode11MbpsCckShortPreamble.getDataMode()->getBandwidth() == MHz(22)); |
| 131 | +ASSERT(mixedProfile->getNonHtControlResponseMode(mixedMode) == &Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps); |
101 | 132 | ASSERT(greenfieldProfile->getNonHtControlResponseMode(greenfieldMode) == &Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps); |
102 | 133 | ASSERT(greenfieldProfile->getNonHtControlResponseMode(&Ieee80211ErpOfdmCompliantModes::erpOfdmMode9Mbps) == &Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps); |
103 | 134 | ASSERT(mixedProfile->getControlResponseMode(mixedMode) == mixedMode); |
@@ -146,9 +177,9 @@ ASSERT(configuredMixedResponse->getDataMode()->getMcsIndex() == greenfieldMcs15- |
146 | 177 | ASSERT(configuredMixedResponse->getDataMode()->getBandwidth() == greenfieldMcs15->getDataMode()->getBandwidth()); |
147 | 178 | ASSERT(configuredMixedResponse->getDataMode()->getNumberOfSpatialStreams() == greenfieldMcs15->getDataMode()->getNumberOfSpatialStreams()); |
148 | 179 | ASSERT(configuredMixedResponse->getDataMode()->getGuardIntervalType() == greenfieldMcs15->getDataMode()->getGuardIntervalType()); |
149 | | -ASSERT(mixedProfile->getMandatoryControlResponseMode(mixedMcs7) == mixedMcs7); |
150 | | -ASSERT(mixedProfile->getMandatoryControlResponseMode(mixedMcs15) == mixedMcs7); |
151 | | -ASSERT(mixedProfile->getNonHtControlResponseMode(mixedMcs15, false) == mixedMcs15); |
| 180 | +ASSERT(mixedProfile->getMandatoryControlResponseMode(mixedMcs7) == &Ieee80211ErpOfdmCompliantModes::erpOfdmMode24Mbps); |
| 181 | +ASSERT(mixedProfile->getMandatoryControlResponseMode(mixedMcs15) == &Ieee80211ErpOfdmCompliantModes::erpOfdmMode24Mbps); |
| 182 | +ASSERT(mixedProfile->getNonHtControlResponseMode(mixedMcs15, false) == &Ieee80211ErpOfdmCompliantModes::erpOfdmMode24Mbps); |
152 | 183 |
|
153 | 184 | auto greenfieldMcs8Bw40 = Ieee80211HtCompliantModes::getCompliantMode( |
154 | 185 | &Ieee80211HtmcsTable::htMcs8BW40MHz, |
@@ -178,13 +209,22 @@ Packet supportedLegacyPacket("supportedLegacy"); |
178 | 209 | supportedLegacyPacket.addTag<Ieee80211ModeReq>()->setMode(&Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps); |
179 | 210 | ASSERT(transmitter->getTestTransmissionMode(&supportedLegacyPacket) == &Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps); |
180 | 211 | transmitter->setModeSet(mixedProfile); |
| 212 | +ASSERT(transmitter->getTestTransmissionMode(&supportedLegacyPacket) == &Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps); |
181 | 213 | try { |
182 | | - transmitter->getTestTransmissionMode(&supportedLegacyPacket); |
| 214 | + transmitter->setMode(&Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps); |
183 | 215 | ASSERT(false); |
184 | 216 | } |
185 | 217 | catch (const cRuntimeError&) { |
| 218 | + ASSERT(transmitter->getTestMode() == mixedMode); |
186 | 219 | } |
187 | 220 | transmitter->setModeSet(greenfieldProfile); |
| 221 | +try { |
| 222 | + transmitter->setMode(&Ieee80211ErpOfdmCompliantModes::erpOfdmMode6Mbps); |
| 223 | + ASSERT(false); |
| 224 | +} |
| 225 | +catch (const cRuntimeError&) { |
| 226 | + ASSERT(transmitter->getTestMode() == greenfieldMode); |
| 227 | +} |
188 | 228 | try { |
189 | 229 | transmitter->setMode(mixedMode); |
190 | 230 | ASSERT(false); |
|
0 commit comments