-
Notifications
You must be signed in to change notification settings - Fork 39
RF Pipe Model
The RF Pipe provides the following set of features to support emulation of a varying of radio waveforms:
-
Data/Burst rate emulation of bandwidth (rate of data transfer): On the transmit side (downstream), the RF Pipe applies a delay between packets based on packet size and configured data rate to limit the data transfer rate as configured. Where,
-
Delay between packet transmissions is applied after packet transmission.
-
The computed delay is sent to the emulator physical layer and is included in the Common PHY Header as message duration.
-
Bandwidth is a per node limit and not an overall network limit.
-
Network delay emulation: On the transmit side (downstream), the RF Pipe will apply a configurable network delay before a packet is sent to the physical layer for transmission over the air. The network delay is computed as follows:
networkDelay = delay + jitter
Where,
delay is the configuration parameter delay
jitter is the configuration parameter jitter
- Transmission delay emulation: On the receive side (upstream), the RF Pipe will compute and apply a transmission delay for each packet before sending it up the stack. The transmission delay is computed as follows:
transmissionDelay = messageDuration + propagationDelay
Where,
messageDuration is provided by the transmitter via the Common PHY Header
propagationDelay is computed by the physical layer using location events and provided as part of per packet control information
- Use of user defined Packet Completion Rate (PCR) curves as a function of SINR. The RF Pipe does not apply any additional inband interference effects and as such, the use of negative SINR values within the PCR curve file is valid only when the physical layer nodemode is set to outofband in order to raise the noise floor above the inherent receiver sensitivity.
The RF Pipe Packet Completion Rate is specified as a curve defined via XML. The curve definition is comprised of a series of SINR values along with their corresponding probability of reception. The 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.
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:
POR = POR0^(S1/S0)
Where,
POR0 is the POR value determined from the PCR curve for the given SINR value
S0 is the packet size specified in the curve file (pktsize)
S1 is the received packet size
The emulator provides the following default RF Pipe PCR curve definition.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE pcr SYSTEM "file:///usr/share/emane/dtd/rfpipepcr.dtd">
<pcr>
<table pktsize="0">
<row sinr="0.0" por="0"/>
<row sinr="0.5" por="2.5"/>
<row sinr="1.0" por="5"/>
<row sinr="1.5" por="7.5"/>
<row sinr="2.0" por="10"/>
<row sinr="2.5" por="12.5"/>
<row sinr="3.0" por="15"/>
<row sinr="3.5" por="17.5"/>
<row sinr="4.0" por="20"/>
<row sinr="4.5" por="22.5"/>
<row sinr="5.0" por="25"/>
<row sinr="5.5" por="27.5"/>
<row sinr="6.0" por="30"/>
<row sinr="6.5" por="32.5"/>
<row sinr="7.0" por="35"/>
<row sinr="7.5" por="37.5"/>
<row sinr="8.0" por="40"/>
<row sinr="8.5" por="42.5"/>
<row sinr="9.0" por="45"/>
<row sinr="9.5" por="47.5"/>
<row sinr="10.0" por="50"/>
<row sinr="10.5" por="52.5"/>
<row sinr="11.0" por="55"/>
<row sinr="11.5" por="57.5"/>
<row sinr="12.0" por="60"/>
<row sinr="12.5" por="62.5"/>
<row sinr="13.0" por="65"/>
<row sinr="13.5" por="67.5"/>
<row sinr="14.0" por="70"/>
<row sinr="14.5" por="72.5"/>
<row sinr="15.0" por="75"/>
<row sinr="15.5" por="77.5"/>
<row sinr="16.0" por="80"/>
<row sinr="16.5" por="82.5"/>
<row sinr="17.0" por="85"/>
<row sinr="17.5" por="87.5"/>
<row sinr="18.0" por="90"/>
<row sinr="18.5" por="92.5"/>
<row sinr="19.0" por="95"/>
<row sinr="19.5" por="97.5"/>
<row sinr="20.0" por="100"/>
</table>
</pcr>
The following configuration parameters are available to tailor layer functionality:
- datarate
- delay
- enablepromiscuousmode
- flowcontrolenable
- flowcontroltokens
- jitter
- neighbormetricdeletetime
- pcrcurveuri
- radiometricenable
- radiometricreportinterval
Defines the transmit datarate in bps. The datarate is used by the transmitter to compute the transmit delay (packet size/datarate) between successive transmissions.
Type: uint64
Running-State Modifiable: yes
Occurrence Range: [1,1]
Value Range: [1,18446744073709551615]
Default Value(s): 1000000
Defines an additional fixed delay in seconds applied to each transmitted packet.
Type: float
Running-State Modifiable: yes
Occurrence Range: [1,1]
Value Range: [0.000000,FLOAT_MAX]
Default Value(s): 0.000000
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.
Type: bool
Running-State Modifiable: yes
Occurrence Range: [1,1]
Value Range: [no,yes]
Default Value(s): no
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.
Type: bool
Running-State Modifiable: no
Occurrence Range: [1,1]
Value Range: [no,yes]
Default Value(s): no
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.
Type: uint16
Running-State Modifiable: no
Occurrence Range: [1,1]
Value Range: [0,65535]
Default Value(s): 10
Defines delay jitter in seconds applied to each transmitted packet. The jitter is added to the configured delay based on a uniform random distribution between +/- the configured jitter value.
Type: float
Running-State Modifiable: yes
Occurrence Range: [1,1]
Value Range: [0.000000,FLOAT_MAX]
Default Value(s): 0.000000
Defines the time in seconds of no RF receptions from a given neighbor before it is removed from the neighbor table.
Type: float
Running-State Modifiable: yes
Occurrence Range: [1,1]
Value Range: [1.000000,3660.000000]
Default Value(s): 60.000000
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).
Type: string
Running-State Modifiable: no
Value Required: yes
Occurrence Range: [1,1]
Defines if radio metrics will be reported up via the Radio to Router Interface (R2RI).
Type: bool
Running-State Modifiable: no
Occurrence Range: [1,1]
Value Range: [no,yes]
Default Value(s): no
Defines the metric report interval in seconds in support of the R2RI feature.
Type: float
Running-State Modifiable: no
Occurrence Range: [1,1]
Value Range: [0.100000,60.000000]
Default Value(s): 1.000000
RF Pipe configuration is specified using two files:
- NEM definition file
- MAC definition file
The NEM definition file groups the mac definition file along with emulator physical layer configuration and the transport definition file.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE nem SYSTEM "file:///usr/share/emane/dtd/nem.dtd">
<nem>
<transport definition="transvirtual.xml"/>
<mac definition="rfpipemac.xml"/>
<phy>
<param name="fixedantennagain" value="0.0"/>
<param name="fixedantennagainenable" value="on"/>
<param name="bandwidth" value="1M"/>
<param name="noisemode" value="none"/>
<param name="propagationmodel" value="precomputed"/>
<param name="systemnoisefigure" value="4.0"/>
<param name="subid" value="2"/>
<param name="txpower" value="0.0"/>
</phy>
</nem>
The mac definition file specifies the model DLL the emualtor will load and the desired model configuration.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mac SYSTEM "file:///usr/share/emane/dtd/mac.dtd">
<mac library="rfpipemaclayer">
<param name="enablepromiscuousmode" value="off"/>
<param name="datarate" value="1M"/>
<param name="jitter" value="0"/>
<param name="delay" value="0"/>
<param name="flowcontrolenable" value="off"/>
<param name="flowcontroltokens" value="10"/>
<param name="pcrcurveuri"
value="file:///usr/share/emane/xml/models/mac/rfpipe/rfpipepcr.xml"/>
</mac>
The below statistics can be accessed using emanesh.
Name | Type | Clearable | Description |
---|---|---|---|
avgDownstreamProcessingDelay0 | float | yes | Average downstream processing delay |
avgDownstreamQueueDelay | float | yes | |
avgProcessAPIQueueDepth | double | yes | Average API queue depth for a processUpstreamPacket, processUpstreamControl, processDownstreamPacket, processDownstreamControl, processEvent and processTimedEvent. |
avgProcessAPIQueueWait | double | yes | Average API queue wait for a processUpstreamPacket, processUpstreamControl, processDownstreamPacket, processDownstreamControl, processEvent and processTimedEvent in microseconds. |
avgTimedEventLatency | double | yes | |
avgTimedEventLatencyRatio | double | yes | 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. |
avgUpstreamProcessingDelay0 | float | yes | Average upstream processing delay |
numDownstreamBytesBroadcastGenerated0 | uint64 | yes | Number of layer generated downstream broadcast bytes |
numDownstreamBytesBroadcastRx0 | uint64 | yes | Number of downstream broadcast bytes received |
numDownstreamBytesBroadcastTx0 | uint64 | yes | Number of downstream broadcast bytes transmitted |
numDownstreamBytesUnicastGenerated0 | uint64 | yes | Number of layer generated downstream unicast bytes |
numDownstreamBytesUnicastRx0 | uint64 | yes | Number of downstream unicast bytes received |
numDownstreamBytesUnicastTx0 | uint64 | yes | Number of downstream unicast bytes transmitted |
numDownstreamPacketsBroadcastDrop0 | uint64 | yes | Number of downstream broadcast packets dropped |
numDownstreamPacketsBroadcastGenerated0 | uint64 | yes | Number of layer generated downstream broadcast packets |
numDownstreamPacketsBroadcastRx0 | uint64 | yes | Number of downstream broadcast packets received |
numDownstreamPacketsBroadcastTx0 | uint64 | yes | Number of downstream broadcast packets transmitted |
numDownstreamPacketsUnicastDrop0 | uint64 | yes | Number of downstream unicast packets dropped |
numDownstreamPacketsUnicastGenerated0 | uint64 | yes | Number of layer generated downstream unicast packets |
numDownstreamPacketsUnicastRx0 | uint64 | yes | Number of downstream unicast packets received |
numDownstreamPacketsUnicastTx0 | uint64 | yes | Number of downstream unicast packets transmitted |
numDownstreamQueueDelay | uint64 | yes | |
numHighWaterMark | uint32 | yes | |
numUpstreamBytesBroadcastRx0 | uint64 | yes | Number of upstream broadcast bytes received |
numUpstreamBytesBroadcastTx0 | uint64 | yes | Number of updtream broadcast bytes transmitted |
numUpstreamBytesUnicastRx0 | uint64 | yes | Number upstream unicast bytes received |
numUpstreamBytesUnicastTx0 | uint64 | yes | Number of upstream unicast bytes transmitted |
numUpstreamPacketsBroadcastDrop0 | uint64 | yes | Number of upstream broadcast packets dropped |
numUpstreamPacketsBroadcastRx0 | uint64 | yes | Number of upstream broadcast packets received |
numUpstreamPacketsBroadcastTx0 | uint64 | yes | Number of upstream broadcast packets transmitted |
numUpstreamPacketsUnicastDrop0 | uint64 | yes | Number of upstream unicast packets dropped |
numUpstreamPacketsUnicastRx0 | uint64 | yes | Number upstream unicast packets received |
numUpstreamPacketsUnicastTx0 | uint64 | yes | Number of upstream unicast packets transmitted |
processedConfiguration | uint64 | yes | |
processedDownstreamControl | uint64 | yes | |
processedDownstreamPackets | uint64 | yes | |
processedEvents | uint64 | yes | |
processedTimedEvents | uint64 | yes | |
processedUpstreamControl | uint64 | yes | |
processedUpstreamPackets | uint64 | yes |
The below statistics can be accessed using emanesh.
Name | Clearable | Description |
---|---|---|
BroadcastPacketAcceptTable0 | yes | Broadcast packets accepted |
BroadcastPacketDropTable0 | yes | Broadcast packets dropped by reason code |
EventReceptionTable | yes | Received event counts |
NeighborMetricTable | no | Neighbor Metric Table |
NeighborStatusTable | no | Neighbor Status Table |
UnicastPacketAcceptTable0 | yes | Unicast packets accepted |
UnicastPacketDropTable0 | yes | Unicast packets dropped by reason code |
- Home
- Introduction
- EMANE Shell
- Emulator Physical Layer
- Radio Models
- Utility Models
- Transports
- Event Generators
- Event Agents
- Building Packages
- Installing Packages
- Developer Documentation
- FAQ
- Copyright