IEEE 802.11abg Radio Model
The IEEE 802.11abg radio model is a behavioral representation of an IEEE 802.11abg radio.
Features
The IEEE 802.11abg radio model provides the following set of features: DSS and OFDM Modes and Rates, DCF Channel Access, and Packet Completion Rate Curves.
DSS and OFDM Modes and Rates
The IEEE 802.11abg radio supports the following waveform modes and data rates with the appropriate timing:
-
802.11b (DSS rates: 1, 2, 5.5 and 11 Mbps)
-
802.11a/g (OFDM rates: 6, 9, 12, 18, 24, 36, 48 and 54 Mbps)
-
802.11b/g (DSS and OFDM rates)
DCF Channel Access
The IEEE 802.11abg radio model supports Distributed Coordination Function (DCF) channel access.
Unicast and Broadcast Transmissions
The IEEE 802.11abg radio model supports both unicast and broadcast transmissions. Unicast transmissions include the ability to emulate control message (RTS/CTS) behavior as well as retries without actually transmitting the control messages or the re-transmission of the data message. The emulation of unicast does not replicate exponential growth of the contention window as a result of detected failures.
Wi-Fi Multimedia
The IEEE 802.11abg radio model supports Wi-Fi multimedia (WMM) capabilities with the ability to classify four different traffic classes: Background, Best Effort, Video, and Voice, where the higher priority classes (Voice and Video) are serviced first.
Packet Completion Rate Curves
The IEEE 802.11abg Packet Completion Rate is specified as curves defined via XML. Each curve definition comprises a series of SINR values along with their corresponding probability of reception for a given data rate index. A curve definition must contain a minimum of two points with one SINR representing POR = 0 and one SINR representing POR = 100. Linear interpolation is preformed when an exact SINR match is not found.
The IEEE 802.11abg radio model does adjust the interference on a per packet basis based on detected collisions and as such supports negative SINR values.
Specifying a packet size (<table>
attribute pktsize
) in the curve file will adjust the POR based on received packet size. Specifying a pktsize
of 0 disregards received packet size when computing the POR.
The POR is obtained using the following calculation when a non-zero pktsize
is specified:
Where,
\(POR_0\) is the POR value determined from the PCR curve for the given SINR value
\(S_0\) is the packet size specified in the curve file pktsize
\(S_1\) is the received packet size
The below default PCR curves are provided for each of the supported 802.11 modulation and data rate combinations based on theoretical equations for determining Bit Error Rate (BER) in an Additive White Gaussian Noise (AWGN) channel.
<!DOCTYPE pcr SYSTEM "file:///usr/share/emane/dtd/ieee80211pcr.dtd">
<pcr>
<table pktsize="128">
<!-- 1Mpbs -->
<datarate index="1">
<row sinr="-9.0" por="0.0"/>
<row sinr="-8.0" por="1.4"/>
<row sinr="-7.0" por="21.0"/>
<row sinr="-6.0" por="63.5"/>
<row sinr="-5.0" por="90.7"/>
<row sinr="-4.0" por="98.6"/>
<row sinr="-3.0" por="99.9"/>
<row sinr="-2.0" por="100.0"/>
</datarate>
<!-- 2Mpbs -->
<datarate index="2">
<row sinr="-6.0" por="0"/>
<row sinr="-5.0" por="1.4"/>
<row sinr="-4.0" por="20.6"/>
<row sinr="-3.0" por="63.1"/>
<row sinr="-2.0" por="90.5"/>
<row sinr="-1.0" por="98.5"/>
<row sinr="0.0" por="99.9"/>
<row sinr="1.0" por="100.0"/>
</datarate>
<!-- 5.5Mpbs -->
<... snippet: only 26 lines shown...>
emane-guide/examples/ieee80211abg-01/node-1/emane-ieee80211abg-pcr.xml
IEEE 802.11b DSS (left). IEEE 802.11ag OFDM (right).
Limitations
-
The IEEE 802.11abg radio model does not support Point Coordination Function (PCF) channel access or the concept of beacons to discover and join an access point.
-
The IEEE 802.11abg uses a radio model specific
OneHopNeighborsEvent
to communicate one-hop neighbors to behaviorally emulate the Carrier Sense Multiple Access/Collision Avoidance (CSMA/CA) channel access protocol without actual transmission of RTS and CTS packets. The neighbor information in the event allows each node to estimate channel activity associated from one and two hop neighbors to emulate collisions not only from immediate neighbors but also from 2-hop hidden neighbors.
If the emulator is oversubscribed, insufficient emulation server CPU resources to process received over-the-air messages in a timely manner, the radio model channel activity estimator will estimate less activity within the estimation period, leading to a failure condition where better network performance is experienced within the emulation than would be experienced with real radios.
OneHopNeighborsEvent
A OneHopNeighborsEvent
is used to communicate one-hop neighbors to other IEEE 802.11abg radio model instances running in an emulation in order to behaviorally emulate the CSMA/CA channel access protocol without actual transmission of RTS and CTS packets
package EMANEEventMessage;
option optimize_for = SPEED;
message OneHopNeighborsEvent
{
required uint32 eventSource = 1;
message Neighbor
{
required uint32 nemId = 1;
}
repeated Neighbor neighbors = 2;
}
emane/src/models/mac/ieee80211abg/onehopneighborsevent.proto
Configuration
-
aifs0
: Defines the arbitration inter frame spacing time for category 0 and contributes to the calculation of channel access overhead when transmitting category 0 packets. If WMM is disabled, aifs0 is used for all traffic.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.000000,0.000255] Values: 0.000002
-
aifs1
: Defines the arbitration inter frame spacing time for category 1 and contributes to the calculation of channel access overhead when transmitting category 1 packets.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.000000,0.000255] Values: 0.000002
-
aifs2
: Defines the arbitration inter frame spacing time for category 2 and contributes to the calculation of channel access overhead when transmitting category 2 packets.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.000000,0.000255] Values: 0.000002
-
aifs3
: Defines the arbitration inter frame spacing time for category 3 and contributes to the calculation of channel access overhead when transmitting category 3 packets.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.000000,0.000255] Values: 0.000001
-
channelactivityestimationtimer
: Defines the channel activity estimation timer in seconds. The timer determines the lag associated with the statistical model used to estimate number of transmitting common and hidden neighbors based on channel activity.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.001000,1.000000] Values: 0.100000
-
cwmax0
: Defines the maximum contention window size in slots for category 0.Default: yes Required: no Modifiable: yes Type: uint16 Occurrs: [1,1] Range: [1,65535] Values: 1024
-
cwmax1
: Defines the maximum contention window size in slots for category 1.Default: yes Required: no Modifiable: yes Type: uint16 Occurrs: [1,1] Range: [1,65535] Values: 1024
-
cwmax2
: Defines the maximum contention window size in slots for category 2.Default: yes Required: no Modifiable: yes Type: uint16 Occurrs: [1,1] Range: [1,65535] Values: 64
-
cwmax3
: Defines the maximum contention window size in slots for category 3.Default: yes Required: no Modifiable: yes Type: uint16 Occurrs: [1,1] Range: [1,65535] Values: 16
-
cwmin0
: Defines the minimum contention window size in slots for category 0.Default: yes Required: no Modifiable: yes Type: uint16 Occurrs: [1,1] Range: [1,65535] Values: 32
-
cwmin1
: Defines the minimum contention window size in slots for category 1.Default: yes Required: no Modifiable: yes Type: uint16 Occurrs: [1,1] Range: [1,65535] Values: 32
-
cwmin2
: Defines the minimum contention window size in slots for category 2.Default: yes Required: no Modifiable: yes Type: uint16 Occurrs: [1,1] Range: [1,65535] Values: 16
-
cwmin3
: Defines the minimum contention window size in slots for category 3.Default: yes Required: no Modifiable: yes Type: uint16 Occurrs: [1,1] Range: [1,65535] Values: 8
-
distance
: Defines the max propagation distance in meters used to compute slot size.Default: yes Required: no Modifiable: no Type: uint32 Occurrs: [1,1] Range: [0,4294967295] Values: 1000
-
enablepromiscuousmode
: Defines whether promiscuous mode is enabled or not. If promiscuous mode is enabled, all received packets (intended for the given node or not) that pass the probability of reception check are sent upstream to the transport.Default: yes Required: no Modifiable: yes Type: bool Occurrs: [1,1] Range: [false,true] Values: false
-
flowcontrolenable
: Defines whether flow control is enabled. Flow control only works with the virtual transport and the setting must match the setting within the virtual transport configuration.Default: yes Required: no Modifiable: no Type: bool Occurrs: [1,1] Range: [false,true] Values: false
-
flowcontroltokens
: Defines the maximum number of flow control tokens (packet transmission units) that can be processed from the virtual transport without being refreshed. The number of available tokens at any given time is coordinated with the virtual transport and when the token count reaches zero, no further packets are transmitted causing application socket queues to backup.Default: yes Required: no Modifiable: no Type: uint16 Occurrs: [1,1] Range: [1,65535] Values: 10
-
mode
: Defines the 802.11abg mode of operation. 0|2 = 802.11b (DSS), 1 = 802.11a/g (OFDM), and 3 = 802.11b/g (mixed mode).Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,3] Values: 0
-
msdu0
: MSDU category 0Default: yes Required: no Modifiable: no Type: uint16 Occurrs: [1,1] Range: [0,65535] Values: 65535
-
msdu1
: MSDU category 1Default: yes Required: no Modifiable: no Type: uint16 Occurrs: [1,1] Range: [0,65535] Values: 65535
-
msdu2
: MSDU category 2Default: yes Required: no Modifiable: no Type: uint16 Occurrs: [1,1] Range: [0,65535] Values: 65535
-
msdu3
: MSDU category 3Default: yes Required: no Modifiable: no Type: uint16 Occurrs: [1,1] Range: [0,65535] Values: 65535
-
multicastrate
: Defines the data rate to be used when transmitting broadcast/multicast packets. The index (1 through 12) to rate (Mbps) mapping is as follows: [1 2 5.5 11 6 9 12 18 24 36 48 54]. DSS rates [1 2 5.5 11] Mbps are valid when mode is set to 802.11b or 802.11b/g. OFDM rates [6 9 12 18 24 36 48 54] Mbps are valid when mode is set to 802.11a/g or 802.11b/g.Default: yes Required: no Modifiable: yes Type: uint8 Occurrs: [1,1] Range: [1,12] Values: 1
-
neighbormetricdeletetime
: Defines the time in seconds of no RF receptions from a given neighbor before it is removed from the neighbor table.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [1.000000,3660.000000] Values: 60.000000
-
neighbortimeout
: Defines the neighbor timeout in seconds for the neighbor estimation algorithm.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.000000,3600.000000] Values: 30.000000
-
pcrcurveuri
: Defines the URI of the Packet Completion Rate (PCR) curve file. The PCR curve file contains probability of reception curves as a function of Signal to Interference plus Noise Ratio (SINR) for each data rate.Default: no Required: yes Modifiable: no Type: string Occurrs: [1,1]
-
queuesize0
: Defines the queue size for category 0.Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,255] Values: 255
-
queuesize1
: Defines the queue size for category 1.Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,255] Values: 255
-
queuesize2
: Defines the queue size for category 2.Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,255] Values: 255
-
queuesize3
: Defines the queue size for category 3.Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,255] Values: 255
-
radiometricenable
: Defines if radio metrics will be reported up via the Radio to Router Interface (R2RI).Default: yes Required: no Modifiable: no Type: bool Occurrs: [1,1] Range: [false,true] Values: false
-
radiometricreportinterval
: Defines the metric report interval in seconds in support of the R2RI feature.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.100000,60.000000] Values: 1.000000
-
retrylimit0
: Defines the maximum number of retries attempted for category 0.Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,255] Values: 2
-
retrylimit1
: Defines the maximum number of retries attempted for category 1.Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,255] Values: 2
-
retrylimit2
: Defines the maximum number of retries attempted for category 2.Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,255] Values: 2
-
retrylimit3
: Defines the maximum number of retries attempted for category 3.Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,255] Values: 2
-
rtsthreshold
: Defines a threshold in bytes for when RTS/CTS is used as part of the carrier sensing channel access protocol when transmitting unicast packets.Default: yes Required: no Modifiable: no Type: uint16 Occurrs: [1,1] Range: [0,65535] Values: 255
-
txop0
: Defines the transmit opportunity time for category 0.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.000000,1.000000] Values: 0.000000
-
txop1
: Defines the transmit opportunity time for category 1.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.000000,1.000000] Values: 0.000000
-
txop2
: Defines the transmit opportunity time for category 2.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.000000,1.000000] Values: 0.000000
-
txop3
: Defines the transmit opportunity time for category 3.Default: yes Required: no Modifiable: no Type: float Occurrs: [1,1] Range: [0.000000,1.000000] Values: 0.000000
-
unicastrate
: Defines the data rate to be used when transmitting unicast packets. The index (1 through 12) to rate (Mbps) mapping is as follows: [1 2 5.5 11 6 9 12 18 24 36 48 54]. DSS rates [1 2 5.5 11] Mbps are valid when mode is set to 802.11b or 802.11b/g. OFDM rates [6 9 12 18 24 36 48 54] Mbps are valid when mode is set to 802.11a/g or 802.11b/g.Default: yes Required: no Modifiable: yes Type: uint8 Occurrs: [1,1] Range: [1,12] Values: 4
-
wmmenable
: Defines if wireless multimedia mode (WMM) is enabled.Default: yes Required: no Modifiable: no Type: bool Occurrs: [1,1] Range: [false,true] Values: false
Statistics
-
avgDownstreamProcessingDelay0
: Average downstream processing delayType: float Clearable: yes
-
avgDownstreamProcessingDelay1
: Average downstream processing delayType: float Clearable: yes
-
avgDownstreamProcessingDelay2
: Average downstream processing delayType: float Clearable: yes
-
avgDownstreamProcessingDelay3
: Average downstream processing delayType: float Clearable: yes
-
avgProcessAPIQueueDepth
: Average API queue depth for a processUpstreamPacket, processUpstreamControl, processDownstreamPacket, processDownstreamControl, processEvent and processTimedEvent.Type: double Clearable: yes
-
avgProcessAPIQueueWait
: Average API queue wait for a processUpstreamPacket, processUpstreamControl, processDownstreamPacket, processDownstreamControl, processEvent and processTimedEvent in microseconds.Type: double Clearable: yes
-
avgTimedEventLatency
: Average latency between the scheduled timer expiration and the actual firing over the requested duration.Type: double Clearable: yes
-
avgTimedEventLatencyRatio
: Average ratio of the delta between the scheduled timer expiration and the actual firing over the requested duration. An average ratio approaching 1 indicates that timer latencies are large in comparison to the requested durations.Type: double Clearable: yes
-
avgUpstreamProcessingDelay0
: Average upstream processing delayType: float Clearable: yes
-
avgUpstreamProcessingDelay1
: Average upstream processing delayType: float Clearable: yes
-
avgUpstreamProcessingDelay2
: Average upstream processing delayType: float Clearable: yes
-
avgUpstreamProcessingDelay3
: Average upstream processing delayType: float Clearable: yes
-
numAPIQueued
: The number of queued API events.Type: uint64 Clearable: yes
-
numBroadcastBytesTooLarge0
:Type: uint32 Clearable: yes
-
numBroadcastBytesTooLarge1
:Type: uint32 Clearable: yes
-
numBroadcastBytesTooLarge2
:Type: uint32 Clearable: yes
-
numBroadcastBytesTooLarge3
:Type: uint32 Clearable: yes
-
numBroadcastBytesUnsupported
:Type: uint32 Clearable: yes
-
numBroadcastPacketsTooLarge0
:Type: uint32 Clearable: yes
-
numBroadcastPacketsTooLarge1
:Type: uint32 Clearable: yes
-
numBroadcastPacketsTooLarge2
:Type: uint32 Clearable: yes
-
numBroadcastPacketsTooLarge3
:Type: uint32 Clearable: yes
-
numBroadcastPacketsUnsupported
:Type: uint32 Clearable: yes
-
numDownstreamBroadcastDataDiscardDueToTxop
:Type: uint32 Clearable: yes
-
numDownstreamBytesBroadcastGenerated0
: Number of layer generated downstream broadcast bytesType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastGenerated1
: Number of layer generated downstream broadcast bytesType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastGenerated2
: Number of layer generated downstream broadcast bytesType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastGenerated3
: Number of layer generated downstream broadcast bytesType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastRx0
: Number of downstream broadcast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastRx1
: Number of downstream broadcast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastRx2
: Number of downstream broadcast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastRx3
: Number of downstream broadcast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastTx0
: Number of downstream broadcast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastTx1
: Number of downstream broadcast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastTx2
: Number of downstream broadcast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastTx3
: Number of downstream broadcast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastGenerated0
: Number of layer generated downstream unicast bytesType: uint64 Clearable: yes
-
numDownstreamBytesUnicastGenerated1
: Number of layer generated downstream unicast bytesType: uint64 Clearable: yes
-
numDownstreamBytesUnicastGenerated2
: Number of layer generated downstream unicast bytesType: uint64 Clearable: yes
-
numDownstreamBytesUnicastGenerated3
: Number of layer generated downstream unicast bytesType: uint64 Clearable: yes
-
numDownstreamBytesUnicastRx0
: Number of downstream unicast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastRx1
: Number of downstream unicast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastRx2
: Number of downstream unicast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastRx3
: Number of downstream unicast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastTx0
: Number of downstream unicast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastTx1
: Number of downstream unicast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastTx2
: Number of downstream unicast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastTx3
: Number of downstream unicast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastDrop0
: Number of downstream broadcast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastDrop1
: Number of downstream broadcast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastDrop2
: Number of downstream broadcast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastDrop3
: Number of downstream broadcast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastGenerated0
: Number of layer generated downstream broadcast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastGenerated1
: Number of layer generated downstream broadcast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastGenerated2
: Number of layer generated downstream broadcast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastGenerated3
: Number of layer generated downstream broadcast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastRx0
: Number of downstream broadcast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastRx1
: Number of downstream broadcast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastRx2
: Number of downstream broadcast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastRx3
: Number of downstream broadcast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastTx0
: Number of downstream broadcast packets transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastTx1
: Number of downstream broadcast packets transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastTx2
: Number of downstream broadcast packets transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastTx3
: Number of downstream broadcast packets transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastDrop0
: Number of downstream unicast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastDrop1
: Number of downstream unicast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastDrop2
: Number of downstream unicast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastDrop3
: Number of downstream unicast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastGenerated0
: Number of layer generated downstream unicast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastGenerated1
: Number of layer generated downstream unicast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastGenerated2
: Number of layer generated downstream unicast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastGenerated3
: Number of layer generated downstream unicast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastRx0
: Number of downstream unicast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastRx1
: Number of downstream unicast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastRx2
: Number of downstream unicast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastRx3
: Number of downstream unicast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastTx0
: Number of downstream unicast packets transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastTx1
: Number of downstream unicast packets transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastTx2
: Number of downstream unicast packets transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastTx3
: Number of downstream unicast packets transmittedType: uint64 Clearable: yes
-
numDownstreamUnicastDataDiscardDueToRetries
:Type: uint32 Clearable: yes
-
numDownstreamUnicastDataDiscardDueToTxop
:Type: uint32 Clearable: yes
-
numDownstreamUnicastRtsCtsDataDiscardDueToRetries
:Type: uint32 Clearable: yes
-
numHighWaterMark0
:Type: uint32 Clearable: yes
-
numHighWaterMark1
:Type: uint32 Clearable: yes
-
numHighWaterMark2
:Type: uint32 Clearable: yes
-
numHighWaterMark3
:Type: uint32 Clearable: yes
-
numHighWaterMax0
:Type: uint32 Clearable: yes
-
numHighWaterMax1
:Type: uint32 Clearable: yes
-
numHighWaterMax2
:Type: uint32 Clearable: yes
-
numHighWaterMax3
:Type: uint32 Clearable: yes
-
numOneHopNbrHighWaterMark
:Type: uint32 Clearable: yes
-
numRxOneHopNbrListEvents
:Type: uint32 Clearable: yes
-
numRxOneHopNbrListInvalidEvents
:Type: uint32 Clearable: yes
-
numTwoHopNbrHighWaterMark
:Type: uint32 Clearable: yes
-
numTxOneHopNbrListEvents
:Type: uint32 Clearable: yes
-
numUnicastBytesTooLarge0
:Type: uint32 Clearable: yes
-
numUnicastBytesTooLarge1
:Type: uint32 Clearable: yes
-
numUnicastBytesTooLarge2
:Type: uint32 Clearable: yes
-
numUnicastBytesTooLarge3
:Type: uint32 Clearable: yes
-
numUnicastBytesUnsupported
:Type: uint32 Clearable: yes
-
numUnicastPacketsTooLarge0
:Type: uint32 Clearable: yes
-
numUnicastPacketsTooLarge1
:Type: uint32 Clearable: yes
-
numUnicastPacketsTooLarge2
:Type: uint32 Clearable: yes
-
numUnicastPacketsTooLarge3
:Type: uint32 Clearable: yes
-
numUnicastPacketsUnsupported
:Type: uint32 Clearable: yes
-
numUpstreamBroadcastDataDiscardDueToClobberRxDuringTx
:Type: uint32 Clearable: yes
-
numUpstreamBroadcastDataDiscardDueToClobberRxHiddenBusy
:Type: uint32 Clearable: yes
-
numUpstreamBroadcastDataDiscardDueToSinr
:Type: uint32 Clearable: yes
-
numUpstreamBroadcastDataNoiseHiddenRx
:Type: uint32 Clearable: yes
-
numUpstreamBroadcastDataNoiseRxCommon
:Type: uint32 Clearable: yes
-
numUpstreamBytesBroadcastRx0
: Number of upstream broadcast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesBroadcastRx1
: Number of upstream broadcast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesBroadcastRx2
: Number of upstream broadcast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesBroadcastRx3
: Number of upstream broadcast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesBroadcastTx0
: Number of updtream broadcast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamBytesBroadcastTx1
: Number of updtream broadcast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamBytesBroadcastTx2
: Number of updtream broadcast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamBytesBroadcastTx3
: Number of updtream broadcast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastRx0
: Number upstream unicast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastRx1
: Number upstream unicast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastRx2
: Number upstream unicast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastRx3
: Number upstream unicast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastTx0
: Number of upstream unicast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastTx1
: Number of upstream unicast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastTx2
: Number of upstream unicast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastTx3
: Number of upstream unicast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastDrop0
: Number of upstream broadcast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastDrop1
: Number of upstream broadcast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastDrop2
: Number of upstream broadcast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastDrop3
: Number of upstream broadcast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastRx0
: Number of upstream broadcast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastRx1
: Number of upstream broadcast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastRx2
: Number of upstream broadcast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastRx3
: Number of upstream broadcast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastTx0
: Number of upstream broadcast packets transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastTx1
: Number of upstream broadcast packets transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastTx2
: Number of upstream broadcast packets transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastTx3
: Number of upstream broadcast packets transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastDrop0
: Number of upstream unicast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastDrop1
: Number of upstream unicast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastDrop2
: Number of upstream unicast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastDrop3
: Number of upstream unicast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastRx0
: Number upstream unicast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastRx1
: Number upstream unicast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastRx2
: Number upstream unicast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastRx3
: Number upstream unicast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastTx0
: Number of upstream unicast packets transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastTx1
: Number of upstream unicast packets transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastTx2
: Number of upstream unicast packets transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastTx3
: Number of upstream unicast packets transmittedType: uint64 Clearable: yes
-
numUpstreamUnicastDataDiscardDueToClobberRxDuringTx
:Type: uint32 Clearable: yes
-
numUpstreamUnicastDataDiscardDueToClobberRxHiddenBusy
:Type: uint32 Clearable: yes
-
numUpstreamUnicastDataDiscardDueToSinr
:Type: uint32 Clearable: yes
-
numUpstreamUnicastDataNoiseHiddenRx
:Type: uint32 Clearable: yes
-
numUpstreamUnicastDataNoiseRxCommon
:Type: uint32 Clearable: yes
-
numUpstreamUnicastRtsCtsDataRxFromPhy
:Type: uint32 Clearable: yes
-
numUpstreamUnicastRtsCtsRxFromPhy
:Type: uint32 Clearable: yes
-
processedConfiguration
: The number of processed configuration.Type: uint64 Clearable: yes
-
processedDownstreamControl
: The number of processed downstream control.Type: uint64 Clearable: yes
-
processedDownstreamPackets
: The number of processed downstream packets.Type: uint64 Clearable: yes
-
processedEvents
: The number of processed events.Type: uint64 Clearable: yes
-
processedTimedEvents
: The number of processed timed events.Type: uint64 Clearable: yes
-
processedUpstreamControl
: The number of processed upstream control.Type: uint64 Clearable: yes
-
processedUpstreamPackets
: The number of processed upstream packets.Type: uint64 Clearable: yes
Statistic Tables
-
BroadcastPacketAcceptTable0
: Broadcast packets acceptedClearable: yes
-
BroadcastPacketAcceptTable1
: Broadcast packets acceptedClearable: yes
-
BroadcastPacketAcceptTable2
: Broadcast packets acceptedClearable: yes
-
BroadcastPacketAcceptTable3
: Broadcast packets acceptedClearable: yes
-
BroadcastPacketDropTable0
: Broadcast packets dropped by reason codeClearable: yes
-
BroadcastPacketDropTable1
: Broadcast packets dropped by reason codeClearable: yes
-
BroadcastPacketDropTable2
: Broadcast packets dropped by reason codeClearable: yes
-
BroadcastPacketDropTable3
: Broadcast packets dropped by reason codeClearable: yes
-
EventReceptionTable
: Received event countsClearable: yes
-
NeighborMetricTable
: Neighbor Metric TableClearable: no
-
NeighborStatusTable
: Neighbor Status TableClearable: no
-
OneHopNeighborTable
: Current One Hop NeighborsClearable: no
-
TwoHopNeighborTable
: Current Two Hop NeighborsClearable: no
-
UnicastPacketAcceptTable0
: Unicast packets acceptedClearable: yes
-
UnicastPacketAcceptTable1
: Unicast packets acceptedClearable: yes
-
UnicastPacketAcceptTable2
: Unicast packets acceptedClearable: yes
-
UnicastPacketAcceptTable3
: Unicast packets acceptedClearable: yes
-
UnicastPacketDropTable0
: Unicast packets dropped by reason codeClearable: yes
-
UnicastPacketDropTable1
: Unicast packets dropped by reason codeClearable: yes
-
UnicastPacketDropTable2
: Unicast packets dropped by reason codeClearable: yes
-
UnicastPacketDropTable3
: Unicast packets dropped by reason codeClearable: yes
Examples
This guide includes the IEEE 802.11abg example:
ieee80211abg-01
: A three node example using precomputed pathloss and running the B.A.T.M.A.N manet protocol with a jammer and monitor node.
ieee80211abg-01
ieee80211abg-01 experiment components: Three nodes with one host each, monitor node, and jammer node.
The ieee80211abg-01
example contains three nodes, each with a host hanging off their respective lan0
interface, a jammer node, and monitor node.
All physical layers are configured to use the precomputed
propagation model and emaneeventservice
publishes PathlossEvents
using the values in pathloss.eel
.
0.0 nem:1 pathloss nem:2,70
0.0 nem:1 pathloss nem:3,75
0.0 nem:1 pathloss nem:4,70
0.0 nem:1 pathloss nem:5,70
0.0 nem:2 pathloss nem:3,70
0.0 nem:2 pathloss nem:4,70
0.0 nem:2 pathloss nem:5,70
0.0 nem:3 pathloss nem:4,70
0.0 nem:3 pathloss nem:5,70
0.0 nem:4 pathloss nem:5,70
emane-guide/examples/ieee80211abg-01/pathloss.eel
With emane-guide/examples/ieee80211abg-01
running, we can use otestpoint-labtools-mtabletool
to subscribe to all EMANE.IEEE80211abg.Tables.Neighbor
probes, and build a combined Neighbor interval average SINR table showing the number of received packets in each measurement interval and the measurement interval average computed from long running averages of SINR.
$ otestpoint-labtools-mtabletool \
localhost:9002 \
Measurement_emane_ieee80211abg_tables_neighbor@neighbormetrictable \
EMANE.IEEE80211abg.Tables.Neighbor \
--actions \
"pass(c=(0));" \
"delta(c=(1))=>|{}_intvl|;" \
"iavg(c=(7),n=(1))=>|{}_intvl|;"
The displayed combined neighbor interval average SINR table shows a lower SINR between node-1
and node-3
due to the higher pathloss between the nodes, 75dB, as compared to 70dB between all other nodes.
Measurement_emane_ieee80211abg_tables_neighbor@neighbormetrictable
_Publisher NEM Rx Pkts_intvl SINR Avg_intvl
0 node-1 2 29 26.9897
1 node-1 3 29 21.9897
2 node-1 65535 0 NaN
3 node-2 1 29 26.9897
4 node-2 3 29 26.9897
5 node-2 65535 0 NaN
6 node-3 1 29 21.9897
7 node-3 2 29 26.9897
8 node-3 65535 0 NaN
We can monitor the B.A.T.M.A.N. Next Hop Matrix using batman-nexthop-monitor.py
.
$ ~/dev/emane-guide/examples/scripts/batman-nexthop-monitor.py 3
The displayed matrix shows the node reporting it’s next hops (Reporter
) followed by column for each final destination, where ‘--
’ indicates the self-identify entry, ‘*
’ indicates the final destination is the next hop, and a node id indicates the next hop to the destination.
== B.A.T.M.A.N. Next Hop Matrix ==
+----------------+----------+----------+----------+
| Reporter | 1 | 2 | 3 |
+----------------+----------+----------+----------+
| 1 | -- | * | * |
| 2 | * | -- | * |
| 3 | * | * | -- |
+----------------+----------+----------+----------+
As shown, the network is fully informed with all nodes a single hop from each other.
Using emane-jammer-simple-control
, we can instruct the jammer, node-4
, to create a continuous tone centered at 2.39GHz with a 20MHz (default) bandwidth, and -20dBm transmit power.
$ emane-jammer-simple-control -v node-4:45715 on 4 2390000000,-20 -a omni
The resulting tone can be viewed using the monitor, node-5
, and emane-spectrum-analyzer
.
$ emane-spectrum-analyzer \
10.99.0.5:8883 \
-100 \
--with-waveforms \
--hz-min 2350000000 \
--hz-max 2500000000 \
--subid-name 1,IEEE802.11
Monitor view of spectrum during jamming activity.
From the combined neighbor interval average SINR table, we can see that the SINR between all nodes drops by ~4dB.
_Publisher NEM Rx Pkts_intvl SINR Avg_intvl
0 node-1 2 30 23.0103
1 node-1 3 29 18.0103
2 node-1 65535 0 NaN
3 node-2 1 30 23.0103
4 node-2 3 29 23.0103
5 node-2 65535 0 NaN
6 node-3 1 30 18.0103
7 node-3 2 30 23.0103
8 node-3 65535 0 NaN
For node-1
and node-3
this drop in SINR has big implications when running at 54Mbps.
$ emanesh node-1 get config nems mac mode unicastrate multicastrate
nem 1 mac mode = 3
nem 1 mac multicastrate = 12
nem 1 mac unicastrate = 12
Since the bidirectional link between node-1
and node-3
started at a higher pathloss, the change in SINR from 21.9dB to 18.01dB results in a probability of reception of almost 0. This can be verified by consulting emane-guide/examples/rfpipe-01/node-1/emane-ieee80211abg-pcr.xml
.
All nodes in this example are using the same PCR definitions. For 54Mbps, an SINR of 21dB results in 71.3% probability of reception and an SINR of 18dB results in 0.2% probability of reception.
This can be seen in the B.A.T.M.A.N. Next Hop Matrix, where now node-1
and node-3
must hop through node-2
in order to complete traffic.
== B.A.T.M.A.N. Next Hop Matrix ==
+----------------+----------+----------+----------+
| Reporter | 1 | 2 | 3 |
+----------------+----------+----------+----------+
| 1 | -- | * | 2 |
| 2 | * | -- | * |
| 3 | 2 | * | -- |
+----------------+----------+----------+----------+
One way to restore single hop connectivity between node-1
and node-3
is to reduce their data rate, which causes a different PCR curve to be used. Setting both nodes to 36Mbps will result in 100% probability of reception for SINR greater than or equal to 18dB.
$ emanesh node-1 set config nems mac unicastrate=10 multicastrate=10 && \
emanesh node-3 set config nems mac unicastrate=10 multicastrate=10
The B.A.T.M.A.N. Next Hop Matrix now shows node-1
and node-3
directly connected.
== B.A.T.M.A.N. Next Hop Matrix ==
+----------------+----------+----------+----------+
| Reporter | 1 | 2 | 3 |
+----------------+----------+----------+----------+
| 1 | -- | * | * |
| 2 | * | -- | * |
| 3 | * | * | -- |
+----------------+----------+----------+----------+