Package: inet.linklayer.ieee80211.mac
Ieee80211CompatibleMac
compound moduleDelegate some upperMac parameters to Ieee80211Mac, to be more compatible with the old MAC. NOTE: NOT ALL PARAMETERS OF THE OLD MAC CAN BE MAPPED.
Inheritance diagram
The following diagram shows inheritance relationships for this type. Unresolved types are missing from the diagram.
Extends
Name | Type | Description |
---|---|---|
Ieee80211Mac | compound module |
Implementation of the 802.11b MAC protocol. This module is intended to be used in combination with the Ieee80211Radio module as the physical layer. (The SnrEval80211 and Decider80211 modules should also work if per-packet bitrate setting gets implemented.) |
Parameters
Name | Type | Default value | Description |
---|---|---|---|
interfaceTableModule | string | ||
mtu | int | 2304B | |
address | string | "auto" |
MAC address as hex string (12 hex digits), or "auto". "auto" values will be replaced by a generated MAC address in init stage 0. |
modeSet | string | opMode | |
qosStation | bool | false | |
rateControlType | string | "" | |
opMode | string | "g(mixed)" | |
bitrate | double | -1bps |
for backward compatibility |
basicBitrate | double | -1bps |
for backward compatibility |
dataBitrate | double | bitrate | |
mgmtBitrate | double | basicBitrate | |
multicastBitrate | double | basicBitrate | |
controlBitrate | double | -1bps | |
initialRateControlRate | double | -1bps | |
rtsThresholdBytes | int | 2346B | |
retryLimit | int | -1 | |
EDCA | bool | false | |
maxQueueSize | int | 14 | |
AIFSN0 | int | 7 |
AIFSN for background |
AIFSN1 | int | 3 |
AIFSN for best effort |
AIFSN2 | int | 2 |
AIFSN for video |
AIFSN3 | int | 2 |
AIFSN for voice |
TXOP0 | double | 0s | |
TXOP1 | double | 0s | |
TXOP2 | double | 3.008ms | |
TXOP3 | double | 1.504ms | |
AIFSN | int | 2 |
if there is only one AC (EDCA = false) |
prioritizeMulticast | bool | false |
if true, prioritize multicast frames (9.3.2.1 Fundamental access) |
slotTime | double | -1s |
slot time, -1 means default (mode dependent) |
cwMinData | int | -1 |
contention window for normal data frames, -1 means default |
cwMaxData | int | -1 |
contention window for normal data frames, -1 means default upperMac.typename = EDCA ? "EdcaUpperMac" : "DcfUpperMac"; |
Properties
Name | Value | Description |
---|---|---|
display | i=block/layer | |
class | Ieee80211Mac |
Gates
Name | Direction | Size | Description |
---|---|---|---|
upperLayerIn | input | ||
upperLayerOut | output | ||
lowerLayerIn | input | ||
lowerLayerOut | output |
Signals
Name | Type | Unit |
---|---|---|
NF_MODESET_CHANGED | inet::physicallayer::Ieee80211ModeSet |
Statistics
Name | Title | Source | Record | Unit | Interpolation Mode |
---|---|---|---|---|---|
passedUpPk | packets passed to higher layer | packetSentToUpper | count, sum(packetBytes), vector(packetBytes) | none | |
rcvdPkFromHL | packets received from higher layer | packetReceivedFromUpper | count, sum(packetBytes), vector(packetBytes) | none | |
sentDownPk | packets sent to lower layer | packetSentToLower | count, sum(packetBytes), vector(packetBytes) | none | |
rcvdPkFromLL | packets received from lower layer | packetReceivedFromLower | count, sum(packetBytes), vector(packetBytes) | none |
Unassigned submodule parameters
Name | Type | Default value | Description |
---|---|---|---|
dcf.channelAccess.contention.initialChannelBusy | bool | true |
assume that channel was busy before the simulation started |
dcf.channelAccess.contention.backoffOptimization | bool | true |
we can pretend the frame has arrived into the queue a little bit earlier, and may be able to start transmitting immediately |
dcf.rateSelection.multicastFrameBitrate | double | -1bps | |
dcf.rateSelection.responseAckFrameBitrate | double | -1bps | |
dcf.rateSelection.responseCtsFrameBitrate | double | -1bps | |
dcf.rateSelection.dataFrameBitrate | double | -1bps |
fastest |
dcf.rateSelection.mgmtFrameBitrate | double | -1bps |
fastest |
dcf.rateSelection.controlFrameBitrate | double | -1bps | |
dcf.recoveryProcedure.shortRetryLimit | int | 7 | |
dcf.recoveryProcedure.longRetryLimit | int | 4 | |
dcf.originatorProtectionMechanism.rateSelectionModule | string | ||
dcf.originatorAckPolicy.rateSelectionModule | string | ||
dcf.originatorAckPolicy.ackTimeout | double | -1s | |
dcf.recipientAckPolicy.rateSelectionModule | string | ||
dcf.rtsPolicy.rateSelectionModule | string | ||
dcf.rtsPolicy.ctsTimeout | double | -1s | |
dcf.rtsPolicy.rtsThreshold | int | 2346B | |
dcf.ctsPolicy.rxModule | string | ||
dcf.ctsPolicy.rateSelectionModule | string | ||
hcf.edca.edcaf.contention.initialChannelBusy | bool | true |
assume that channel was busy before the simulation started |
hcf.edca.edcaf.contention.backoffOptimization | bool | true |
we can pretend the frame has arrived into the queue a little bit earlier, and may be able to start transmitting immediately |
hcf.rateSelection.multicastFrameBitrate | double | -1bps | |
hcf.rateSelection.responseAckFrameBitrate | double | -1bps | |
hcf.rateSelection.responseBlockAckFrameBitrate | double | -1bps | |
hcf.rateSelection.responseCtsFrameBitrate | double | -1bps | |
hcf.rateSelection.dataFrameBitrate | double | -1bps |
fastest |
hcf.rateSelection.mgmtFrameBitrate | double | -1bps |
fastest |
hcf.rateSelection.controlFrameBitrate | double | -1bps | |
hcf.singleProtectionMechanism.rateSelectionModule | string | ||
hcf.edcaMgmtAndNonQoSRecoveryProcedure.shortRetryLimit | int | 7 | |
hcf.edcaMgmtAndNonQoSRecoveryProcedure.longRetryLimit | int | 4 | |
hcf.edcaDataRecoveryProcedures.shortRetryLimit | int | 7 | |
hcf.edcaDataRecoveryProcedures.longRetryLimit | int | 4 | |
hcf.edcaTxopProcedures.txopLimit | double | -1s | |
hcf.originatorAckPolicy.rateSelectionModule | string | ||
hcf.originatorAckPolicy.blockAckReqTreshold | int | 5 | |
hcf.originatorAckPolicy.maxBlockAckPolicyFrameLength | int | 1000B | |
hcf.originatorAckPolicy.blockAckTimeout | double | -1s | |
hcf.originatorAckPolicy.ackTimeout | double | -1s | |
hcf.recipientAckPolicy.rateSelectionModule | string | ||
hcf.rtsPolicy.rateSelectionModule | string | ||
hcf.rtsPolicy.ctsTimeout | double | -1s | |
hcf.rtsPolicy.rtsThreshold | int | 2346B | |
hcf.ctsPolicy.rxModule | string | ||
hcf.ctsPolicy.rateSelectionModule | string | ||
hcf.originatorBlockAckAgreementPolicy.delayedAckPolicySupported | bool | false | |
hcf.originatorBlockAckAgreementPolicy.aMsduSupported | bool | true | |
hcf.originatorBlockAckAgreementPolicy.maximumAllowedBufferSize | int | 64 | |
hcf.originatorBlockAckAgreementPolicy.blockAckTimeoutValue | double | 0s |
0 means that it depends on the originator |
hcf.recipientBlockAckAgreementPolicy.delayedAckPolicySupported | bool | false | |
hcf.recipientBlockAckAgreementPolicy.aMsduSupported | bool | true | |
hcf.recipientBlockAckAgreementPolicy.maximumAllowedBufferSize | int | 64 | |
hcf.recipientBlockAckAgreementPolicy.blockAckTimeoutValue | double | 0s |
0 means that it depends on the originator |
Source code
// // Delegate some upperMac parameters to Ieee80211Mac, to be more compatible with the old MAC. // NOTE: NOT ALL PARAMETERS OF THE OLD MAC CAN BE MAPPED. // module Ieee80211CompatibleMac extends Ieee80211Mac { parameters: string rateControlType = default(""); string opMode @enum("a","b","g(erp)","g(mixed)","n","p") = default("g(mixed)"); double bitrate @unit("bps") = default(-1bps); // for backward compatibility double basicBitrate @unit("bps") = default(-1bps); // for backward compatibility double dataBitrate @unit("bps") = default(bitrate); double mgmtBitrate @unit("bps") = default(basicBitrate); double multicastBitrate @unit("bps") = default(basicBitrate); double controlBitrate @unit("bps") = default(-1bps); double initialRateControlRate @unit("bps") = default(-1bps); int rtsThresholdBytes @unit("B") = default(2346B); int retryLimit = default(-1); bool EDCA = default(false); int maxQueueSize = default(14); int AIFSN0 = default(7); // AIFSN for background int AIFSN1 = default(3); // AIFSN for best effort int AIFSN2 = default(2); // AIFSN for video int AIFSN3 = default(2); // AIFSN for voice double TXOP0 @unit(s) = default(0s); double TXOP1 @unit(s) = default(0s); double TXOP2 @unit(s) = default(3.008ms); double TXOP3 @unit(s) = default(1.504ms); int AIFSN = default(2); // if there is only one AC (EDCA = false) bool prioritizeMulticast = default(false); // if true, prioritize multicast frames (9.3.2.1 Fundamental access) double slotTime @unit("s") = default(-1s); // slot time, -1 means default (mode dependent) int cwMinData = default(-1); // contention window for normal data frames, -1 means default int cwMaxData = default(-1); // contention window for normal data frames, -1 means default //upperMac.typename = EDCA ? "EdcaUpperMac" : "DcfUpperMac"; modeSet = opMode; // BasicRateSelection *.maxQueueSize = this.maxQueueSize; *.rateControlType = this.rateControlType; *.rateSelection.multicastFrameBitrate = this.multicastBitrate; // BasicRateSelection *.rateSelection.dataFrameBitrate = this.dataBitrate; // BasicRateSelection *.rateSelection.mgmtFrameBitrate = this.mgmtBitrate; *.rateSelection.controlFrameBitrate = this.controlBitrate; *.rateSelection.responseAckFrameBitrate = this.controlBitrate; *.rateControl.initialRate = this.initialRateControlRate; dcf.rtsPolicy.rtsThreshold = this.rtsThresholdBytes; upperMac.rtsThreshold = this.rtsThresholdBytes; // DcfUpperMac, EdcaUpperMac upperMac.shortRetryLimit = this.retryLimit; // DcfUpperMac, EdcaUpperMac upperMac.maxQueueSize = this.maxQueueSize; // DcfUpperMac, EdcaUpperMac upperMac.aifsn0 = this.AIFSN0; // EdcaUpperMac upperMac.aifsn1 = this.AIFSN1; // EdcaUpperMac upperMac.aifsn2 = this.AIFSN2; // EdcaUpperMac upperMac.aifsn3 = this.AIFSN3; // EdcaUpperMac upperMac.txopLimit0 = this.TXOP0; // EdcaUpperMac upperMac.txopLimit1 = this.TXOP1; // EdcaUpperMac upperMac.txopLimit2 = this.TXOP2; // EdcaUpperMac upperMac.txopLimit3 = this.TXOP3; // EdcaUpperMac //TODO upperMac.difsn = this.AIFSN; upperMac.prioritizeMulticast = this.prioritizeMulticast; // DcfUpperMac, EdcaUpperMac upperMac.slotTime = this.slotTime; // DcfUpperMac, EdcaUpperMac dcf.channelAccess.cwMin = this.cwMinData; // DcfUpperMac dcf.channelAccess.cwMax = this.cwMaxData; // DcfUpperMac upperMac.cwMinMulticast = this.cwMulticast; // DcfUpperMac, EdcaUpperMac }File: src/inet/linklayer/ieee80211/mac/Ieee80211Mac.ned