Skip to content

RF Pipe Model

Steven Galgano edited this page Aug 18, 2017 · 3 revisions

Contents


Features

The RF Pipe provides the following set of features to support emulation of a varying of radio waveforms:

  1. 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,

  2. Delay between packet transmissions is applied after packet transmission.

  3. The computed delay is sent to the emulator physical layer and is included in the Common PHY Header as message duration.

  4. Bandwidth is a per node limit and not an overall network limit.

  5. 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

  1. 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

  1. 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.

Packet Completion Rate

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 above definition produces the following PCR curve:

Configuration Parameters

The following configuration parameters are available to tailor layer functionality:

datarate

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

delay

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

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.

Type: bool
Running-State Modifiable: yes
Occurrence Range: [1,1]
Value Range: [no,yes]
Default Value(s): no

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.

Type: bool
Running-State Modifiable: no
Occurrence Range: [1,1]
Value Range: [no,yes]
Default Value(s): no

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.

Type: uint16
Running-State Modifiable: no
Occurrence Range: [1,1]
Value Range: [0,65535]
Default Value(s): 10

jitter

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

neighbormetricdeletetime

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

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).

Type: string
Running-State Modifiable: no
Value Required: yes
Occurrence Range: [1,1]

radiometricenable

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

radiometricreportinterval

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


Example XML

RF Pipe configuration is specified using two files:

  1. NEM definition file
  2. 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>

Statistics

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

Statistic Tables

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