Skip to content

Release Notes

Steven Galgano edited this page Nov 16, 2023 · 22 revisions

1.5.1

New Features
  • befa0f3: Initial development of the Bent Pipe radio model: a generic regenerative bent-pipe (u-bend) satellite model. The model supports configuration of one or more transponders, where each transponder may operate in ubend or process mode. A transponder operating in ubend mode will relay any successfully received over-the-air uplink frame over its downlink channel. A transponder operating in process mode will forward any successfully received over-the-air frame up the stack for processing. Bent Pipe differentiates between operating as a satellite or ground station solely based on transponder receive action, either ubend or process, and can be configured as a satellite with inter-satellite links by using a combination of ubend and process transponders.

  • 2be4840: Added two configuration parameters to the virtual and raw transports:

    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>. Prior to the availability of this configuration parameter, the transport would assign all ethertypes not IPv4 or IPv6 (categorized as unknown) a priority of 0.

    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 is 0, which is the priority that has always been assign to ARP.

  • 210df81: Modified RFSignalTable internals and update method to use dB instead of mW. Added an additional SINR parameter to update method. Modified long duration average implementation. Changed NeighborMetricManager float usage to double for increased precision.

Bugs
  • 5eda6db & 45fd7ef: Fixed rfpipe issue with delay and/or jitter which incorrectly resulted in a compounded delay over time. Configuring a delay and/or jitter delays the insertion of the packet into the downstream queue using a timer. When the timer expires, the packet is inserted into the downstream queue where packets are worked off FIFO, rate limited by datarate.

1.4.1

New Features
  • 86854c4: Added spectral mask support to the emulator physical layer to model the effects at receiving nodes from transmitters that radiate energy at frequencies (side lobes and spurs) outside its defined bandwidth (main lobe/beam).

  • bc32fd7: Changed the antennaprofile.dtd profile element quantifier to allow for an antenna manifest file with zero profiles to be valid.

  • a1cc222: Updated build settings to c++17.

Bugs
  • 5d4c88b: Restored radio model ability to set TX antenna bandwidth.

  • 449ef0b: Fixed Doppler factor calculation.

  • 25eaa60: Updated term within transformation matrix that was incorrectly inverted when accounting for both sine(pitch) and sine(roll) in counter clockwise direction.


1.3.3

Bugs
  • ceab06e: Modified to address compile errors with gcc 11.2.1.

1.3.2

Bugs
  • b6a1ce4: Added additional AntennaManager logic when processing antenna profile updates to determine if a new pattern has been selected.

  • cb13fb6: Added logic to GainManager to verify a local profile defined antenna pattern is defined prior to attempting to determine gain.


1.3.1

New Features
  • afb0271: Added MIMO capability to the emulator physical layer. The physical layer supports MIMO by allowing simultaneous use of multiple transmit and receive antenna. Waveform implementation specifics are modeled within the radio model, with MIMO control messages conveying transmit and receive information between the layers.

  • 02f0500: Added Doppler shift processing to the emulator physical layer. Doppler shift is calculated when both the transmitter and receiver location and velocity are known at the receiver, and the physical layer dopplershiftenable parameter is set to on. Setting dopplershiftenable to off disables Doppler shift processing.

  • 66c74fd: Updated the physical layer ReceivePowerTable to include per antenna path per frequency: pathloss, tx gain, and rx gain values used to compute the most recent receive power. Pathloss value is either a precomputed value or the calculated freespace or 2ray computed value, depending on propagationmodel. The tx and rx gain values are either fixed or computed from the current antenna profile, depending on fixedantennagainenable.

  • Pull 198: Added lognormal fading model to the emulator physical layer. The Lognormal fading model was created to more accurately model Free Space Optical (FSO) loss, but is written in a purely statistical manner so it may have other uses. The model works by creating a constant series of fades, each of which has a constant fade depth that may or may not cause packet loss. The model keeps internal state on the time each fading period ends, and generates a new fading period once a packet arrives after the current fading period has ended. Fade depths (related to the effective pathloss experienced during the fade) are lognormally distributed (but constant during a given fading period). Fade lengths are normally distributed.

Bugs
  • 8755b9f: For the physical layer 2ray propagation model, limit remote and local altitude inputs to a minimum of 1.0 meters to avoid divergence to infinite pathloss as altitude approaches 0.

1.2.7

New Features
  • 0bd1c3a & 2afbb07: Allow custom MAC and Transport constructor arguments. Change uses a parameter pack to allow an arbitrary number of arguments to be passed to the custom constructors. Using perfect forwarding there should be no additional cost in copying those params to the MAC instance.
Bugs
  • 6ac55b0: Fixed the physical layer checkHorizon calculation. checkHorizon calculates the distance to the earth's horizon as a function of a NEM's altitude. The calculation is performed to determine whether two NEMs are mutually in line of sight above the curved surface of the earth. The physical layer drops packets between two nodes when their summed distance to horizon is less than their distance apart. Calculation was incorrectly assuming NEM altitude above the earth's surface was always less than the mean earth radius.

  • 8b9c95d: Fixed noise recorder clear issue for spectrum filters with sub-band bins. Stale wheel entry recordings were only overwritten for the sub-band bins specified during an update, leaving old energy in the remaining sub-band bins. Updated logic now clears all sub-band bins before setting the bins specified in the update when a stale wheel entry is detected.

  • 00032e4: Added pcap_set_immediate_mode to rawtransport.cc. Later Fedora and Ubuntu distros were experiencing a delay in packet read/receive processing. With immediate mode, packets are always delivered as soon as they arrive, with no buffering.


1.2.6

New Features
  • e0af1f6: Added SpectrumFilter support to the emulator physical layer. A physical layer spectrum filter is added/removed dynamically by a radio model. Filter spectrum windows are queried similar to spectrum energy windows, and are used in conjunction with spectrum energy windows to perform actions such as excision and cancellation.

  • 67c34ff: Added physical layer passthrough noise mode. When configured for passthrough noise, the physical layer will send all over-the-air messages, provided they have at least one frequency segment above the receiver sensitivity, to the radio model for processing. Spectrum monitor energy recording (signal and noise) does not occur in the physical layer when in passthrough mode.


1.2.5

Bugs
  • Issue 97: TDMA model earliest SOR in-band receiver lock selection error.

  • 051ec00: Noise recorder clear and flush updates.

  • Issue 112: Make otamessage.py python3 compatible.


1.2.4

New Features
  • Added TxWhileRxInterferenceControlMessage downstream control message to allow a radio model that is capable of simultaneous transmit and receive to specify energy to apply to the spectrum monitor as noise during a transmission.
Notes
  • This release results in no change in performance of the emulator or existing radio models unless the new TxWhileRxInterferenceControlMessage is transmitted by a radio model supporting simultaneous transmit and receive. Radio models in this distribution do not support simultaneous transmit and receive.

1.2.3

New Features
  • Added support for instantiating an emulator instance as part of another application using an embedded radio model similar to what is supported for embedded transports.

    An embedded radio model is an EMANE::MACLayerImplementor derived class that is instantiated as part of an application using NEMBuilder::buildMACLayer_T():

     // create an NEM builder
     EMANE::Application::NEMBuilder nemBuilder{};
    
     // create an NEMLayers instance to hold the layers of your NEM
     EMANE::Application::NEMLayers layers{};
    
     // create an instance of YOUR radio model
     auto items =
       nemBuilder.buildMACLayer_T<Embedded::RadioModel>(id,
                                                  "embeddedradiomodel",
                                                  {
                                                     {"message",{sMessage}}
                                                  },
                                                  false);
    
     // store a borrowed reference to your radio model instance for your use
     Embedded::RadioModel * pRadioModel{std::get<0>(items)};
    
     // add your radio model (as an NEMLayer) to your NEM layers
     layers.push_back(std::move(std::get<1>(items)));
    
     // create and add to layers an emulator physical layer instance
     layers.push_back(nemBuilder.buildPHYLayer(id,
                                       "",
                                       {
                                        {"fixedantennagain",{"0.0"}},
                                        {"fixedantennagainenable",{"on"}},
                                        {"bandwidth",{"1M"}},
                                        {"noisemode",{"all"}},
                                        {"propagationmodel",{"precomputed"}},
                                        {"systemnoisefigure",{"7.0"}},
                                        {"subid",{"65533"}}
                                       },
                                       false));
    
     // create a list of all NEMs in your application
     // (there should only be one)
     EMANE::Application::NEMs nems{};
    
     nems.push_back(nemBuilder.buildNEM(id,
                                        layers,
                                        {},
                                        false));
    
     // create application instance UUID
     uuid_t uuid;
     uuid_generate(uuid);
    
     // create an NEM manager to control the emulator state
     // transitions and specify all the configuration traditionally
     // part of the platform XML
     auto pNEMManager =
       nemBuilder.buildNEMManager(uuid,
                            nems,
                            {
                             {"otamanagerchannelenable",{"on"}},
                             {"otamanagergroup",{"224.1.2.8:45702"}},
                             {"otamanagerloopback",{"on"}},
                             {"otamanagerdevice",{"lo"}},
                             {"eventservicegroup",{"224.1.2.8:45703"}},
                             {"eventservicedevice",{"lo"}},
                             {"controlportendpoint",{sControlPortEndpoint}}
                            });
    
     // start the NEM manager
     pNEMManager->start();
    
     // post-start the NEM manager
     pNEMManager->postStart();

    See the emane-embedded-example project for a complete example application.

  • Added slot status uint64 counters to the TDMA model to summarize slot performance:

    • numTxSlotValid: Number of valid Tx slots
    • numTxSlotErrorMissed: Number of Tx slot missed errors
    • numTxSlotErrorTooBig: Number of Tx slot too big errors
    • numRxSlotValid: Number of valid Rx slots
    • numRxSlotErrorMissed: Number of Rx slot missed errors
    • numRxSlotErrorRxDuringIdle: Number of Rx slot rx during idle errors
    • numRxSlotErrorRxDuringTx: Number of Rx slot during tx errors
    • numRxSlotErrorRxTooLong: Number of Rx slot rx too long errors
    • numRxSlotErrorRxWrongFrequency: Number of Rx slot rx wrong frequency errors
    • numRxSlotErrorRxLock: Number of Rx slot rx lock errors
Bugs
  • Issue 89: Fixed GainManager below horizon check. The variable holding the distance between nodes, which is used in the below horizon check, was only being populated when the transmitter was using antenna profiles. The updated logic works with both fixed gain and antenna profiles.

  • Issue 88 Added logic to the TDMA base model implementation to cancel a pending transmit timer on stop. This addresses a race condition where model contents may have been destroyed prior to a callback referencing those contents executing.

  • Syntax modifications to address segmentation faults caused by redhat-hardened rpmbuild compiler settings used in Fedora 29.


1.2.2

Notes
  • This is a minor release with no functional emulator or model changes.
Bugs
  • Fixed README.md mailing list URL.
  • Fixed RPM spec file Fedora version test for Python 3 to work for all versions >= 26.
  • Pull 86: Added missing function implementation for INETAddr::isMulticast.

1.2.1

New Features
  • Issue 80: Python module rename/reorg from emanesh to emane.

    Renamed the emanesh python model to emane. Moved all shell related module content to emane.shell. Split the former emanesh.schema package data into emane.shell.schema, emane.events.schema and emane.ota.schema to hold respective sub-module schema.

    Added the emane.info module to provided __version__ and __version_info__. Where, __version__ is the version string corresponding to PACKAGE_VERSION and __version_info__ is an integer 3-tuple corresponding to the PACKAGE_VERSION parts.

    Scripts can achieve backward compatibility with the emanesh module using try block imports such as:

       try:
           from emane.events import EventService,PathlossEvent
       except:
           from emanesh.events import EventService,PathlossEvent
  • Pull 77: Added Nakagami-m fading support to the emulator physical layer. The emulator physical layer supports per source fading model selection that can be modified via fading selection events.

    The following configuration parameters were added:

    1. fading.model: One of either none,event or nakagami. Selecting event requires fading selection events in order to determine the fading model to use per NEM source. Running-state modifiable.

    2. fading.nakagami.distance0: Distance used for lower bound shape selection in meters. Running-state modifiable.

    3. fading.nakagami.distance1: Distance used for upper bound shape selection in meters. Running-state modifiable.

    4. fading.nakagami.m0: Shape factor to use for distance < fading.nakagami.distance0. Running-state modifiable.

    5. fading.nakagami.m1: Shape factor to use for distance >= fading.nakagami.distance0 and < fading.nakagami.distance1. Running-state modifiable.

    6. fading.nakagami.m2: Shape factor to use for distance >= fading.nakagami.distance1. Running-state modifiable.

    Additional drop table columns were added for fading related drops: Fade Location, Fade Algorithm and Fade Select. Fade Location indicates fading was enabled but source and/or destination location is unknown. Fade Algorithm indicates the selected fading model was unable to calculate receive power due to an internal error. Fade Select indicates no fading model selection was made for the NEM source.

    The physical layer FadingSelectionInfoTable table lists the fading model used per NEM source.

      nem 1   phy FadingSelectionInfoTable
      | NEM | Model    |
      | 2   | none     |
      | 3   | nakagami |
    

    Note: This table only reflects the fading model used when the fading.model configuration parameter is set to event.

    The emaneevent-fadingselection utility can be used to quickly set the fading model selection of 1 or more NEMs:

      emaneevent-fadingselection 1:10 nakagami -i lo
    

    The EEL fadingselection sentence parser adds fading selection support to EEL scenarios:

      <time> nem:<Id> fadingselection nem:<Id>,'none'|'nakagami'
        [nem:<Id>,'none'|'nakagami']...
    
  • Pull 75: Added functionality to the OTAManager to allow fragmenting OTA messages based on a configurable MTU value. This functionality allows for emulating waveforms with burst rates greater than what can be supported via the UDP multicast OTA channel.

    Three new configuration items were added to support OTA fragmentation:

    1. otamanagermtu: MTU to enforce. Set to 0 to disable fragmentation.

    2. otamanagerpartcheckthreshold: Rate in seconds to check if part reassembly efforts should be abandoned due to missing fragments.

    3. otamanagerparttimeoutthreshold: Threshold in seconds to wait for another fragment before abandoning a specific packet reassembly.

    An additional column was added to the OTAChannelPacketCountTable emulator statistic table to indicate the number of packets dropped by the emulator due to missing one or more fragments broken out by source.

    A new statistic numOTAChannelUpstreamPacketsDroppedMissingPart was added to indicate total packets dropped due to missing fragments.

    This functionality breaks OTA message compatibility with previous versions of emane.

  • Pull 75: Added BoundaryMessageManager support for using either UDP or TCP connections when using external transports. OTA support for fragmenting messages means a transport may send/receive a downstream/upstream message that is larger than what can be communicated using UDP wire-level messaging. Configuring the NEM to use TCP allows the transport to communicate messages via a connected stream.

    The protocol configuration item was added to the platform nem element and can be either: udp or tcp. The configuration item defaults to udp, allowing existing configuration for external transports to remain unchanged.

    <nem id="1" definition="rfpipenem.xml" transport="external">
      <param name="platformendpoint" value="10.99.0.100:8201"/>
      <param name="transportendpoint" value="10.99.0.1:8301"/>
      <param name="protocol" value="tcp"/>
      <transport definition="transvirtual.xml">
        <param name="address" value="10.100.0.1"/>
        <param name="mask" value="255.255.255.0"/>
      </transport>
    </nem>

    Similarly, transportdaemon instance element XML supports the same protocol configuration item, value set and default. The emanegentransportxml script was updated to support generating emanetransportd XML containing optional protocol specifications.

    Functionality was added to the BoundaryMessageManager to allow when using TCP, either side of an external transport connection (emane or the application hosting the TransportManager instance) to start or stop in any order with automatic reconnection.

  • Python3 packaging improvements.

    Modified rpm spec and debian control files to support building both python2-emane and python3-emane as part of the same build process.

    Modified package install rules to add the python version to all python script file names. With a non-version default sym linked to python2. This allows side by side installation of both python2-emane and python3-emane. For example:

    • /usr/bin/emanesh-2 -> /usr/bin/emanesh-2.7
    • /usr/bin/emanesh -> /usr/bin/emanesh-2
    • /usr/bin/emanesh-3 -> /usr/bin/emanesh-3.6

    Python3 package build support can be disabled:

     # make rpm RPMBUILD_ARGS="--without python3"
    
    # make deb WITHOUT_PYTHON3=1
    
  • TDMA model enhancements.

    Enhanced TDMA radio model message reassembly logic to support reconstruction when encountering out-of-order fragments.

    Added TDMA radio model RxSlotStatusTable Lock drop reason column to count the number of packets dropped due to receiver lock. When more than one over-the-air message arrives in the same slot, on the same frequency, the receiver will lock on to the message with the earliest start-of-reception or the first one processed when start-of-reception time is equal.

Bugs
  • Issue 81: Added make uninstall functionality to src/emane/python.
  • Issue 79: Added DownstreamPacket::prependLengthPrefixFramingLong() method to prepend a 4 byte length prefix frame. Added UpstreamPacket::stripLengthPrefixFramingLong() method to strip and return a 4 byte length prefix frame.
  • Issue 73: Added missing INETAddr::getPort() implementation.
  • Issue 71: Added logic to NEMQueuedLayer::processWorkQueue() to continue when epoll_wait interrupted by a signal handler.
  • Issue 70: Reserved via name change and initialized existing unused member to preserve ABI.
  • Issue 68: Added missing throw for makeException statements.
  • Issue 66: Added logic to ControlPortService to close a session socket on a non-zero return from ControlPortSession::process().
  • Issue 65: Removed absolute path requirement from parameter descriptions that allow relative path.
  • Issue 64: Removed flag suppressing DTD validation errors during CommEffect filter file parsing.

1.0.1

New Features
  • Pull 44: Removed remaining ACE framework code and replaced with C++11 or native Linux equivalent.

  • Issue 48: Added emulator level statistics and statistic tables to track the number of sent and received OTA and Event channel messages. Modifications were made to the emanesh command line to allow targeting of emulator level statistics, tables and configuration.

    The target emulator can be used to query emulator level items, the target * now means all NEMS and the emulator, and a new target nems means all NEMs:

    Get the mac config from all nems

    [emanesh (host:47000)] ## get config nems mac
    

    Get the stats from all nem components and the emulator:

    [emanesh (localhost:47000)] ## get stat * all
    

    Added OTA Channel upstream (rx) and downstream (tx) statistics counters:

    • numOTAChannelUpstreamPackets
    • numOTAChannelDownstreamPackets

    Added OTA Channel attached event rx and tx statistic counters. It is possible to have more than one attached event in a single OTA packet:

    • numOTAChannelEventsRx
    • numOTAChannelEventsTx

    Added OTA Channel packet and event count statistic tables to track the number of rx and tx packets and events per emulator instance (using emulator UUID). The event count table tracks attached OTA events.

    • OTAChannelEventCountTable
    • OTAChannelPacketCountTable

    The number of allowed rows in the OTAChannelEventCountTable and OTAChannelPacketCountTable are controlled by two new emulator (platform xml) configuration items which default to 0, meaning do not populate the tables:

    • stats.ota.maxeventcountrows
    • stats.ota.maxpacketcountrows

    Added Event Channel event rx and tx statistic counters. It is possible to have more than one event contained in an Event Channel message, these counters correspond to the number of events:

    • numEventChannelEventsRx
    • numEventChannelEventsTx

    Added an Event Channel event count statistic table to track the number of rx and tx events per emulator/generator instance (using emulator/generator UUID). The event count table tracks events, where it is possible to have more than one event in a single event channel message:

    • EventChannelEventCountTable

    The number of allowed rows in the EventChannelEventCountTable is controlled by a new emulator (platform xml) configuration item which defaults to 0, meaning do not populate the table:

    • stats.event.maxeventcountrows
  • Issue 49: Modified UpstreamPacket and DownstreamPacket implementation to use reference counted shared data store for packet data.

  • Issue 50: Added a new FileDescriptorServiceProvider API that allows for adding arbitrary file descriptors for functor queue processing.

    New API example:

    pPlatformService_->fileDescriptorService().addFileDescriptor(iFd,
                                                                 FileDescriptorServiceProvider::DescriptorType::READ,
                                                                 std::bind(&MyRadioModel::readDevice,
                                                                           this,
                                                                           std::placeholders::_1));
  • Issue 51: Modified the timer service to allow scheduling callables. The existing 0.9 API is still available.

    New API example:

    downstreamQueueTimedEventId_ =
                pPlatformService_->timerService().
                schedule(std::bind(&MACLayer::handleDownstreamQueueEntry,
                                   this,
                                   currentEndOfTransmissionTime_,
                                   u64TxSequenceNumber_),
                         currentEndOfTransmissionTime_);
  • Pull 54: Multiple fixes for timers, timer scheduling, and related types. Modified to reschedule interval timers based on their scheduled expiration time to prevent drifting. Expiration time is given as an EMANE::TimePoint, a type alias for EMANE::Clock::time_point. EMANE::Duration is now a type alias for EMANE::Clock::duration and should be used when specifying timer intervals.

  • Issue 58: Improved memory utilization under heavy load.

  • Issue 60: Modified TDMA model upstream processing to drop packets when the start-of-transmission slot does not match the end-of-reception slot.

  • Issue 53, Issue 57, Pull 59, Pull 63: Build and packaging improvements. Modifications include emanesh rpm/deb package rename to python-emane.

Bugs
  • Issue 45: Problem with leading zero on certain radio frequency values
  • Issue 47: emanesh not allowing set config for parameters with period in name
  • Issue 52: IPv6 address manipulation buffer overflow
  • Issue 56: Remove unneeded google::protobuf::FatalException * try/catch and google::protobuf::RepeatedPtrField usage.
  • Issue 61: autogen.sh overwriting INSTALL

0.9.3

New Features
  • Pull 15: Additional emulator physical layer statistic table was added to show per NEM receive power information. The table includes NEM Id, frequency, receive power and time of the last receive packet.

    nem 1   phy ReceivePowerTable
    | NEM | Frequency  | Rx Power | Last Packet Time |
    | 2   | 2000000000 | -85.0    | 1449703481.66    |
    | 3   | 2000000000 | -80.0    | 1449703481.73    |
    | 4   | 2000000000 | -120.0   | 1449703482.06    |
    | 5   | 2000000000 | -115.0   | 1449703482.19    |
    | 6   | 2000000000 | -110.0   | 1449703481.33    |
    | 7   | 2400000000 | -90.0    | 1449703481.85    |
    | 8   | 2400000000 | -85.0    | 1449703481.68    |
    | 9   | 2400000000 | -80.0    | 1449703481.48    |
    | 10  | 2400000000 | -90.0    | 1449703482.12    |
    | 11  | 2400000000 | -85.0    | 1449703481.73    |
    | 12  | 2400000000 | -80.0    | 1449703481.33    |
    
  • Pull 18: As part of existing ACE migration activities, the plugin DLL management code was refactored to use native system calls.

  • Pull 22: A new TDMA radio model was developed. The radio model implements a generic TDMA scheme that supports TDMA schedule distribution and updates in realtime using events. The TDMA radio model supports the following features:

    1. Supports TDMA schedule definition including slot size, slot overhead, frame size as well as per slot datarate, frequency, power, service class and optional destination.

    2. Supports priority queues which map user traffic based on DSCP. Outbound messages are dequeued FIFO based on slot service class queue mapping and a highest to lowest priority queue search, if necessary.

    3. Supports fragmentation and reassembly of large outbound messages based on per slot datarates.

    4. Supports aggregation of smaller outbound messages into larger over-the-air messages.

    5. Supports flow control.

    6. Supports user defined Packet Completion Rate curves as a function of SINR.

  • Pull 34, Issue 40: Modifications were made to RF Pipe and IEEE 802.11abg logic to short circuit timer use for transmission delay during periods of high downstream traffic. Instead of waiting for the transmit duration timer to fire in order to send the next downstream packet, a check is performed during processDownstreamPacket() to see if transmission delay time has passed with timer callback execution still pending. Under this condition, the next downstream packet will be sent, the associated timer callback will either perform no operation when executed or transmit the next available packet if the new end-of-transmission has expired.

  • Pull 41: Additional controls were added to allow per frequency segment transmit power specification by a radio model in the downstream direction. When specified, the frequency segment power level takes precedent over the transmitter power level specified in the transmitter control message.

    Due to a subtle change in the FrequencySegment API, this modification will require radio models to be recompiled prior to use in 0.9.3.

    Prior to this change the FrequencySegment API used a default value and a comment to indicate that dRxPowerdBm parameter was meant for upstream use only. If a radio model instantiated a FrequencySegment instance in the downstream direction and set the dRxPowerdBm parameter, it will need to be modified for use in 0.9.3.

    /**
       * Create a FrequencySegment instance 
       *
       * @param u64FrequencyHz Frequency in Hz
       * @param durationMicroseconds Segment duration in microseconds
       * @param offsetMicroseconds Segment offset relative to the start not the previous segment
       * @param dRxPowerdBm Receive power of the segment in dBm (upstream only)
       */
      FrequencySegment(std::uint64_t u64FrequencyHz,
                       const Microseconds & durationMicroseconds,
                       const Microseconds & offsetMicroseconds = Microseconds::zero(),
                       double dRxPowerdBm = 0);
    
    

    The new interface removes the dRxPowerdBm parameter in the downstream direction for those radio models not setting per frequency segment power levels.

     /**
       * Create a FrequencySegment instance 
       *
       * @param u64FrequencyHz Frequency in Hz
       * @param durationMicroseconds Segment duration in microseconds
       * @param offsetMicroseconds Segment offset relative to the start not the previous segment
       */
      FrequencySegment(std::uint64_t u64FrequencyHz,
                       const Microseconds & durationMicroseconds,
                       const Microseconds & offsetMicroseconds = Microseconds::zero());
    
  • The '.' character was added to the allowable set of configuration, statistic and statistic table name characters. The first use of this can be seen with the TDMA model, where certain configuration and statistics are grouped into subsystem hierarchies.

  • Modified the emane project to use an autogen.sh script to generate autotools output files. Building emane from source now requires an additional step:

    ./autogen.sh && ./configure && make

    See Building EMANE.

Bugs
  • Issue 17: Missing include compile fixes
  • Issue 19: Virtual Transport unknown protocol destination mapping always broadcast
  • Issue 21: IEEE802.11 packet use after move RTS/CTS mode logic error
  • Issue 25: Queue latency reset in queuemetricmanager.cc not working properly
  • Pull 29: Sample NEM configuration and RPM packaging fixes
  • Issue 26: Incorrect min value for the noisemaxclampenable FrameworkPHY configuration item
  • Issue 30: EventService.nextEvent() doesn't break when EventService.breakloop() is called
  • Issue 32: Antenna pointing issue with roll rotation along z-axis up direction
  • Issue 35: SpectrumMonitor time sync threshold not applied to future time check
  • Pull 37: Use constexpr specifier for endianness conversion functions

0.9.2

New Features
  • Issue 5: Added libemane pkg-config support.
  • Issue 6: Added EMANE_VERSION preprocessor macros to support conditional plugin compilation based on version.
  • Issue 7: Added FrequencyOfInterestControlMessage to allow a radio model to select the receive frequencies for its associated Physical Layer instance.
  • Issue 9: Added the ability to instantiate transport plugins within the emulator as NEM layer stack entries. This change requires modification to all platform and NEM XML files due to DTD changes. For the most common EMANE use case, one emulator instance running per node, this feature removes the need to run emanetransportd.

The new platform.dtd and nem.dtd require transport elements to be at the top of the layer stack.

<!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="outofband"/>
   <param name="propagationmodel"         value="precomputed"/>
   <param name="systemnoisefigure"        value="4.0"/>
   <param name="subid"                    value="2"/>
   <param name="txpower"                  value="0.0"/>
 </phy>
</nem>

When using transports internal to the NEM, it is no longer necessary to specify platformendpoint and transportendpoint.

<!DOCTYPE platform SYSTEM "file:///usr/share/emane/dtd/platform.dtd">
<platform>
 <param name="otamanagerchannelenable" value="on"/>
 <param name="otamanagerdevice" value="eth1"/>
 <param name="otamanagergroup" value="224.1.2.8:45702"/>
 <param name="eventservicegroup" value="224.1.2.8:45703"/>
 <param name="eventservicedevice" value="eth1"/>
 <param name="controlportendpoint" value="0.0.0.0:47000"/>

 <nem id="1" definition="rfpipenem.xml">
   <transport definition="transvirtual.xml">
     <param name="address" value="10.100.0.1"/>
     <param name="mask" value="255.255.255.0"/>
   </transport>
   </nem>
</platform>

Use the platforml XML nem attribute transport="external" in order to specify that an NEM will be connecting to an external transport either managed by emanetransportd or embedded in another application.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE platform SYSTEM "file:///usr/share/emane/dtd/platform.dtd">
<platform>
 <param name="otamanagerchannelenable" value="on"/>
 <param name="otamanagerdevice" value="eth1"/>
 <param name="otamanagergroup" value="224.1.2.8:45702"/>
 <param name="eventservicegroup" value="224.1.2.8:45703"/>
 <param name="eventservicedevice" value="eth1"/>
 <param name="controlportendpoint" value="0.0.0.0:47000"/>

 <nem id="1" definition="rfpipenem.xml" transport="external">
   <param name="platformendpoint" value="10.99.0.100:8201"/>
   <param name="transportendpoint" value="10.99.0.1:8301"/>
   <transport definition="transvirtual.xml">
     <param name="address" value="10.100.0.1"/>
     <param name="mask" value="255.255.255.0"/>
   </transport>
 </nem>
</platform>
  • Issue 12: Timer Service internal interval timer switched to CLOCK_REALTIME from CLOCK_MONOTONIC.
  • Issue 13: Added Vector Track and Speed over Ground (VTG) NMEA sentence support to gpsdlocationagent.
Bugs
  • Issue 1: Fixed emanegentransportxml to address external entity changes in libxml2. Script was rewritten in Python.
  • Issue 2: Fixed Log Service buffer overflow.
  • Issue 8: Fixed flow control token grant acknowledgment race condition.
  • Issue 10: Fixed Physical Layer LocationEventInfoTable orientation reporting error.
  • Issue 14: Fixed emanesh boolean configuration parameter conversion logic.

0.9.1

  • Source tree layout changed to reflect namespace layout
  • Serialized messages, events and headers migrated to Google Protocol Buffers
  • Substantial reduction of ACE usage
  • EEL generator and Comm Effect model added to main distribution
  • Antenna Profile, Emulation Script and MITRE Mobility generators dropped
  • Migrated to C++11
  • Added additional statistic types
  • Added two dimensional statistic tables
  • Added common layer statistics to all radio models and the emulator physical layer
  • Added support for running-state configuration modification
  • Event addressing modified to only target NEM Ids
  • Added registrar for configuration items, statistics, statistic tables, and events
  • Added control message lists to all Functor Queue Messaging API process methods capable of processing control messages
  • processConfiguration added to Functor Queue Messaging API to handle running-state configuration changes
  • Replaced timer service with Linux interval timers
  • Added emaneinfo application to generate plugin manifest XML documentation
  • Replaced Debug Port with Remote Control Port API. See specification.
  • Added the EMANE Shell (emanesh), an interactive Remote Control Port client.
  • Added Radio-to-Router Interface (R2RI) control message support to RF Pipe and IEEE 802.11abg models. Messages provide a common set of radio metrics that can be used by clients supporting various radio-to-router protocols such as PPPoE, DLEP, etc.
  • Added DownstreamPacket::attachEvent to attach events to a packet for transmission across the OTA Channel instead of the Event Channel. When attached, events are received as part of an OTA packet transmission. They are deserialized and pushed onto the Functor Queue Messaging API before the upstream packet is enqueued, providing a guarantee of event processing prior to packet processing.
  • Universal PHY replaced by the emulator physical layer
  • New Spectrum Service provides radio models with spectrum information for use when calculating SINR and in support of Dynamic Spectrum Access (DSA)
  • Relocated RF Pipe latency and jitter capability to downstream processing in order to align with EoR spectrum querying
  • Log Service modified to off load logging to a low priority thread
  • DTD modifications

Fork

Forked DRS CenGen LLC EMANE 0.8.1. See COPYING.