[General]
network = Layered80211

num-rngs = 3
#debug-on-errors = true
sim-time-limit = 5s
**.vector-recording = false
cmdenv-express-mode = false
#record-eventlog = true
tkenv-plugin-path = ../../../etc/plugins

**.mobility.rng-0 = 1
**.wlan[*].mac.rng-0 = 2

**.constraintAreaMinX = 0m
**.constraintAreaMinY = 0m
**.constraintAreaMinZ = 0m
**.constraintAreaMaxX = 600m
**.constraintAreaMaxY = 400m
**.constraintAreaMaxZ = 0m

**.arpType = "GlobalARP"

# mobility
**.host*.mobilityType = "StationaryMobility"
**.host*.mobility.initFromDisplayString = false
**.host[0].mobility.initialX = 10m
**.host[0].mobility.initialY = 20m
**.host[1].mobility.initialX = 50m
**.host[1].mobility.initialY = 20m
**.host[*].mobility.initialZ = 0m

# ping app (host[0] pinged by others)
*.host[0].numPingApps = 0
*.host[*].numPingApps = 1
*.host[*].pingApp[*].destAddr = "host[0]"
**.pingApp[*].printPing = true

**.wlan[*].mgmt.frameCapacity = 10
**.wlan[*].mac.address = "auto"
**.wlan[*].mac.maxQueueSize = 14
**.wlan[*].mac.rtsThresholdBytes = 3000B
**.wlan[*].mac.retryLimit = 7
**.wlan[*].mac.cwMinData = 7
**.wlan[*].mac.cwMinBroadcast = 31

**.wlan[*].radio.transmitter.power = 0.1mW
**.wlan[*].radio.receiver.sensitivity = -100dBm
**.wlan[*].radio.receiver.snirThreshold = 4dB

**.wlan[*].typename = "Ieee80211Nic"
**.wlan[*].radioType = "APSKScalarRadio"
**.wlan[*].radio.carrierFrequency = 2.4GHz
**.wlan[*].radio.receiver.energyDetection = -90dBm
**.wlan[*].radio.receiver.channelSpacing = 20MHz
**.wlan[*].radio.bandwidth = 20MHz

# MAC
**.wlan[*].mac.controlBitrate = 6Mbps
**.wlan[*].mac.dataBitrate = 36Mbps
**.wlan[*].mac.basicBitrate = 6Mbps
**.wlan[*].mac.multicastBitrate = 24Mbps

[Config LayeredCompliant80211Ping]
description = "host1 pinging host0"
*.numHosts = 2
**.levelOfDetail = "symbol"
**.isCompliant = true
**.wlan[*].radio.transmitterType = "Ieee80211LayeredOFDMTransmitter"
**.wlan[*].radio.receiver.errorModelType = "Ieee80211OFDMErrorModel"
**.wlan[*].radio.receiverType = "Ieee80211LayeredOFDMReceiver"

[Config LayeredNonCompliant80211Ping]
description = "host1 pinging host0"
**.levelOfDetail = "symbol"
*.numHosts = 2

## Transmitter
**.isCompliant = false
**.wlan[*].radio.transmitterType = "Ieee80211LayeredOFDMTransmitter"
**.wlan[*].radio.transmitter.channelSpacing = 20MHz
**.wlan[*].radio.transmitter.signalEncoderType = "Ieee80211OFDMEncoder"
**.wlan[*].radio.transmitter.signalModulatorType = "Ieee80211OFDMModulator"
**.wlan[*].radio.transmitter.dataEncoderType = "Ieee80211OFDMEncoder"
**.wlan[*].radio.transmitter.dataModulatorType = "Ieee80211OFDMModulator"
**.wlan[*].radio.transmitter.dataEncoder.fecType = "ConvolutionalCoder"
**.wlan[*].radio.transmitter.dataEncoder.scramblerType = "AdditiveScrambler"
**.wlan[*].radio.transmitter.dataEncoder.interleaverType = "Ieee80211OFDMInterleaver"
**.wlan[*].radio.transmitter.signalEncoder.fecType = "ConvolutionalCoder"
**.wlan[*].radio.transmitter.signalEncoder.scramblerType = ""
**.wlan[*].radio.transmitter.signalEncoder.interleaverType = "Ieee80211OFDMInterleaver"

**.wlan[*].radio.transmitter.dataModulator.pilotSubcarrierPolarityVectorOffset = 0
**.wlan[*].radio.transmitter.signalModulator.pilotSubcarrierPolarityVectorOffset = 0

# Transmitter/receiver data scrambler/descrambler
**.wlan[*].radio.**.seed = "1011101"
**.wlan[*].radio.**.generatorPolynomial = "0001001"

# Data interleaver
**.wlan[*].radio.transmitter.dataEncoder.interleaver.numberOfCodedBitsPerSubcarrier = 4
**.wlan[*].radio.transmitter.dataEncoder.interleaver.numberOfCodedBitsPerSymbol = 192

# Signal interleaver
**.wlan[*].radio.transmitter.signalEncoder.interleaver.numberOfCodedBitsPerSubcarrier = 1
**.wlan[*].radio.transmitter.signalEncoder.interleaver.numberOfCodedBitsPerSymbol = 48

# Data FEC
**.wlan[*].radio.transmitter.dataEncoder.fecEncoder.transferFunctionMatrix = "133 171"
**.wlan[*].radio.transmitter.dataEncoder.fecEncoder.constraintLengthVector = "7"
**.wlan[*].radio.transmitter.dataEncoder.fecEncoder.puncturingMatrix = "1 1 0; 1 0 1"
**.wlan[*].radio.transmitter.dataEncoder.fecEncoder.punctureK = 3
**.wlan[*].radio.transmitter.dataEncoder.fecEncoder.punctureN = 4

# Signal FEC
**.wlan[*].radio.transmitter.signalEncoder.fecEncoder.transferFunctionMatrix = "133 171"
**.wlan[*].radio.transmitter.signalEncoder.fecEncoder.constraintLengthVector = "7"
**.wlan[*].radio.transmitter.signalEncoder.fecEncoder.puncturingMatrix = "1; 1"
**.wlan[*].radio.transmitter.signalEncoder.fecEncoder.punctureK = 1
**.wlan[*].radio.transmitter.signalEncoder.fecEncoder.punctureN = 2

# Modulation
**.wlan[*].radio.transmitter.signalModulator.subcarrierModulation = "BPSK"
**.wlan[*].radio.transmitter.signalModulator.subcarrierPolarityVectorOffset = 0
**.wlan[*].radio.transmitter.dataModulator.subcarrierModulation = "QAM-16"
**.wlan[*].radio.transmitter.dataModulator.subcarrierPolarityVectorOffset = 1

## Receiver
**.wlan[*].radio.receiverType = "Ieee80211LayeredOFDMReceiver"
**.wlan[*].radio.receiver.dataDecoderType = "Ieee80211OFDMDecoder"
**.wlan[*].radio.receiver.errorModelType = "Ieee80211OFDMErrorModel"
**.wlan[*].radio.receiver.signalDecoderType = "Ieee80211OFDMDecoder"
**.wlan[*].radio.receiver.signalDemodulatorType = "Ieee80211OFDMDemodulator"
**.wlan[*].radio.receiver.dataDemodulatorType = "Ieee80211OFDMDemodulator"
**.wlan[*].radio.receiver.dataDecoder.fecType = "ConvolutionalCoder"
**.wlan[*].radio.receiver.dataDecoder.descramblerType = "AdditiveScrambler"
**.wlan[*].radio.receiver.dataDecoder.deinterleaverType = "Ieee80211OFDMInterleaver"
**.wlan[*].radio.receiver.signalDecoder.fecType = "ConvolutionalCoder"
**.wlan[*].radio.receiver.signalDecoder.descramblerType = ""
**.wlan[*].radio.receiver.signalDecoder.deinterleaverType = "Ieee80211OFDMInterleaver"

# Data deinterleaver
**.wlan[*].radio.receiver.dataDecoder.deinterleaver.numberOfCodedBitsPerSubcarrier = 4
**.wlan[*].radio.receiver.dataDecoder.deinterleaver.numberOfCodedBitsPerSymbol = 192

# Signal deinterleaver
**.wlan[*].radio.receiver.signalDecoder.deinterleaver.numberOfCodedBitsPerSubcarrier = 1
**.wlan[*].radio.receiver.signalDecoder.deinterleaver.numberOfCodedBitsPerSymbol = 48

# Data FEC
**.wlan[*].radio.receiver.dataDecoder.fecDecoder.transferFunctionMatrix = "133 171"
**.wlan[*].radio.receiver.dataDecoder.fecDecoder.constraintLengthVector = "7"
**.wlan[*].radio.receiver.dataDecoder.fecDecoder.puncturingMatrix = "1 1 0; 1 0 1"
**.wlan[*].radio.receiver.dataDecoder.fecDecoder.punctureK = 3
**.wlan[*].radio.receiver.dataDecoder.fecDecoder.punctureN = 4

# Signal FEC
**.wlan[*].radio.receiver.signalDecoder.fecDecoder.transferFunctionMatrix = "133 171"
**.wlan[*].radio.receiver.signalDecoder.fecDecoder.constraintLengthVector = "7"
**.wlan[*].radio.receiver.signalDecoder.fecDecoder.puncturingMatrix = "1; 1"
**.wlan[*].radio.receiver.signalDecoder.fecDecoder.punctureK = 1
**.wlan[*].radio.receiver.signalDecoder.fecDecoder.punctureN = 2

# Modulation
**.wlan[*].radio.receiver.signalDemodulator.subcarrierModulation = "BPSK"
**.wlan[*].radio.receiver.dataDemodulator.subcarrierModulation = "QAM-16"


# TODO: validation test.
#[Config LayeredCompliant80211Validation]
#extends = LayeredCompliant80211Ping
#
## Constraints for valid (complaint) channel spacing and bitrate combinations
#constraint = (($spacing == 5 && $headerBitrate == 1.5) || ($spacing == 10 && $headerBitrate == 3) || ($spacing == 20 && $headerBitrate == 6)) && (($dataBitrate == 12 && ($spacing == 20 || $spacing == 10 || $spacing == 5)) || ($dataBitrate == 24 && ($spacing == 20 || $spacing == 10)) || ($dataBitrate == 36 && $spacing == 20) || ($dataBitrate == 54 && $spacing == 20))
#
## Mobility
#**.host*.mobilityType = "StationaryMobility"
#**.host*.mobility.initFromDisplayString = false
#**.host[0].mobility.initialX = 100m
#**.host[0].mobility.initialY = 200m
#**.host[1].mobility.initialX = 100m + ${distance=110..300 step 5}m
#**.host[1].mobility.initialY = 200m
#**.host[*].mobility.initialZ = 0m
#**.wlan[*].radio.**.levelOfDetail = ${detail="bit", "symbol"}
#
## Iterations
#**.channelSpacing = ${spacing=5,10,20}MHz
#**.headerBitrate = ${headerBitrate = 1.5, 3, 6}Mbps
##**.dataBitrate = ${dataBitrate = 12, 24, 36, 54}Mbps
