OMNeT++ API 6.1
Discrete Event Simulation Library
cDatarateChannel Class Reference

Description

A transmission channel model that supports propagation delay, transmission duration computed from a data rate or given explicitly, and a simple error model with based on bit error rate (BER) and packet error rate (PER). The above parameters can be supplied via NED or explicit setter methods.

This class is a transmission channel, i.e. its isTransmissionChannel() method returns true. There can be at most one transmission channel in a connection path.

The treatment of packets depends on the mode setting. In mode=SINGLE, at most one transmission can be active at any given time, and overlapping transmissions are not permitted. In mode=MULTI, multiple concurrent transmissions are allowed, with consistency checking (transmission updates must refer to existing and active transmissions). The UNCHECKED mode is the low-overhead version of MULTI: the channel does not keep track of ongoing transmissions, so there are no consistency checks, and certain functionality is unavailable (e.g. the channel does not emit channelBusy signals).

Non-packet messages are let through at any time, after applying propagation delay only. They do not interfere with ongoing transmissions in any way.

By default, transmission duration is computed from the packet bit length and the channel datarate. The channel datarate is optional; if it is missing, the packet duration needs to be specified explicitly in the send() call (see SendOptions). If both datarate and explicit duration are present, the explicit duration takes precedence.

Allowing to override the duration is useful for a few cases: to account for certain parts in the frame (preamble, padding, PHY-layer header with different datarate, etc.) and for aborting at arbitrary time (for example at a fractional bit time).

The channel supports updating the ongoing transmission (see SendOptions). Duration and remainingDuration are optional, as long as the missing one(s) can be computed from the others. For example, duration can be computed as the elapsed transmission time plus remainingDuration (unless in UNCHECKED mode, when the channel doesn't keep the needed information around). Sanity checks (e.g. duration/remainingDuration cannot be negative, duration >= remainingDuration, etc.) are included.

Inheritance diagram for cDatarateChannel:
[legend]

Public Types

enum  Mode { SINGLE, MULTI, UNCHECKED }
 

Public Member Functions

Redefined cObject member functions.
virtual std::string str () const override
 
Setting and getting channel parameters.
virtual bool isTransmissionChannel () const override
 
virtual void setMode (Mode mode)
 
virtual void setDelay (double d)
 
virtual void setDatarate (double d)
 
virtual void setBitErrorRate (double d)
 
virtual void setPacketErrorRate (double d)
 
virtual void setDisabled (bool d)
 
virtual Mode getMode () const
 
virtual simtime_t getDelay () const
 
virtual double getDatarate () const
 
virtual double getBitErrorRate () const
 
virtual double getPacketErrorRate () const
 
virtual bool isDisabled () const override
 
Transmission state.
virtual double getNominalDatarate () const override
 
virtual simtime_t calculateDuration (cMessage *msg) const override
 
virtual simtime_t getTransmissionFinishTime () const override
 
virtual bool isBusy () const override
 
virtual void forceTransmissionFinishTime (simtime_t t) override
 
Implementation methods
virtual void initialize () override
 
virtual Result processMessage (cMessage *msg, const SendOptions &options, simtime_t t) override
 
- Public Member Functions inherited from cChannel
virtual void finalizeParameters () override
 
 cChannel (const char *name=nullptr)
 
virtual ~cChannel ()
 
virtual void callInitialize () override
 
virtual bool callInitialize (int stage) override
 
virtual void callFinish () override
 
virtual ComponentKind getComponentKind () const override
 
virtual cModulegetParentModule () const override
 
cChannelTypegetChannelType () const
 
virtual cPropertiesgetProperties () const override
 
virtual cGategetSourceGate () const
 
- Public Member Functions inherited from cComponent
 cComponent (const char *name=nullptr)
 
virtual ~cComponent ()
 
virtual void forEachChild (cVisitor *v) override
 
const cComponentgetThisPtr () const
 
virtual void setDisplayName (const char *name)
 
virtual const char * getDisplayName () const
 
virtual cComponentTypegetComponentType () const
 
cSimulationgetSimulation () const
 
int getId () const
 
virtual const char * getNedTypeName () const
 
virtual std::string getNedTypeAndFullName () const
 
virtual std::string getNedTypeAndFullPath () const
 
bool isModule () const
 
bool isChannel () const
 
virtual cModulegetSystemModule () const
 
virtual cModulegetModuleByPath (const char *path) const
 
virtual cModulefindModuleByPath (const char *path) const
 
virtual int getNumParams () const
 
virtual cParpar (int k)
 
const cParpar (int k) const
 
virtual cParpar (const char *parname)
 
const cParpar (const char *parname) const
 
virtual int findPar (const char *parname) const
 
bool hasPar (const char *s) const
 
virtual cRNGgetRNG (int k) const
 
virtual uint32_t intrand (uint32_t r, int rng=0) const
 
virtual double dblrand (int rng=0) const
 
virtual double uniform (double a, double b, int rng=0) const
 
virtual SimTime uniform (SimTime a, SimTime b, int rng=0) const
 
virtual double exponential (double mean, int rng=0) const
 
virtual SimTime exponential (SimTime mean, int rng=0) const
 
virtual double normal (double mean, double stddev, int rng=0) const
 
virtual SimTime normal (SimTime mean, SimTime stddev, int rng=0) const
 
virtual double truncnormal (double mean, double stddev, int rng=0) const
 
virtual SimTime truncnormal (SimTime mean, SimTime stddev, int rng=0) const
 
virtual double gamma_d (double alpha, double theta, int rng=0) const
 
virtual double beta (double alpha1, double alpha2, int rng=0) const
 
virtual double erlang_k (unsigned int k, double mean, int rng=0) const
 
virtual double chi_square (unsigned int k, int rng=0) const
 
virtual double student_t (unsigned int i, int rng=0) const
 
virtual double cauchy (double a, double b, int rng=0) const
 
virtual double triang (double a, double b, double c, int rng=0) const
 
virtual double lognormal (double m, double w, int rng=0) const
 
virtual double weibull (double a, double b, int rng=0) const
 
virtual double pareto_shifted (double a, double b, double c, int rng=0) const
 
virtual int intuniform (int a, int b, int rng=0) const
 
virtual int intuniformexcl (int a, int b, int rng=0) const
 
virtual int bernoulli (double p, int rng=0) const
 
virtual int binomial (int n, double p, int rng=0) const
 
virtual int geometric (double p, int rng=0) const
 
virtual int negbinomial (int n, double p, int rng=0) const
 
virtual int poisson (double lambda, int rng=0) const
 
virtual void subscribe (simsignal_t signalID, cIListener *listener)
 
virtual void subscribe (const char *signalName, cIListener *listener)
 
virtual void unsubscribe (simsignal_t signalID, cIListener *listener)
 
virtual void unsubscribe (const char *signalName, cIListener *listener)
 
virtual bool isSubscribed (simsignal_t signalID, cIListener *listener) const
 
virtual bool isSubscribed (const char *signalName, cIListener *listener) const
 
virtual std::vector< simsignal_tgetLocalListenedSignals () const
 
virtual std::vector< cIListener * > getLocalSignalListeners (simsignal_t signalID) const
 
virtual bool hasGUI () const
 
virtual cDisplayStringgetDisplayString () const
 
virtual void setDisplayString (const char *dispstr)
 
virtual void bubble (const char *text) const
 
virtual std::string resolveResourcePath (const char *fileName) const
 
virtual void recordScalar (const char *name, double value, const char *unit=nullptr)
 
virtual void recordScalar (const char *name, SimTime value, const char *unit=nullptr)
 
virtual void recordStatistic (cStatistic *stats, const char *unit=nullptr)
 
virtual void recordStatistic (const char *name, cStatistic *stats, const char *unit=nullptr)
 
virtual void emit (simsignal_t signalID, bool b, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, double d, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, const SimTime &t, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, const char *s, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, cObject *obj, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, const cObject *obj, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, char c, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, unsigned char c, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, short i, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, unsigned short i, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, int i, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, unsigned int i, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, long i, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, unsigned long i, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, long long i, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, unsigned long long i, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, float f, cObject *details=nullptr)
 
virtual void emit (simsignal_t signalID, long double d, cObject *details=nullptr)
 
bool mayHaveListeners (simsignal_t signalID) const
 
bool hasListeners (simsignal_t signalID) const
 
- Public Member Functions inherited from cSoftOwner
 cSoftOwner (const char *name=nullptr, bool namepooling=true)
 
virtual ~cSoftOwner ()
 
virtual bool isSoftOwner () const override
 
int getNumOwnedObjects () const
 
cOwnedObjectgetOwnedObject (int k)
 
- Public Member Functions inherited from cNoncopyableOwnedObject
 cNoncopyableOwnedObject (const char *name=nullptr, bool namepooling=true)
 
virtual cNoncopyableOwnedObjectdup () const override
 
- Public Member Functions inherited from cOwnedObject
 cOwnedObject ()
 
 cOwnedObject (const char *name, bool namepooling=true)
 
 cOwnedObject (const cOwnedObject &obj)
 
virtual ~cOwnedObject ()
 
cOwnedObjectoperator= (const cOwnedObject &o)
 
virtual cObjectgetOwner () const override
 
virtual bool isOwnedObject () const override
 
- Public Member Functions inherited from cNamedObject
 cNamedObject ()
 
 cNamedObject (const char *name, bool namepooling=true)
 
 cNamedObject (const cNamedObject &obj)
 
virtual ~cNamedObject ()
 
cNamedObjectoperator= (const cNamedObject &o)
 
virtual void setName (const char *s)
 
virtual const char * getName () const override
 
virtual void setNamePooling (bool b)
 
virtual bool getNamePooling ()
 
- Public Member Functions inherited from cObject
 cObject ()
 
 cObject (const cObject &other)=default
 
virtual ~cObject ()
 
virtual const char * getClassName () const
 
bool isName (const char *s) const
 
virtual const char * getFullName () const
 
virtual std::string getFullPath () const
 
virtual std::string getClassAndFullName () const
 
virtual std::string getClassAndFullPath () const
 
const cObjectgetThisPtr () const
 
virtual std::ostream & printOn (std::ostream &os) const
 
cObjectfindObject (const char *name, bool deep=true)
 
virtual cClassDescriptorgetDescriptor () const
 
void copyNotSupported () const
 

Protected Member Functions

virtual void handleParameterChange (const char *parname) override
 
virtual void finish () override
 
- Protected Member Functions inherited from cComponent
virtual void initialize (int stage)
 
virtual int numInitStages () const
 
virtual void refreshDisplay () const
 
virtual void preDelete (cComponent *root)
 
- Protected Member Functions inherited from cSoftOwner
virtual void take (cOwnedObject *obj) override
 
virtual void drop (cOwnedObject *obj) override
 
- Protected Member Functions inherited from cObject
void dropAndDelete (cOwnedObject *obj)
 

Constructors, destructor

 cDatarateChannel (const char *name=nullptr)
 
virtual ~cDatarateChannel ()
 
static cDatarateChannelcreate (const char *name)
 

Additional Inherited Members

- Static Public Member Functions inherited from cComponent
static simsignal_t registerSignal (const char *name)
 
static const char * getSignalName (simsignal_t signalID)
 
- Static Public Member Functions inherited from cOwnedObject
static long getTotalObjectCount ()
 
static long getLiveObjectCount ()
 
static void resetObjectCounters ()
 
static cSoftOwnergetOwningContext ()
 

Member Enumeration Documentation

◆ Mode

enum Mode

Channel operating mode

Enumerator
SINGLE 

Allow a single transmission at a time.

MULTI 

Allow multiple concurrent transmissions, with consistency checks.

UNCHECKED 

Allow multiple concurrent transmissions, with low overhead. In this mode, the channel does not keep track of ongoing transmissions, so there are no consistency checks, the isBusy() and getTransmissionFinishTime() methods are not supported, and the channel does not emit channelBusy signals.

Constructor & Destructor Documentation

◆ cDatarateChannel()

cDatarateChannel ( const char *  name = nullptr)
explicit

Constructor. This is only for internal purposes, and should not be used when creating channels dynamically; use the create() factory method instead.

◆ ~cDatarateChannel()

virtual ~cDatarateChannel ( )
inlinevirtual

Destructor.

Member Function Documentation

◆ handleParameterChange()

virtual void handleParameterChange ( const char *  parname)
overrideprotectedvirtual

This method is called by the simulation kernel to notify the module or channel that the value of an existing parameter has changed. Redefining this method allows simple modules and channels to be react on parameter changes, for example by re-reading the value. This default implementation does nothing.

Notification is initially disabled until all parameters have been set up, that is, until finalizeParameters() is invoked on this component. However, notifications are enabled while the component goes through (single or multi-stage) initialization. When implementing handleParameterChange(), one must keep in mind that the component may not have been fully initialized at the time of the call (e.g. may not have gone through all init stages yet).

One must be extremely careful when changing parameters from inside handleParameterChange(), to avoid creating infinite notification loops.

Note: before OMNeT++ version 6.0, handleParameterChange() was disabled during the whole initialization process, and handleParameterChange(nullptr) was called after the last stage of the initialization. This is no longer so in version 6.0 or later.

Reimplemented from cComponent.

◆ finish()

virtual void finish ( )
overrideprotectedvirtual

Finish hook. finish() is called after end of simulation if it terminated without error. This default implementation does nothing.

Reimplemented from cComponent.

◆ create()

static cDatarateChannel* create ( const char *  name)
static

Utility function for dynamic channel creation. Equivalent to cChannelType::getDatarateChannelType()->create(name).

◆ str()

virtual std::string str ( ) const
overridevirtual

Produces a one-line description of the object's contents. See cObject for more details.

Reimplemented from cChannel.

◆ isTransmissionChannel()

virtual bool isTransmissionChannel ( ) const
inlineoverridevirtual

Returns true.

Implements cChannel.

◆ setMode()

virtual void setMode ( Mode  mode)
virtual

Sets the operating mode. Switching operating mode during simulation (when the channel is in use) is not allowed.

◆ setDelay()

virtual void setDelay ( double  d)
virtual

Sets the propagation delay of the channel, in seconds.

◆ setDatarate()

virtual void setDatarate ( double  d)
virtual

Sets the data rate of the channel, in bit/second.

See also
isBusy(), getTransmissionFinishTime()

◆ setBitErrorRate()

virtual void setBitErrorRate ( double  d)
virtual

Sets the bit error rate (BER) of the channel.

See also
cPacket::hasBitError()

◆ setPacketErrorRate()

virtual void setPacketErrorRate ( double  d)
virtual

Sets the packet error rate (PER) of the channel.

See also
cPacket::hasBitError()

◆ setDisabled()

virtual void setDisabled ( bool  d)
virtual

Disables or enables the channel.

◆ getMode()

virtual Mode getMode ( ) const
inlinevirtual

Returns the operating mode.

◆ getDelay()

virtual simtime_t getDelay ( ) const
inlinevirtual

Returns the propagation delay of the channel, in seconds. This method is equivalent to reading the "delay" parameter, via par("delay").

◆ getDatarate()

virtual double getDatarate ( ) const
inlinevirtual

Returns the data rate of the channel, in bit/second. This method is equivalent to reading the "datarate" parameter, via par("datarate"). This value affects the transmission time of messages sent through the channel.

◆ getBitErrorRate()

virtual double getBitErrorRate ( ) const
inlinevirtual

Returns the bit error rate (BER) of the channel. This method is equivalent to reading the "ber" parameter, via par("ber"). When a message sent through the channel suffers at least one bit error, its bit error flag will be set.

◆ getPacketErrorRate()

virtual double getPacketErrorRate ( ) const
inlinevirtual

Returns the packet error rate (PER) of the channel. This method is equivalent to reading the "per" parameter, via par("per"). When a message is sent through the channel, its bit error flag will be set with this probability.

◆ isDisabled()

virtual bool isDisabled ( ) const
inlineoverridevirtual

Returns whether the channel is disabled. This method is equivalent to reading the "disabled" parameter, via par("disabled"). A disabled channel discards all messages sent on it.

Reimplemented from cChannel.

◆ getNominalDatarate()

virtual double getNominalDatarate ( ) const
inlineoverridevirtual

Same as getDatarate().

Implements cChannel.

◆ calculateDuration()

virtual simtime_t calculateDuration ( cMessage msg) const
overridevirtual

Returns the message length in bits divided by the datarate.

Note that processMessage() does NOT call this method, so in order to change the duration computation algorithm via subclassing you need to redefine both this and processMessage().

Implements cChannel.

◆ getTransmissionFinishTime()

virtual simtime_t getTransmissionFinishTime ( ) const
overridevirtual

Returns the simulation time all transmissions will finish on the (sender side) of the channel. If there is no ongoing transmission, the result is undefined but less or equal the current simulation time.

This method is unsupported (throws exception) in the UNCHECKED mode.

Implements cChannel.

◆ isBusy()

virtual bool isBusy ( ) const
overridevirtual

Returns whether the sender gate is currently transmitting, ie. whether transmissionFinishTime() is greater than the current simulation time.

This method is unsupported (throws exception) in the UNCHECKED mode.

Reimplemented from cChannel.

◆ forceTransmissionFinishTime()

virtual void forceTransmissionFinishTime ( simtime_t  t)
overridevirtual

DEPRECATED METHOD. It is only provided for backward compatibility with OMNeT++ 5.x.

This method forcibly overwrites the finish time of the current transmission in the channel. It is a crude device that allows implementing aborting transmissions. Models using this method should be migrated to the transmission update API.

See also
cSimpleModule::SendOptions, getTransmissionFinishTime(), isBusy()

Reimplemented from cChannel.

◆ initialize()

virtual void initialize ( )
overridevirtual

Initialization.

Reimplemented from cComponent.

◆ processMessage()

virtual Result processMessage ( cMessage msg,
const SendOptions options,
simtime_t  t 
)
overridevirtual

Performs bit error rate, delay and transmission time modelling.

Implements cChannel.


The documentation for this class was generated from the following file: