Virtual Transport
The Virtual Transport uses the TUN/TAP interface to create a virtual interface (vif) as the emulation boundary entry/exit point.
Features
The Virtual Transport emulation boundary provides the following set of features: Virtual Interface Management, Raw Transport Interoperability, Bitrate Enforcement, Broadcast Only Mode, and IPv4 and IPv6 Capable.
Virtual Interface Management
The Virtual Transport creates a virtual interface for use as the emulation boundary. IP packets routed to the virtual device are encapsulated and transmitted to their respective NEM for downstream processing. Packets received over-the-air are processed up the NEM stack and transmitted to the NEM’s respective virtual transport for injection back into the kernel IP stack.
The newly created virtual interface is assigned an Ethernet address derived from the NEM Id associated with the transport using the following format: 02:02:00:00:XX:XX
, where XX:XX
is the 16 bit NEM Id. This allows easy mapping of Ethernet MAC addresses to NEM Ids for unicast frames. Multicast and broadcast frames map to the NEM broadcast address 0xFFFF
.
A Virtual Transport managed virtual interface can be configured via configuration parameters or managed externally, for example via DHCP.
Raw Transport Interoperability
The Virtual Transport supports interoperability with Raw Transport emulation boundaries using ARP caching to learn IP network to NEM Id associations.
Bitrate Enforcement
The Virtual Transport supports bitrate enforcement for use with models that do not limit bitrate based on emulation implementation. Set the configuration parameter bitrate
to the desired rate in bps
to enable bitrate enforcement or 0 to disable.
Broadcast Only Mode
The Virtual Transport supports forced NEM broadcasting of all IP packet types: unicast, broadcast and multicast. Set the configuration parameter broadcastmodeenable
to true
to enable broadcast only mode.
IPv4 and IPv6 Capable
The Virtual Transport supports IPv4 and IPv6 virtual interface address assignments and packet processing.
Configuration
-
address
: IPv4 or IPv6 virutal device address.Default: no Required: no Modifiable: no Type: inetaddr Occurrs: [1,1]
-
arpcacheenable
: Enable ARP request/reply monitoring to map Ethernet address to NEM.Default: yes Required: no Modifiable: no Type: bool Occurrs: [1,1] Range: [false,true] Values: true
-
arpmodeenable
: Enable ARP on the virtual device.Default: yes Required: no Modifiable: no Type: bool Occurrs: [1,1] Range: [false,true] Values: true
-
bitrate
: Transport bitrate in bps. This is the total allowable throughput for the transport combined in both directions (upstream and downstream). A value of 0 disables the bitrate feature.Default: yes Required: no Modifiable: no Type: uint64 Occurrs: [1,1] Range: [0,max_uint64] Values: 0
-
broadcastmodeenable
: Broadcast all packets to all NEMs.Default: yes Required: no Modifiable: no Type: bool Occurrs: [1,1] Range: [false,true] Values: false
-
device
: Virtual device name.Default: yes Required: no Modifiable: no Type: string Occurrs: [1,1] Values: emane0
-
devicepath
: Path to the tuntap device.Default: yes Required: no Modifiable: no Type: string Occurrs: [1,1] Values: /dev/net/tun
-
ethernet.type.arp.priority
: Defines the emulator priority value (DSCP used for IP) to use when an ARP Ethernet frame is encountered during downstream processing.Default: yes Required: no Modifiable: no Type: uint8 Occurrs: [1,1] Range: [0,255] Values: 0
-
ethernet.type.unknown.priority
: Defines the emulator priority value (DSCP used for IP) to use when the specified unknown Ethernet type is encountered during downstream processing. Uses the following format:<ethernet type>:<priority>
Default: no Required: no Modifiable: no Type: string Occurrs: [0,65535] Regex: ^(0[xX]){0,1}\d+:\d+$
-
flowcontrolenable
: Enables downstream traffic flow control with a corresponding flow control capable NEM layer.Default: yes Required: no Modifiable: no Type: bool Occurrs: [1,1] Range: [false,true] Values: false
-
mask
: IPv4 or IPv6 virutal device addres network mask.Default: no Required: no Modifiable: no Type: inetaddr Occurrs: [1,1]
Statistics
-
avgDownstreamProcessingDelay
: 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
-
avgUpstreamProcessingDelay
: Average upstream processing delayType: float Clearable: yes
-
numAPIQueued
: The number of queued API events.Type: uint64 Clearable: yes
-
numDownstreamBytesBroadcastGenerated
: Number of layer generated downstream broadcast bytesType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastRx
: Number of downstream broadcast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesBroadcastTx
: Number of downstream broadcast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastGenerated
: Number of layer generated downstream unicast bytesType: uint64 Clearable: yes
-
numDownstreamBytesUnicastRx
: Number of downstream unicast bytes receivedType: uint64 Clearable: yes
-
numDownstreamBytesUnicastTx
: Number of downstream unicast bytes transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastDrop
: Number of downstream broadcast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastGenerated
: Number of layer generated downstream broadcast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastRx
: Number of downstream broadcast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsBroadcastTx
: Number of downstream broadcast packets transmittedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastDrop
: Number of downstream unicast packets droppedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastGenerated
: Number of layer generated downstream unicast packetsType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastRx
: Number of downstream unicast packets receivedType: uint64 Clearable: yes
-
numDownstreamPacketsUnicastTx
: Number of downstream unicast packets transmittedType: uint64 Clearable: yes
-
numUpstreamBytesBroadcastRx
: Number of upstream broadcast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesBroadcastTx
: Number of updtream broadcast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastRx
: Number upstream unicast bytes receivedType: uint64 Clearable: yes
-
numUpstreamBytesUnicastTx
: Number of upstream unicast bytes transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastDrop
: Number of upstream broadcast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastRx
: Number of upstream broadcast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsBroadcastTx
: Number of upstream broadcast packets transmittedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastDrop
: Number of upstream unicast packets droppedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastRx
: Number upstream unicast packets receivedType: uint64 Clearable: yes
-
numUpstreamPacketsUnicastTx
: Number of upstream unicast packets transmittedType: uint64 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
-
BroadcastPacketAcceptTable
: Broadcast packets acceptedClearable: yes
-
BroadcastPacketDropTable
: Broadcast packets dropped by reason codeClearable: yes
-
EventReceptionTable
: Received event countsClearable: yes
-
UnicastPacketAcceptTable
: Unicast packets acceptedClearable: yes
-
UnicastPacketDropTable
: Unicast packets dropped by reason codeClearable: yes