/* * Copyright (c) 2005-2010 KOM – Multimedia Communications Lab * * This file is part of PeerfactSim.KOM. * * PeerfactSim.KOM is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * any later version. * * PeerfactSim.KOM is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with PeerfactSim.KOM. If not, see . * */ package de.tud.kom.p2psim.api.topology.views.wifi.phy; import java.util.List; import java.util.Vector; import de.tud.kom.p2psim.api.topology.views.wifi.phy.WifiMode.WifiCodeRate; import de.tud.kom.p2psim.api.topology.views.wifi.phy.WifiMode.WifiModulationClass; import de.tud.kom.p2psim.impl.linklayer.mac.wifi.AbstractRateManager; import de.tud.kom.p2psim.impl.linklayer.mac.wifi.DcfManager; /** * This class defines the possible {@link WifiMode}s. Additionally it defines * the {@link Standard_802_11} with all needed Information for the DCF.
* Hence it has methods to calculate the duration of a packet. This is in WiFi * tricky, because the preamble must be added and the packet must be filled up * to a multiple of the coding scheme. * *

* * This class based on NS3 (src/wifi/model/wifi-phy.cc). * * @author Christoph Muenker * @version 1.0, 28.02.2013 */ public abstract class WifiPhy { public static long _5000MHZ = 5000000000l; public static long _2407MHZ = 2407000000l; /** * This contains the parameter for the {@link DcfManager} and the * {@link AbstractRateManager} for the standard. * * @author Christoph Muenker * @version 1.0, 28.02.2013 */ public enum Standard_802_11 { a(_5000MHZ), b(_2407MHZ), g(_2407MHZ); static { a.setCwMin(15); a.setCwMax(1023); a.setSifs(16); a.setSlotTime(9); a.setDifs(16 + 2 * 9); a.setEifs(16 + 44 + 34); a.setCtsTimeout(16 + 44 + 9); a.setDefaultMode(getOfdmRate6Mbps()); b.setCwMin(31); b.setCwMax(1023); b.setSifs(10); b.setSlotTime(20); b.setDifs(10 + 2 * 20); b.setEifs(10 + 304 + 50); b.setCtsTimeout(10 + 304 + 20); b.setDefaultMode(getDsssRate1Mbps()); g.setCwMin(15); g.setCwMax(1023); g.setSifs(10); g.setSlotTime(20); // Short and Long? g.setDifs(10 + 2 * 20); g.setEifs(10 + 304 + 50); g.setCtsTimeout(10 + 304 + 20); g.setDefaultMode(getDsssRate1Mbps()); a.addWifiMode(WifiPhy.getOfdmRate6Mbps()); a.addWifiMode(WifiPhy.getOfdmRate9Mbps()); a.addWifiMode(WifiPhy.getOfdmRate12Mbps()); a.addWifiMode(WifiPhy.getOfdmRate18Mbps()); a.addWifiMode(WifiPhy.getOfdmRate24Mbps()); a.addWifiMode(WifiPhy.getOfdmRate36Mbps()); a.addWifiMode(WifiPhy.getOfdmRate48Mbps()); a.addWifiMode(WifiPhy.getOfdmRate54Mbps()); b.addWifiMode(WifiPhy.getDsssRate1Mbps()); b.addWifiMode(WifiPhy.getDsssRate2Mbps()); b.addWifiMode(WifiPhy.getDsssRate5_5Mbps()); b.addWifiMode(WifiPhy.getDsssRate11Mbps()); g.addWifiMode(WifiPhy.getDsssRate1Mbps()); g.addWifiMode(WifiPhy.getDsssRate2Mbps()); g.addWifiMode(WifiPhy.getDsssRate5_5Mbps()); g.addWifiMode(WifiPhy.getDsssRate11Mbps()); g.addWifiMode(WifiPhy.getErpOfdmRate6Mbps()); g.addWifiMode(WifiPhy.getErpOfdmRate9Mbps()); g.addWifiMode(WifiPhy.getErpOfdmRate12Mbps()); g.addWifiMode(WifiPhy.getErpOfdmRate18Mbps()); g.addWifiMode(WifiPhy.getErpOfdmRate24Mbps()); g.addWifiMode(WifiPhy.getErpOfdmRate36Mbps()); g.addWifiMode(WifiPhy.getErpOfdmRate48Mbps()); g.addWifiMode(WifiPhy.getErpOfdmRate54Mbps()); } private long basicFrequency; private List modes = new Vector(); private WifiMode defaultMode; private long ctsTimeout; private long slotTime; private long eifs; private long difs; private long sifs; private int cwMax; private int cwMin; private Standard_802_11(long frequency) { this.basicFrequency = frequency; } public long getBasicFrequency() { return basicFrequency; } public WifiMode getDefaultMode() { return defaultMode; } public List getWifiModes() { return modes; } public long getCtsTimeout() { return ctsTimeout; } public long getSlotTime() { return slotTime; } public long getEifs() { return eifs; } public long getDifs() { return difs; } public long getSifs() { return sifs; } public int getCwMax() { return cwMax; } public int getCwMin() { return cwMin; } private void setCtsTimeout(long ctsTimeout) { this.ctsTimeout = ctsTimeout; } private void setSlotTime(long slotTime) { this.slotTime = slotTime; } private void setEifs(long eifs) { this.eifs = eifs; } private void setDifs(long difs) { this.difs = difs; } private void setSifs(long sifs) { this.sifs = sifs; } private void setCwMax(int cwMax) { this.cwMax = cwMax; } private void setCwMin(int cwMin) { this.cwMin = cwMin; } private void setDefaultMode(WifiMode defaultMode) { this.defaultMode = defaultMode; } private void addWifiMode(WifiMode mode) { this.modes.add(mode); } } /** * The type of preamble to be used by an IEEE 802.11 transmission */ public enum WifiPreamble { /** * Long Preamble */ WIFI_PREAMBLE_LONG, /** * Short Preamble */ WIFI_PREAMBLE_SHORT; } /** * Gets the PLCP Header Mode. * * Copied from NS3 (src/wifi/model/wifi-phy.cc). * * @param payloadMode * The payload {@link WifiMode} * @param preamble * The used preamble (normal the WIFI_PREAMBLE_LONG). * @return The {@link WifiMode} for the PLCP Header. */ public static WifiMode getPlcpHeaderMode(WifiMode payloadMode, WifiPreamble preamble) { switch (payloadMode.getModClass()) { case WIFI_MOD_CLASS_OFDM: { switch (payloadMode.getBandwidth()) { case 5000000: return getOfdmRate1_5MbpsBW5MHz(); case 10000000: return getOfdmRate3MbpsBW10MHz(); default: // IEEE Std 802.11-2007, 17.3.2 // actually this is only the first part of the PlcpHeader, // because the last 16 bits of the PlcpHeader are using the // same mode of the payload return getOfdmRate6Mbps(); } } case WIFI_MOD_CLASS_ERP_OFDM: return getErpOfdmRate6Mbps(); case WIFI_MOD_CLASS_DSSS: if (preamble == WifiPreamble.WIFI_PREAMBLE_LONG) { // IEEE Std 802.11-2007, sections 15.2.3 and 18.2.2.1 return getDsssRate1Mbps(); } else // WIFI_PREAMBLE_SHORT { // IEEE Std 802.11-2007, section 18.2.2.2 return getDsssRate2Mbps(); } default: throw new AssertionError("Unsupported Mod"); } } /** * Gets the PLCP Header duration in microseconds. * * Copied from NS3 (src/wifi/model/wifi-phy.cc). * * @param payloadMode * The payload {@link WifiMode} * @param preamble * The used preamble (normal the WIFI_PREAMBLE_LONG). * @return The PLCP Header duration in microseconds. */ public static long getPlcpHeaderDuration(WifiMode payloadMode, WifiPreamble preamble) { switch (payloadMode.getModClass()) { case WIFI_MOD_CLASS_OFDM: { switch (payloadMode.getBandwidth()) { case 20000000: default: // IEEE Std 802.11-2007, section 17.3.3 and figure 17-4 // also section 17.3.2.3, table 17-4 // We return the duration of the SIGNAL field only, since the // SERVICE field (which strictly speaking belongs to the PLCP // header, see section 17.3.2 and figure 17-1) is sent using the // payload mode. return 4; case 10000000: // IEEE Std 802.11-2007, section 17.3.2.3, table 17-4 return 8; case 5000000: // IEEE Std 802.11-2007, section 17.3.2.3, table 17-4 return 16; } } case WIFI_MOD_CLASS_ERP_OFDM: return 16; case WIFI_MOD_CLASS_DSSS: if (preamble == WifiPreamble.WIFI_PREAMBLE_SHORT) { // IEEE Std 802.11-2007, section 18.2.2.2 and figure 18-2 return 24; } else // WIFI_PREAMBLE_LONG { // IEEE Std 802.11-2007, sections 18.2.2.1 and figure 18-1 return 48; } default: throw new AssertionError("Unsupported Modulation"); } } /** * Gets the PLCP Preamble Duration in microseconds. * * Copied from NS3 (src/wifi/model/wifi-phy.cc). * * @param payloadMode * The payload {@link WifiMode} * @param preamble * The used preamble (normal the WIFI_PREAMBLE_LONG). * @return The PLCP preabmle duration in microseconds. */ public static long getPlcpPreambleDuration(WifiMode payloadMode, WifiPreamble preamble) { switch (payloadMode.getModClass()) { case WIFI_MOD_CLASS_OFDM: { switch (payloadMode.getBandwidth()) { case 20000000: default: // IEEE Std 802.11-2007, section 17.3.3, figure 17-4 // also section 17.3.2.3, table 17-4 return 16; case 10000000: // IEEE Std 802.11-2007, section 17.3.3, table 17-4 // also section 17.3.2.3, table 17-4 return 32; case 5000000: // IEEE Std 802.11-2007, section 17.3.3 // also section 17.3.2.3, table 17-4 return 64; } } case WIFI_MOD_CLASS_ERP_OFDM: return 4; case WIFI_MOD_CLASS_DSSS: if (preamble == WifiPreamble.WIFI_PREAMBLE_SHORT) { // IEEE Std 802.11-2007, section 18.2.2.2 and figure 18-2 return 72; } else // WIFI_PREAMBLE_LONG { // IEEE Std 802.11-2007, sections 18.2.2.1 and figure 18-1 return 144; } default: throw new AssertionError("Unsupported Modulation"); } } /** * Gets the Payload Duration for the size and the used payloadMode. * * Copied from NS3 (src/wifi/model/wifi-phy.cc). * * @param size * The size of the payload. * @param payloadMode * The payload mode. * @return The payload duration in mircoseconds. */ public static long getPayloadDuration(int size, WifiMode payloadMode) { switch (payloadMode.getModClass()) { case WIFI_MOD_CLASS_OFDM: case WIFI_MOD_CLASS_ERP_OFDM: { // IEEE Std 802.11-2007, section 17.3.2.3, table 17-4 // corresponds to T_{SYM} in the table int symbolDurationUs; switch (payloadMode.getBandwidth()) { case 20000000: default: symbolDurationUs = 4; break; case 10000000: symbolDurationUs = 8; break; case 5000000: symbolDurationUs = 16; break; } // IEEE Std 802.11-2007, section 17.3.2.2, table 17-3 // corresponds to N_{DBPS} in the table double numDataBitsPerSymbol = payloadMode.getDataRate() * symbolDurationUs / 1e6; // IEEE Std 802.11-2007, section 17.3.5.3, equation (17-11) int numSymbols = (int) Math.rint(Math.ceil((16 + size * 8.0 + 6.0) / numDataBitsPerSymbol)); // Add signal extension for ERP PHY if (payloadMode.getModClass() == WifiModulationClass.WIFI_MOD_CLASS_ERP_OFDM) { return numSymbols * symbolDurationUs + 6; } else { return numSymbols * symbolDurationUs; } } case WIFI_MOD_CLASS_DSSS: // IEEE Std 802.11-2007, section 18.2.3.5 return (long) Math.rint(Math.ceil((size * 8.0) / (payloadMode.getDataRate() / 1.0e6))); default: throw new AssertionError("Unsupported Modulation"); } } /** * Calculates the complete duration of the transmission. This includes the * preamble duration, the Header duration and the payload duration. * * @param size * The size of the payload. * @param payloadMode * The payload {@link WifiMode} * @param preamble * The used preamble (normal the WIFI_PREAMBLE_LONG). * @return The duration of the transmission in microseconds. */ public static long calculateTxDuration(int size, WifiMode payloadMode, WifiPreamble preamble) { long duration = getPlcpPreambleDuration(payloadMode, preamble) + getPlcpHeaderDuration(payloadMode, preamble) + getPayloadDuration(size, payloadMode); return duration; } /** * Clause 15 rates (DSSS) */ private static final WifiMode dsssRate1Mbps = new WifiMode("DsssRate1Mbps", WifiModulationClass.WIFI_MOD_CLASS_DSSS, true, 22000000, 1000000, WifiCodeRate.WIFI_CODE_RATE_UNDEFINED, 2); private static final WifiMode dsssRate2Mbps = new WifiMode("DsssRate2Mbps", WifiModulationClass.WIFI_MOD_CLASS_DSSS, true, 22000000, 2000000, WifiCodeRate.WIFI_CODE_RATE_UNDEFINED, 4); /** * Clause 18 rates (HR/DSSS) */ private static final WifiMode dsssRate5_5Mbps = new WifiMode( "DsssRate5_5Mbps", WifiModulationClass.WIFI_MOD_CLASS_DSSS, true, 22000000, 5500000, WifiCodeRate.WIFI_CODE_RATE_UNDEFINED, 4); private static final WifiMode dsssRate11Mbps = new WifiMode( "DsssRate11Mbps", WifiModulationClass.WIFI_MOD_CLASS_DSSS, true, 22000000, 11000000, WifiCodeRate.WIFI_CODE_RATE_UNDEFINED, 4); /** * Clause 19.5 rates (ERP-OFDM) */ private static final WifiMode erpOfdmRate6Mbps = new WifiMode( "ErpOfdmRate6Mbps", WifiModulationClass.WIFI_MOD_CLASS_ERP_OFDM, true, 20000000, 6000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 2); private static final WifiMode erpOfdmRate9Mbps = new WifiMode( "ErpOfdmRate9Mbps", WifiModulationClass.WIFI_MOD_CLASS_ERP_OFDM, false, 20000000, 9000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 2); private static final WifiMode erpOfdmRate12Mbps = new WifiMode( "ErpOfdmRate12Mbps", WifiModulationClass.WIFI_MOD_CLASS_ERP_OFDM, true, 20000000, 12000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 4); private static final WifiMode erpOfdmRate18Mbps = new WifiMode( "ErpOfdmRate18Mbps", WifiModulationClass.WIFI_MOD_CLASS_ERP_OFDM, false, 20000000, 18000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 4); private static final WifiMode erpOfdmRate24Mbps = new WifiMode( "ErpOfdmRate24Mbps", WifiModulationClass.WIFI_MOD_CLASS_ERP_OFDM, true, 20000000, 24000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 16); private static final WifiMode erpOfdmRate36Mbps = new WifiMode( "ErpOfdmRate36Mbps", WifiModulationClass.WIFI_MOD_CLASS_ERP_OFDM, false, 20000000, 36000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 16); private static final WifiMode erpOfdmRate48Mbps = new WifiMode( "ErpOfdmRate48Mbps", WifiModulationClass.WIFI_MOD_CLASS_ERP_OFDM, false, 20000000, 48000000, WifiCodeRate.WIFI_CODE_RATE_2_3, 64); private static final WifiMode erpOfdmRate54Mbps = new WifiMode( "ErpOfdmRate54Mbps", WifiModulationClass.WIFI_MOD_CLASS_ERP_OFDM, false, 20000000, 54000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 64); /** * Clause 17 rates (OFDM) */ private static final WifiMode ofdmRate6Mbps = new WifiMode("OfdmRate6Mbps", WifiModulationClass.WIFI_MOD_CLASS_OFDM, true, 20000000, 6000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 2); private static final WifiMode ofdmRate9Mbps = new WifiMode("OfdmRate9Mbps", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 20000000, 9000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 2); private static final WifiMode ofdmRate12Mbps = new WifiMode( "OfdmRate12Mbps", WifiModulationClass.WIFI_MOD_CLASS_OFDM, true, 20000000, 12000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 4); private static final WifiMode ofdmRate18Mbps = new WifiMode( "OfdmRate18Mbps", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 20000000, 18000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 4); private static final WifiMode ofdmRate24Mbps = new WifiMode( "OfdmRate24Mbps", WifiModulationClass.WIFI_MOD_CLASS_OFDM, true, 20000000, 24000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 16); private static final WifiMode ofdmRate36Mbps = new WifiMode( "OfdmRate36Mbps", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 20000000, 36000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 16); private static final WifiMode ofdmRate48Mbps = new WifiMode( "OfdmRate48Mbps", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 20000000, 48000000, WifiCodeRate.WIFI_CODE_RATE_2_3, 64); private static final WifiMode ofdmRate54Mbps = new WifiMode( "OfdmRate54Mbps", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 20000000, 54000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 64); /* 10 MHz channel rates */ private static final WifiMode ofdmRate3MbpsBW10MHz = new WifiMode( "OfdmRate3MbpsBW10MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, true, 10000000, 3000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 2); private static final WifiMode ofdmRate4_5MbpsBW10MHz = new WifiMode( "OfdmRate4_5MbpsBW10MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 10000000, 4500000, WifiCodeRate.WIFI_CODE_RATE_3_4, 2); private static final WifiMode ofdmRate6MbpsBW10MHz = new WifiMode( "OfdmRate6MbpsBW10MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, true, 10000000, 6000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 4); private static final WifiMode ofdmRate9MbpsBW10MHz = new WifiMode( "OfdmRate9MbpsBW10MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 10000000, 9000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 4); private static final WifiMode ofdmRate12MbpsBW10MHz = new WifiMode( "OfdmRate12MbpsBW10MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, true, 10000000, 12000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 16); private static final WifiMode ofdmRate18MbpsBW10MHz = new WifiMode( "OfdmRate18MbpsBW10MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 10000000, 18000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 16); private static final WifiMode ofdmRate24MbpsBW10MHz = new WifiMode( "OfdmRate24MbpsBW10MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 10000000, 24000000, WifiCodeRate.WIFI_CODE_RATE_2_3, 64); private static final WifiMode ofdmRate27MbpsBW10MHz = new WifiMode( "OfdmRate27MbpsBW10MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 10000000, 27000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 64); /* 5 MHz channel rates */ private static final WifiMode ofdmRate1_5MbpsBW5MHz = new WifiMode( "OfdmRate1_5MbpsBW5MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, true, 5000000, 1500000, WifiCodeRate.WIFI_CODE_RATE_1_2, 2); private static final WifiMode ofdmRate2_25MbpsBW5MHz = new WifiMode( "OfdmRate2_25MbpsBW5MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 5000000, 2250000, WifiCodeRate.WIFI_CODE_RATE_3_4, 2); private static final WifiMode ofdmRate3MbpsBW5MHz = new WifiMode( "OfdmRate3MbpsBW5MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, true, 5000000, 3000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 4); private static final WifiMode ofdmRate4_5MbpsBW5MHz = new WifiMode( "OfdmRate4_5MbpsBW5MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 5000000, 4500000, WifiCodeRate.WIFI_CODE_RATE_3_4, 4); private static final WifiMode ofdmRate6MbpsBW5MHz = new WifiMode( "OfdmRate6MbpsBW5MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, true, 5000000, 6000000, WifiCodeRate.WIFI_CODE_RATE_1_2, 16); private static final WifiMode ofdmRate9MbpsBW5MHz = new WifiMode( "OfdmRate9MbpsBW5MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 5000000, 9000000, WifiCodeRate.WIFI_CODE_RATE_3_4, 16); private static final WifiMode ofdmRate12MbpsBW5MHz = new WifiMode( "OfdmRate12MbpsBW5MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 5000000, 12000000, WifiCodeRate.WIFI_CODE_RATE_2_3, 64); private static final WifiMode ofdmRate13_5MbpsBW5MHz = new WifiMode( "OfdmRate13_5MbpsBW5MHz", WifiModulationClass.WIFI_MOD_CLASS_OFDM, false, 5000000, 13500000, WifiCodeRate.WIFI_CODE_RATE_3_4, 64); /** * Clause 15 rates (DSSS) */ public static WifiMode getDsssRate1Mbps() { return dsssRate1Mbps; } public static WifiMode getDsssRate2Mbps() { return dsssRate2Mbps; } /** * Clause 18 rates (HR/DSSS) */ public static WifiMode getDsssRate5_5Mbps() { return dsssRate5_5Mbps; } public static WifiMode getDsssRate11Mbps() { return dsssRate11Mbps; } /** * Clause 19.5 rates (ERP-OFDM) */ public static WifiMode getErpOfdmRate6Mbps() { return erpOfdmRate6Mbps; } public static WifiMode getErpOfdmRate9Mbps() { return erpOfdmRate9Mbps; } public static WifiMode getErpOfdmRate12Mbps() { return erpOfdmRate12Mbps; } public static WifiMode getErpOfdmRate18Mbps() { return erpOfdmRate18Mbps; } public static WifiMode getErpOfdmRate24Mbps() { return erpOfdmRate24Mbps; } public static WifiMode getErpOfdmRate36Mbps() { return erpOfdmRate36Mbps; } public static WifiMode getErpOfdmRate48Mbps() { return erpOfdmRate48Mbps; } public static WifiMode getErpOfdmRate54Mbps() { return erpOfdmRate54Mbps; } /** * Clause 17 rates (OFDM) */ public static WifiMode getOfdmRate6Mbps() { return ofdmRate6Mbps; } public static WifiMode getOfdmRate9Mbps() { return ofdmRate9Mbps; } public static WifiMode getOfdmRate12Mbps() { return ofdmRate12Mbps; } public static WifiMode getOfdmRate18Mbps() { return ofdmRate18Mbps; } public static WifiMode getOfdmRate24Mbps() { return ofdmRate24Mbps; } public static WifiMode getOfdmRate36Mbps() { return ofdmRate36Mbps; } public static WifiMode getOfdmRate48Mbps() { return ofdmRate48Mbps; } public static WifiMode getOfdmRate54Mbps() { return ofdmRate54Mbps; } /* 10 MHz channel rates */ public static WifiMode getOfdmRate3MbpsBW10MHz() { return ofdmRate3MbpsBW10MHz; } public static WifiMode getOfdmRate4_5MbpsBW10MHz() { return ofdmRate4_5MbpsBW10MHz; } public static WifiMode getOfdmRate6MbpsBW10MHz() { return ofdmRate6MbpsBW10MHz; } public static WifiMode getOfdmRate9MbpsBW10MHz() { return ofdmRate9MbpsBW10MHz; } public static WifiMode getOfdmRate12MbpsBW10MHz() { return ofdmRate12MbpsBW10MHz; } public static WifiMode getOfdmRate18MbpsBW10MHz() { return ofdmRate18MbpsBW10MHz; } public static WifiMode getOfdmRate24MbpsBW10MHz() { return ofdmRate24MbpsBW10MHz; } public static WifiMode getOfdmRate27MbpsBW10MHz() { return ofdmRate27MbpsBW10MHz; } /* 5 MHz channel rates */ public static WifiMode getOfdmRate1_5MbpsBW5MHz() { return ofdmRate1_5MbpsBW5MHz; } public static WifiMode getOfdmRate2_25MbpsBW5MHz() { return ofdmRate2_25MbpsBW5MHz; } public static WifiMode getOfdmRate3MbpsBW5MHz() { return ofdmRate3MbpsBW5MHz; } public static WifiMode getOfdmRate4_5MbpsBW5MHz() { return ofdmRate4_5MbpsBW5MHz; } public static WifiMode getOfdmRate6MbpsBW5MHz() { return ofdmRate6MbpsBW5MHz; } public static WifiMode getOfdmRate9MbpsBW5MHz() { return ofdmRate9MbpsBW5MHz; } public static WifiMode getOfdmRate12MbpsBW5MHz() { return ofdmRate12MbpsBW5MHz; } public static WifiMode getOfdmRate13_5MbpsBW5MHz() { return ofdmRate13_5MbpsBW5MHz; } }