|
INET Framework for OMNeT++/OMNEST
|
The default implementation of the radio medium interface.
More...
#include <RadioMedium.h>
|
| virtual bool | matchesMacAddressFilter (const IRadio *radio, const Packet *packet) const |
| |
| virtual bool | isPotentialReceiver (const IRadio *receiver, const ITransmission *transmission) const |
| | Returns true if the radio can potentially receive the transmission successfully. More...
|
| |
| virtual bool | isInCommunicationRange (const ITransmission *transmission, const Coord &startPosition, const Coord &endPosition) const |
| |
| virtual bool | isInInterferenceRange (const ITransmission *transmission, const Coord &startPosition, const Coord &endPosition) const |
| |
| virtual bool | isInterferingTransmission (const ITransmission *transmission, const IListening *listening) const |
| |
| virtual bool | isInterferingTransmission (const ITransmission *transmission, const IReception *reception) const |
| |
| virtual void | removeNonInterferingTransmissions () |
| | Removes all cached data related to past transmissions that don't have any effect on any ongoing transmission. More...
|
| |
| virtual const std::vector< const IReception * > * | computeInterferingReceptions (const IListening *listening) const |
| |
| virtual const std::vector< const IReception * > * | computeInterferingReceptions (const IReception *reception) const |
| |
| virtual const IReception * | computeReception (const IRadio *receiver, const ITransmission *transmission) const |
| |
| virtual const IInterference * | computeInterference (const IRadio *receiver, const IListening *listening) const |
| |
| virtual const IInterference * | computeInterference (const IRadio *receiver, const IListening *listening, const ITransmission *transmission) const |
| |
| virtual const IReceptionDecision * | computeReceptionDecision (const IRadio *receiver, const IListening *listening, const ITransmission *transmission, IRadioSignal::SignalPart part) const |
| |
| virtual const IReceptionResult * | computeReceptionResult (const IRadio *receiver, const IListening *listening, const ITransmission *transmission) const |
| |
| virtual const IListeningDecision * | computeListeningDecision (const IRadio *receiver, const IListening *listening) const |
| |
| | RadioMedium () |
| |
| virtual | ~RadioMedium () |
| |
| virtual std::ostream & | printToStream (std::ostream &stream, int level, int evFlags=0) const override |
| | Prints this object to the provided output stream. More...
|
| |
| virtual const physicalenvironment::IMaterial * | getMaterial () const override |
| | Returns the material of this medium. More...
|
| |
| virtual const IPropagation * | getPropagation () const override |
| | Returns the signal propagation model of this medium. More...
|
| |
| virtual const IPathLoss * | getPathLoss () const override |
| | Returns the signal path loss model of this medium. More...
|
| |
| virtual const IObstacleLoss * | getObstacleLoss () const override |
| | Returns the signal obstacle loss model of this medium. More...
|
| |
| virtual const IAnalogModel * | getAnalogModel () const override |
| | Returns the signal analog model of this medium. More...
|
| |
| virtual const IBackgroundNoise * | getBackgroundNoise () const override |
| | Returns the background noise model of this medium. More...
|
| |
| virtual const physicalenvironment::IPhysicalEnvironment * | getPhysicalEnvironment () const override |
| | Returns the physical environment model of this medium. More...
|
| |
| virtual const IMediumLimitCache * | getMediumLimitCache () const override |
| |
| virtual const INeighborCache * | getNeighborCache () const override |
| |
| virtual const ICommunicationCache * | getCommunicationCache () const override |
| |
| virtual void | addRadio (const IRadio *radio) override |
| | Adds a new radio to the medium. More...
|
| |
| virtual void | removeRadio (const IRadio *radio) override |
| | Removes a radio from the medium. More...
|
| |
| virtual const IRadio * | getRadio (int id) const override |
| | Returns radio instance from medium by id. More...
|
| |
| virtual void | sendToRadio (IRadio *trasmitter, const IRadio *receiver, const IWirelessSignal *signal) |
| |
| virtual IWirelessSignal * | transmitPacket (const IRadio *transmitter, Packet *packet) override |
| | Returns a new signal containing the signal transmission that represents the provided packet. More...
|
| |
| virtual Packet * | receivePacket (const IRadio *receiver, IWirelessSignal *signal) override |
| | Returns the packet that was transmitted in the provided signal. More...
|
| |
| virtual const ITransmission * | getTransmission (int id) const override |
| | Returns transmission instance from medium by id. More...
|
| |
| virtual const IListeningDecision * | listenOnMedium (const IRadio *receiver, const IListening *listening) const override |
| | Returns the listening decision that describes what the receiver detects on the medium. More...
|
| |
| virtual const IArrival * | getArrival (const IRadio *receiver, const ITransmission *transmission) const override |
| | Returns the space and time coordinates of the transmission arriving at the provided receiver. More...
|
| |
| virtual const IListening * | getListening (const IRadio *receiver, const ITransmission *transmission) const override |
| | Returns how the radio is listening on the medium when the transmission arrives at the provided receiver. More...
|
| |
| virtual const IReception * | getReception (const IRadio *receiver, const ITransmission *transmission) const override |
| | Returns the reception of the transmission arriving at the provided receiver. More...
|
| |
| virtual const IInterference * | getInterference (const IRadio *receiver, const ITransmission *transmission) const override |
| | Returns the interference of the transmission arriving at the provided receiver. More...
|
| |
| virtual const IInterference * | getInterference (const IRadio *receiver, const IListening *listening, const ITransmission *transmission) const |
| |
| virtual const INoise * | getNoise (const IRadio *receiver, const ITransmission *transmission) const override |
| | Returns the total noise computed from the interference of the transmission arriving at the provided receiver. More...
|
| |
| virtual const ISnir * | getSNIR (const IRadio *receiver, const ITransmission *transmission) const override |
| | Returns the signal to noise and interference ratio of the transmission arriving at the provided receiver. More...
|
| |
| virtual bool | isReceptionPossible (const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part) const override |
| | Returns true when the reception is possible of the transmission part. More...
|
| |
| virtual bool | isReceptionAttempted (const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part) const override |
| | Returns true when the reception is attempted of the transmission part. More...
|
| |
| virtual bool | isReceptionSuccessful (const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part) const override |
| | Returns true when the reception is successful of the transmission part. More...
|
| |
| virtual const IReceptionDecision * | getReceptionDecision (const IRadio *receiver, const IListening *listening, const ITransmission *transmission, IRadioSignal::SignalPart part) const override |
| | Returns the reception decision for the transmission part that specifies whether the reception is possible, attempted, and successful. More...
|
| |
| virtual const IReceptionResult * | getReceptionResult (const IRadio *receiver, const IListening *listening, const ITransmission *transmission) const override |
| | Returns the reception result for the transmission that describes the end result of the reception process. More...
|
| |
| virtual void | receiveSignal (cComponent *source, simsignal_t signal, intval_t value, cObject *details) override |
| |
| virtual void | receiveSignal (cComponent *source, simsignal_t signal, cObject *value, cObject *details) override |
| |
The default implementation of the radio medium interface.
◆ RangeFilterKind
| Enumerator |
|---|
| RANGE_FILTER_ANYWHERE | |
| RANGE_FILTER_INTERFERENCE_RANGE | |
| RANGE_FILTER_COMMUNICATION_RANGE | |
◆ RadioMedium()
| inet::physicallayer::RadioMedium::RadioMedium |
( |
| ) |
|
◆ ~RadioMedium()
| inet::physicallayer::RadioMedium::~RadioMedium |
( |
| ) |
|
|
virtual |
◆ addRadio()
| void inet::physicallayer::RadioMedium::addRadio |
( |
const IRadio * |
radio | ) |
|
|
overridevirtual |
Adds a new radio to the medium.
An exception is thrown if the radio is already added. The radio may immediately start new transmissions and will potentially receive all ongoing and further transmissions.
Implements inet::physicallayer::IRadioMedium.
424 const IListening *listening = radio->getReceiver()->createListening(radio, arrival->getStartTime(), arrival->getEndTime(), arrival->getStartPosition(), arrival->getEndPosition());
428 cModule *radioModule =
const_cast<cModule *
>(check_and_cast<const cModule *>(radio));
◆ addTransmission()
| void inet::physicallayer::RadioMedium::addTransmission |
( |
const IRadio * |
transmitter, |
|
|
const ITransmission * |
transmission |
|
) |
| |
|
protectedvirtual |
Adds a new transmission to the radio medium.
465 simtime_t maxArrivalEndTime = transmission->getEndTime();
467 if (receiverRadio !=
nullptr && receiverRadio != transmitterRadio && receiverRadio->getReceiver() !=
nullptr) {
468 const IArrival *arrival = propagation->computeArrival(transmission, receiverRadio->getAntenna()->getMobility());
469 const IntervalTree::Interval *interval = new IntervalTree::Interval(arrival->getStartTime(), arrival->getEndTime(), (void *)transmission);
470 const IListening *listening = receiverRadio->getReceiver()->createListening(receiverRadio, arrival->getStartTime(), arrival->getEndTime(), arrival->getStartPosition(), arrival->getEndPosition());
471 const simtime_t arrivalEndTime = arrival->getEndTime();
472 if (arrivalEndTime > maxArrivalEndTime)
473 maxArrivalEndTime = arrivalEndTime;
474 communicationCache->setCachedArrival(receiverRadio, transmission, arrival);
475 communicationCache->setCachedInterval(receiverRadio, transmission, interval);
476 communicationCache->setCachedListening(receiverRadio, transmission, listening);
Referenced by transmitPacket().
◆ computeInterference() [1/2]
◆ computeInterference() [2/2]
280 const IReception *reception =
getReception(receiver, transmission);
283 return new Interference(noise, interferingReceptions);
◆ computeInterferingReceptions() [1/2]
| const std::vector< const IReception * > * inet::physicallayer::RadioMedium::computeInterferingReceptions |
( |
const IListening * |
listening | ) |
const |
|
protectedvirtual |
240 const IRadio *radio = listening->getReceiver();
242 std::vector<const IReception *> *interferingReceptions =
new std::vector<const IReception *>();
243 for (
const auto interferingTransmission : *interferingTransmissions)
245 interferingReceptions->push_back(
getReception(radio, interferingTransmission));
246 delete interferingTransmissions;
247 return interferingReceptions;
Referenced by computeInterference().
◆ computeInterferingReceptions() [2/2]
| const std::vector< const IReception * > * inet::physicallayer::RadioMedium::computeInterferingReceptions |
( |
const IReception * |
reception | ) |
const |
|
protectedvirtual |
252 const IRadio *radio = reception->getReceiver();
253 const ITransmission *transmission = reception->getTransmission();
255 std::vector<const IReception *> *interferingReceptions =
new std::vector<const IReception *>();
256 for (
const auto interferingTransmission : *interferingTransmissions)
258 interferingReceptions->push_back(
getReception(radio, interferingTransmission));
259 delete interferingTransmissions;
260 return interferingReceptions;
◆ computeListeningDecision()
310 const IListeningDecision *decision = radio->getReceiver()->computeListeningDecision(listening, interference);
Referenced by listenOnMedium().
◆ computeReception()
◆ computeReceptionDecision()
289 const IReception *reception =
getReception(radio, transmission);
290 const IInterference *interference =
getInterference(radio, listening, transmission);
291 const ISnir *snir =
getSNIR(radio, transmission);
292 return radio->getReceiver()->computeReceptionDecision(listening, reception, part, interference, snir);
Referenced by getReceptionDecision().
◆ computeReceptionResult()
298 const IReception *reception =
getReception(radio, transmission);
299 const IInterference *interference =
getInterference(radio, listening, transmission);
300 const ISnir *snir =
getSNIR(radio, transmission);
302 const std::vector<const IReceptionDecision *> *receptionDecisions =
new std::vector<const IReceptionDecision *> { receptionDecision };
303 return radio->getReceiver()->computeReceptionResult(listening, reception, interference, snir, receptionDecisions);
Referenced by getReceptionResult().
◆ createReceiverSignal()
Creates a new signal for a receiver.
511 auto signal =
new WirelessSignal(transmission);
512 signal->setDuration(transmission->getDuration());
513 auto transmitterPacket = transmission->getPacket();
514 if (transmitterPacket !=
nullptr) {
515 auto receiverPacket = transmitterPacket->dup();
516 receiverPacket->clearTags();
518 signal->setName(receiverPacket->getName());
519 signal->encapsulate(receiverPacket);
Referenced by pickUpSignals(), and sendToRadio().
◆ createTransmitterSignal()
Creates a new signal for the transmitter.
494 if (packet !=
nullptr)
496 auto transmission = radio->getTransmitter()->createTransmission(radio, packet, simTime());
497 auto signal =
new WirelessSignal(transmission);
498 auto duration = transmission->getDuration();
500 throw cRuntimeError(
"Maximum transmission duration is exceeded");
501 signal->setDuration(duration);
502 if (packet !=
nullptr) {
503 signal->setName(packet->getName());
504 signal->encapsulate(packet);
Referenced by transmitPacket().
◆ finish()
| void inet::physicallayer::RadioMedium::finish |
( |
| ) |
|
|
overrideprotectedvirtual |
126 EV_INFO <<
"Reception cache hit = " << receptionCacheHitPercentage <<
" %" << endl;
127 EV_INFO <<
"Interference cache hit = " << interferenceCacheHitPercentage <<
" %" << endl;
128 EV_INFO <<
"Noise cache hit = " << noiseCacheHitPercentage <<
" %" << endl;
129 EV_INFO <<
"SNIR cache hit = " << snirCacheHitPercentage <<
" %" << endl;
130 EV_INFO <<
"Reception decision cache hit = " << decisionCacheHitPercentage <<
" %" << endl;
131 EV_INFO <<
"Reception result cache hit = " << resultCacheHitPercentage <<
" %" << endl;
138 recordScalar(
"reception cache hit", receptionCacheHitPercentage,
"%");
139 recordScalar(
"interference cache hit", interferenceCacheHitPercentage,
"%");
140 recordScalar(
"noise cache hit", noiseCacheHitPercentage,
"%");
141 recordScalar(
"snir cache hit", snirCacheHitPercentage,
"%");
142 recordScalar(
"reception decision cache hit", decisionCacheHitPercentage,
"%");
143 recordScalar(
"reception result cache hit", resultCacheHitPercentage,
"%");
◆ getAnalogModel()
| virtual const IAnalogModel* inet::physicallayer::RadioMedium::getAnalogModel |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getArrival()
◆ getBackgroundNoise()
| virtual const IBackgroundNoise* inet::physicallayer::RadioMedium::getBackgroundNoise |
( |
| ) |
const |
|
inlineoverridevirtual |
Returns the background noise model of this medium.
This function may return nullptr if there's no background noise model.
Implements inet::physicallayer::IRadioMedium.
◆ getCommunicationCache()
| virtual const ICommunicationCache* inet::physicallayer::RadioMedium::getCommunicationCache |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getInterference() [1/2]
◆ getInterference() [2/2]
◆ getListening()
◆ getMaterial()
◆ getMediumLimitCache()
| virtual const IMediumLimitCache* inet::physicallayer::RadioMedium::getMediumLimitCache |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getNeighborCache()
| virtual const INeighborCache* inet::physicallayer::RadioMedium::getNeighborCache |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getNoise()
| const INoise * inet::physicallayer::RadioMedium::getNoise |
( |
const IRadio * |
receiver, |
|
|
const ITransmission * |
transmission |
|
) |
| const |
|
overridevirtual |
Returns the total noise computed from the interference of the transmission arriving at the provided receiver.
This function never returns nullptr as long as the transmission is live on the medium.
Implements inet::physicallayer::IRadioMedium.
365 const IInterference *interference =
getInterference(receiver, transmission);
Referenced by getSNIR().
◆ getObstacleLoss()
| virtual const IObstacleLoss* inet::physicallayer::RadioMedium::getObstacleLoss |
( |
| ) |
const |
|
inlineoverridevirtual |
Returns the signal obstacle loss model of this medium.
This function may return nullptr if there's no obstacle loss model.
Implements inet::physicallayer::IRadioMedium.
◆ getPathLoss()
| virtual const IPathLoss* inet::physicallayer::RadioMedium::getPathLoss |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getPhysicalEnvironment()
Returns the physical environment model of this medium.
This function may return nullptr if there's no physical environment model.
Implements inet::physicallayer::IRadioMedium.
◆ getPropagation()
| virtual const IPropagation* inet::physicallayer::RadioMedium::getPropagation |
( |
| ) |
const |
|
inlineoverridevirtual |
◆ getRadio()
| const IRadio * inet::physicallayer::RadioMedium::getRadio |
( |
int |
id | ) |
const |
|
overridevirtual |
◆ getReception()
◆ getReceptionDecision()
Returns the reception decision for the transmission part that specifies whether the reception is possible, attempted, and successful.
Implements inet::physicallayer::IRadioMedium.
396 EV_DEBUG <<
"Receiving " << transmission <<
" from medium by " << radio <<
" arrives as " << decision->getReception() <<
" and results in " << decision << endl;
Referenced by computeReceptionResult().
◆ getReceptionResult()
Returns the reception result for the transmission that describes the end result of the reception process.
Implements inet::physicallayer::IRadioMedium.
410 EV_DEBUG <<
"Receiving " << transmission <<
" from medium by " << radio <<
" arrives as " << result->getReception() <<
" and results in " << result << endl;
Referenced by receivePacket().
◆ getSNIR()
| const ISnir * inet::physicallayer::RadioMedium::getSNIR |
( |
const IRadio * |
receiver, |
|
|
const ITransmission * |
transmission |
|
) |
| const |
|
overridevirtual |
◆ getTransmission()
| const ITransmission * inet::physicallayer::RadioMedium::getTransmission |
( |
int |
id | ) |
const |
|
overridevirtual |
◆ handleMessage()
| void inet::physicallayer::RadioMedium::handleMessage |
( |
cMessage * |
message | ) |
|
|
overrideprotectedvirtual |
167 throw cRuntimeError(
"Unknown message");
◆ initialize()
| void inet::physicallayer::RadioMedium::initialize |
( |
int |
stage | ) |
|
|
overrideprotectedvirtual |
78 propagation = check_and_cast<IPropagation *>(getSubmodule(
"propagation"));
79 pathLoss = check_and_cast<IPathLoss *>(getSubmodule(
"pathLoss"));
80 obstacleLoss =
dynamic_cast<IObstacleLoss *
>(getSubmodule(
"obstacleLoss"));
81 analogModel = check_and_cast<IAnalogModel *>(getSubmodule(
"analogModel"));
82 backgroundNoise =
dynamic_cast<IBackgroundNoise *
>(getSubmodule(
"backgroundNoise"));
83 mediumLimitCache = check_and_cast<IMediumLimitCache *>(getSubmodule(
"mediumLimitCache"));
84 neighborCache =
dynamic_cast<INeighborCache *
>(getSubmodule(
"neighborCache"));
85 communicationCache = check_and_cast<ICommunicationCache *>(getSubmodule(
"communicationCache"));
86 physicalEnvironment =
dynamic_cast<physicalenvironment::IPhysicalEnvironment *
>(findModuleByPath(par(
"physicalEnvironmentModule")));
88 const char *rangeFilterString = par(
"rangeFilter");
89 if (!strcmp(rangeFilterString,
""))
91 else if (!strcmp(rangeFilterString,
"interferenceRange"))
93 else if (!strcmp(rangeFilterString,
"communicationRange"))
96 throw cRuntimeError(
"Unknown range filter: '%d'",
rangeFilter);
◆ isInCommunicationRange()
| bool inet::physicallayer::RadioMedium::isInCommunicationRange |
( |
const ITransmission * |
transmission, |
|
|
const Coord & |
startPosition, |
|
|
const Coord & |
endPosition |
|
) |
| const |
|
protectedvirtual |
191 return std::isnan(maxCommunicationRange.get()) ||
192 (transmission->getStartPosition().distance(startPosition) < maxCommunicationRange.get() &&
193 transmission->getEndPosition().distance(endPosition) < maxCommunicationRange.get());
Referenced by isPotentialReceiver().
◆ isInInterferenceRange()
| bool inet::physicallayer::RadioMedium::isInInterferenceRange |
( |
const ITransmission * |
transmission, |
|
|
const Coord & |
startPosition, |
|
|
const Coord & |
endPosition |
|
) |
| const |
|
protectedvirtual |
199 return std::isnan(maxInterferenceRange.get()) ||
200 (transmission->getStartPosition().distance(startPosition) < maxInterferenceRange.get() &&
201 transmission->getEndPosition().distance(endPosition) < maxInterferenceRange.get());
Referenced by isInterferingTransmission(), and isPotentialReceiver().
◆ isInterferingTransmission() [1/2]
| bool inet::physicallayer::RadioMedium::isInterferingTransmission |
( |
const ITransmission * |
transmission, |
|
|
const IListening * |
listening |
|
) |
| const |
|
protectedvirtual |
206 const IRadio *receiver = listening->getReceiver();
207 const IArrival *arrival =
getArrival(receiver, transmission);
209 return transmission->getTransmitterId() != receiver->getId() &&
210 arrival->getEndTime() >= listening->getStartTime() + minInterferenceTime &&
211 arrival->getStartTime() <= listening->getEndTime() - minInterferenceTime &&
Referenced by computeInterferingReceptions().
◆ isInterferingTransmission() [2/2]
| bool inet::physicallayer::RadioMedium::isInterferingTransmission |
( |
const ITransmission * |
transmission, |
|
|
const IReception * |
reception |
|
) |
| const |
|
protectedvirtual |
217 const IRadio *receiver = reception->getReceiver();
218 const IArrival *arrival =
getArrival(receiver, transmission);
220 return transmission->getTransmitterId() != receiver->getId() &&
221 arrival->getEndTime() > reception->getStartTime() + minInterferenceTime &&
222 arrival->getStartTime() < reception->getEndTime() - minInterferenceTime &&
◆ isPotentialReceiver()
| bool inet::physicallayer::RadioMedium::isPotentialReceiver |
( |
const IRadio * |
receiver, |
|
|
const ITransmission * |
transmission |
|
) |
| const |
|
protectedvirtual |
Returns true if the radio can potentially receive the transmission successfully.
If this function returns false then the radio medium doesn't send a signal to this receiver.
612 const Radio *receiverRadio =
dynamic_cast<const Radio *
>(radio);
615 else if (
listeningFilter && radio->getReceiver() !=
nullptr && !radio->getReceiver()->computeIsReceptionPossible(
getListening(radio, transmission), transmission))
621 const IArrival *arrival =
getArrival(radio, transmission);
625 const IArrival *arrival =
getArrival(radio, transmission);
Referenced by pickUpSignals(), and sendToRadio().
◆ isReceptionAttempted()
Returns true when the reception is attempted of the transmission part.
Implements inet::physicallayer::IRadioMedium.
645 const IReception *reception =
getReception(receiver, transmission);
646 const IListening *listening =
getListening(receiver, transmission);
648 const IInterference *interference =
computeInterference(receiver, listening, transmission);
649 bool isReceptionAttempted = receiver->getReceiver()->computeIsReceptionAttempted(listening, reception, part, interference);
◆ isReceptionPossible()
Returns true when the reception is possible of the transmission part.
Implements inet::physicallayer::IRadioMedium.
634 const IReception *reception =
getReception(receiver, transmission);
635 const IListening *listening =
getListening(receiver, transmission);
637 const IInterference *interference =
computeInterference(receiver, listening, transmission);
638 bool isReceptionPossible = receiver->getReceiver()->computeIsReceptionAttempted(listening, reception, part, interference);
◆ isReceptionSuccessful()
Returns true when the reception is successful of the transmission part.
Implements inet::physicallayer::IRadioMedium.
656 const IReception *reception =
getReception(receiver, transmission);
657 const IListening *listening =
getListening(receiver, transmission);
659 const IInterference *interference =
computeInterference(receiver, listening, transmission);
660 const ISnir *snir =
getSNIR(receiver, transmission);
661 bool isReceptionSuccessful = receiver->getReceiver()->computeIsReceptionSuccessful(listening, reception, part, interference, snir);
◆ listenOnMedium()
Returns the listening decision that describes what the receiver detects on the medium.
Implements inet::physicallayer::IRadioMedium.
606 EV_DEBUG <<
"Listening results in: " << decision <<
" with " << listening <<
" on medium by " << radio << endl;
◆ matchesMacAddressFilter()
| bool inet::physicallayer::RadioMedium::matchesMacAddressFilter |
( |
const IRadio * |
radio, |
|
|
const Packet * |
packet |
|
) |
| const |
|
protectedvirtual |
172 const auto& macAddressReq =
const_cast<Packet *
>(packet)->findTag<MacAddressInd>();
173 if (macAddressReq ==
nullptr)
175 const MacAddress address = macAddressReq->getDestAddress();
176 if (address.isBroadcast() || address.isMulticast())
179 IInterfaceTable *interfaceTable = check_and_cast<IInterfaceTable *>(host->getSubmodule(
"interfaceTable"));
180 for (
int i = 0; i < interfaceTable->getNumInterfaces(); i++) {
181 const NetworkInterface *
interface = interfaceTable->getInterface(i);
182 if (interface && interface->getMacAddress() == address)
Referenced by isPotentialReceiver().
◆ numInitStages()
| virtual int inet::physicallayer::RadioMedium::numInitStages |
( |
| ) |
const |
|
inlineoverrideprotectedvirtual |
◆ pickUpSignals()
| void inet::physicallayer::RadioMedium::pickUpSignals |
( |
IRadio * |
receiver | ) |
|
|
protectedvirtual |
Sends a copy of all ongoing signals to the receiver on the radio medium.
676 auto transmitterRadio =
dynamic_cast<const Radio *
>(
getRadio(transmission->getTransmitterId()));
677 if (!transmitterRadio)
682 const IArrival *arrival =
getArrival(receiverRadio, transmission);
683 if (arrival->getEndTime() >= simTime()) {
684 cMethodCallContextSwitcher contextSwitcher(transmitterRadio);
685 contextSwitcher.methodCall(
"sendToRadio");
686 const Packet *packet = transmission->getPacket();
687 EV_DEBUG <<
"Picking up " << packet <<
" originally sent "
688 <<
" from " << (IRadio *)transmitterRadio <<
" at " << transmission->getStartPosition()
689 <<
" to " << (IRadio *)receiverRadio <<
" at " << arrival->getStartPosition()
690 <<
" in " << arrival->getStartPropagationTime() * 1E+6 <<
" us propagation time." << endl;
692 simtime_t delay = arrival->getStartTime() - simTime();
693 simtime_t duration = delay > 0 ? signal->getDuration() : signal->getDuration() + delay;
694 cGate *gate = receiverRadio->getRadioGate()->getPathStartGate();
695 const_cast<Radio *
>(transmitterRadio)->sendDirect(signal, delay > 0 ? delay : 0, duration, gate);
Referenced by receiveSignal().
◆ printToStream()
| std::ostream & inet::physicallayer::RadioMedium::printToStream |
( |
std::ostream & |
stream, |
|
|
int |
level, |
|
|
int |
evFlags = 0 |
|
) |
| const |
|
overridevirtual |
Prints this object to the provided output stream.
Reimplemented from inet::IPrintableObject.
148 stream << static_cast<const cSimpleModule *>(
this);
◆ receivePacket()
Returns the packet that was transmitted in the provided signal.
Implements inet::physicallayer::IRadioMedium.
586 const ITransmission *transmission = signal->getTransmission();
592 Packet *packet = result->getPacket()->dup();
◆ receiveSignal() [1/2]
| void inet::physicallayer::RadioMedium::receiveSignal |
( |
cComponent * |
source, |
|
|
simsignal_t |
signal, |
|
|
cObject * |
value, |
|
|
cObject * |
details |
|
) |
| |
|
overridevirtual |
733 auto interfaceChange = check_and_cast<NetworkInterfaceChangeDetails *>(value);
735 auto radio = check_and_cast<Radio *>(interfaceChange->getNetworkInterface()->getSubmodule(
"radio"));
740 throw cRuntimeError(
"Unknown signal");
◆ receiveSignal() [2/2]
| void inet::physicallayer::RadioMedium::receiveSignal |
( |
cComponent * |
source, |
|
|
simsignal_t |
signal, |
|
|
intval_t |
value, |
|
|
cObject * |
details |
|
) |
| |
|
overridevirtual |
709 auto radio = check_and_cast<Radio *>(source);
714 auto radio = check_and_cast<Radio *>(source);
716 const IArrival *arrival =
getArrival(radio, transmission);
717 const IListening *listening = radio->getReceiver()->createListening(radio, arrival->getStartTime(), arrival->getEndTime(), arrival->getStartPosition(), arrival->getEndPosition());
724 throw cRuntimeError(
"Unknown signal");
◆ removeNonInterferingTransmissions()
| void inet::physicallayer::RadioMedium::removeNonInterferingTransmissions |
( |
| ) |
|
|
protectedvirtual |
Removes all cached data related to past transmissions that don't have any effect on any ongoing transmission.
Note that it's possible that a transmission is in the past but it's still needed to compute the total interference for another.
Referenced by handleMessage().
◆ removeRadio()
| void inet::physicallayer::RadioMedium::removeRadio |
( |
const IRadio * |
radio | ) |
|
|
overridevirtual |
Removes a radio from the medium.
An exception is thrown if the radio is not yet added. The radio cannot start new transmissions and will not receive any further transmission including the ongoing ones.
Implements inet::physicallayer::IRadioMedium.
445 cModule *radioModule =
const_cast<cModule *
>(check_and_cast<const cModule *>(radio));
◆ removeTransmission()
| void inet::physicallayer::RadioMedium::removeTransmission |
( |
const ITransmission * |
transmission | ) |
|
|
protectedvirtual |
Removes a transmission from the radio medium.
◆ sendToAffectedRadios()
| void inet::physicallayer::RadioMedium::sendToAffectedRadios |
( |
IRadio * |
transmitter, |
|
|
const IWirelessSignal * |
signal |
|
) |
| |
|
protectedvirtual |
Sends a copy of the provided signal to all affected receivers on the radio medium.
526 const WirelessSignal *signal = check_and_cast<const WirelessSignal *>(transmittedSignal);
527 EV_DEBUG <<
"Sending " << transmittedSignal <<
" with " << signal->getBitLength() <<
" bits in " << signal->getDuration() * 1E+6 <<
" us transmission duration"
528 <<
" from " << radio <<
" on " << (IRadioMedium *)
this <<
"." << endl;
536 throw cRuntimeError(
"Unknown range filter %d",
rangeFilter);
537 if (std::isnan(range)) {
538 EV_WARN <<
"We can't use the NeighborCache for radio " << radio->getId() <<
": range is NaN" << endl;
Referenced by transmitPacket().
◆ sendToAllRadios()
| void inet::physicallayer::RadioMedium::sendToAllRadios |
( |
IRadio * |
transmitter, |
|
|
const IWirelessSignal * |
signal |
|
) |
| |
|
protectedvirtual |
Sends a copy of the provided signal to all receivers on the radio medium.
Referenced by sendToAffectedRadios().
◆ sendToRadio()
551 const ITransmission *transmission = transmittedSignal->getTransmission();
552 if (receiver != transmitter && receiver->getReceiver() !=
nullptr &&
isPotentialReceiver(receiver, transmission)) {
553 auto transmitterRadio =
const_cast<cSimpleModule *
>(check_and_cast<const cSimpleModule *>(transmitter));
554 cMethodCallContextSwitcher contextSwitcher(transmitterRadio);
555 contextSwitcher.methodCall(
"sendToRadio");
556 const IArrival *arrival =
getArrival(receiver, transmission);
557 simtime_t propagationTime = arrival->getStartPropagationTime();
558 EV_DEBUG <<
"Sending " << transmittedSignal
559 <<
" from " << transmitter <<
" at " << transmission->getStartPosition()
560 <<
" to " << receiver <<
" at " << arrival->getStartPosition()
561 <<
" in " << propagationTime * 1E+6 <<
" us propagation time." << endl;
563 cGate *gate = receiver->getRadioGate()->getPathStartGate();
564 transmitterRadio->sendDirect(receivedSignal, propagationTime, transmission->getDuration(), gate);
Referenced by sendToAllRadios(), inet::physicallayer::GridNeighborCache::GridNeighborCacheVisitor::visit(), and inet::physicallayer::QuadTreeNeighborCache::QuadTreeNeighborCacheVisitor::visit().
◆ transmitPacket()
Returns a new signal containing the signal transmission that represents the provided packet.
A copy of this signal is sent to all affected radios.
Implements inet::physicallayer::IRadioMedium.
574 auto transmission = signal->getTransmission();
◆ analogModel
| const IAnalogModel* inet::physicallayer::RadioMedium::analogModel |
|
protected |
◆ backgroundNoise
◆ cacheDecisionGetCount
| long inet::physicallayer::RadioMedium::cacheDecisionGetCount |
|
mutableprotected |
◆ cacheDecisionHitCount
| long inet::physicallayer::RadioMedium::cacheDecisionHitCount |
|
mutableprotected |
◆ cacheInterferenceGetCount
| long inet::physicallayer::RadioMedium::cacheInterferenceGetCount |
|
mutableprotected |
◆ cacheInterferenceHitCount
| long inet::physicallayer::RadioMedium::cacheInterferenceHitCount |
|
mutableprotected |
◆ cacheNoiseGetCount
| long inet::physicallayer::RadioMedium::cacheNoiseGetCount |
|
mutableprotected |
◆ cacheNoiseHitCount
| long inet::physicallayer::RadioMedium::cacheNoiseHitCount |
|
mutableprotected |
◆ cacheReceptionGetCount
| long inet::physicallayer::RadioMedium::cacheReceptionGetCount |
|
mutableprotected |
◆ cacheReceptionHitCount
| long inet::physicallayer::RadioMedium::cacheReceptionHitCount |
|
mutableprotected |
◆ cacheResultGetCount
| long inet::physicallayer::RadioMedium::cacheResultGetCount |
|
mutableprotected |
◆ cacheResultHitCount
| long inet::physicallayer::RadioMedium::cacheResultHitCount |
|
mutableprotected |
◆ cacheSNIRGetCount
| long inet::physicallayer::RadioMedium::cacheSNIRGetCount |
|
mutableprotected |
◆ cacheSNIRHitCount
| long inet::physicallayer::RadioMedium::cacheSNIRHitCount |
|
mutableprotected |
◆ communicationCache
Caches list of radios and transmissions along with intermediate results.
Referenced by addRadio(), addTransmission(), computeInterferingReceptions(), getArrival(), getInterference(), getListening(), getNoise(), getRadio(), getReception(), getReceptionDecision(), getReceptionResult(), getSNIR(), getTransmission(), initialize(), pickUpSignals(), printToStream(), receivePacket(), receiveSignal(), removeNonInterferingTransmissions(), removeRadio(), removeTransmission(), sendToAllRadios(), sendToRadio(), and transmitPacket().
◆ communicationLog
◆ interferenceComputationCount
| long inet::physicallayer::RadioMedium::interferenceComputationCount |
|
mutableprotected |
◆ listeningDecisionComputationCount
| long inet::physicallayer::RadioMedium::listeningDecisionComputationCount |
|
mutableprotected |
◆ listeningFilter
| bool inet::physicallayer::RadioMedium::listeningFilter |
|
protected |
◆ macAddressFilter
| bool inet::physicallayer::RadioMedium::macAddressFilter |
|
protected |
◆ material
The physical material of the medium is never nullptr.
Referenced by initialize().
◆ mediumLimitCache
◆ neighborCache
◆ obstacleLoss
| const IObstacleLoss* inet::physicallayer::RadioMedium::obstacleLoss |
|
protected |
◆ pathLoss
| const IPathLoss* inet::physicallayer::RadioMedium::pathLoss |
|
protected |
◆ physicalEnvironment
The physical environment model or nullptr if unused.
Referenced by initialize().
◆ propagation
| const IPropagation* inet::physicallayer::RadioMedium::propagation |
|
protected |
◆ Radio
| friend inet::physicallayer::RadioMedium::Radio |
|
private |
◆ radioModeFilter
| bool inet::physicallayer::RadioMedium::radioModeFilter |
|
protected |
◆ rangeFilter
◆ receptionComputationCount
| long inet::physicallayer::RadioMedium::receptionComputationCount |
|
mutableprotected |
◆ receptionDecisionComputationCount
| long inet::physicallayer::RadioMedium::receptionDecisionComputationCount |
|
mutableprotected |
◆ receptionResultComputationCount
| long inet::physicallayer::RadioMedium::receptionResultComputationCount |
|
mutableprotected |
◆ recordReceptionLog
| bool inet::physicallayer::RadioMedium::recordReceptionLog |
|
protected |
◆ recordTransmissionLog
| bool inet::physicallayer::RadioMedium::recordTransmissionLog |
|
protected |
Records all transmissions (if recordTransmissionLog is enabled) and receptions (if recordReceptionLog is enabled) into a separate trace file.
The communication log file can be found at: ${resultdir}/${configname}-${runnumber}.tlog
Referenced by initialize(), transmitPacket(), and ~RadioMedium().
◆ removeNonInterferingTransmissionsTimer
| cMessage* inet::physicallayer::RadioMedium::removeNonInterferingTransmissionsTimer |
|
protected |
◆ signalSendCount
| long inet::physicallayer::RadioMedium::signalSendCount |
|
mutableprotected |
◆ transmissionCount
| long inet::physicallayer::RadioMedium::transmissionCount |
|
mutableprotected |
The documentation for this class was generated from the following files:
long receptionComputationCount
Total number of reception computations.
Definition: RadioMedium.h:148
long listeningDecisionComputationCount
Total number of listening decision computations.
Definition: RadioMedium.h:164
long cacheResultGetCount
Total number of reception result cache queries.
Definition: RadioMedium.h:208
@ SIGNAL_PART_WHOLE
Definition: IRadioSignal.h:26
INET_API InitStage INITSTAGE_LAST
Operations that no other initializations can depend on, e.g.
ICommunicationCache * communicationCache
Caches list of radios and transmissions along with intermediate results.
Definition: RadioMedium.h:124
virtual m getMaxCommunicationRange() const =0
Returns the maximum possible communication range among the radios, the value is in the range [0,...
virtual void setCachedArrival(const IRadio *receiver, const ITransmission *transmission, const IArrival *arrival)=0
virtual void setCachedReceptionDecision(const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part, const IReceptionDecision *receptionDecision)=0
@ RADIO_MODE_TRANSCEIVER
The radio is prepared for simultaneous frame reception and transmission, power consumption is low whe...
Definition: IRadio.h:111
const IObstacleLoss * obstacleLoss
The obstacle loss model or nullptr if unused.
Definition: RadioMedium.h:56
virtual const IReception * getCachedReception(const IRadio *receiver, const ITransmission *transmission)=0
virtual const INoise * getCachedNoise(const IRadio *receiver, const ITransmission *transmission)=0
virtual const ISnir * getSNIR(const IRadio *receiver, const ITransmission *transmission) const override
Returns the signal to noise and interference ratio of the transmission arriving at the provided recei...
Definition: RadioMedium.cc:372
virtual const IMaterialRegistry * getMaterialRegistry() const =0
static simsignal_t radioAddedSignal
This simsignal is emitted when a radio is added to the medium.
Definition: IRadioMedium.h:45
virtual const IListeningDecision * computeListeningDecision(const IRadio *receiver, const IListening *listening) const
Definition: RadioMedium.cc:306
const IBackgroundNoise * backgroundNoise
The background noise model or nullptr if unused.
Definition: RadioMedium.h:64
virtual void close()
Definition: CommunicationLog.cc:20
virtual void sendToAffectedRadios(IRadio *transmitter, const IWirelessSignal *signal)
Sends a copy of the provided signal to all affected receivers on the radio medium.
Definition: RadioMedium.cc:524
RangeFilterKind rangeFilter
The radio medium doesn't send signals to a radio if it's outside the range provided by the selected r...
Definition: RadioMedium.h:77
virtual IWirelessSignal * createTransmitterSignal(const IRadio *radio, Packet *packet)
Creates a new signal for the transmitter.
Definition: RadioMedium.cc:492
virtual bool isInInterferenceRange(const ITransmission *transmission, const Coord &startPosition, const Coord &endPosition) const
Definition: RadioMedium.cc:196
virtual std::vector< const ITransmission * > * computeInterferingTransmissions(const IRadio *radio, const simtime_t startTime, const simtime_t endTime)=0
@ RANGE_FILTER_COMMUNICATION_RANGE
Definition: RadioMedium.h:39
virtual void addRadio(const IRadio *radio)=0
Notifies the cache when a radio is added to the medium.
long cacheReceptionGetCount
Total number of reception cache queries.
Definition: RadioMedium.h:168
virtual bool isReceptionSuccessful(const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part) const override
Returns true when the reception is successful of the transmission part.
Definition: RadioMedium.cc:654
virtual void addTransmission(const IRadio *transmitter, const ITransmission *transmission)
Adds a new transmission to the radio medium.
Definition: RadioMedium.cc:460
cModule * getContainingNode(const cModule *from)
Find the node containing the given module.
Definition: ModuleAccess.cc:40
virtual const IArrival * getCachedArrival(const IRadio *receiver, const ITransmission *transmission)=0
@ F_MACADDRESS
Definition: NetworkInterface.h:149
virtual const INoise * computeNoise(const IListening *listening, const IInterference *interference) const =0
Returns the total noise summing up all the interfering receptions and noises.
bool macAddressFilter
True means the radio medium doesn't send signals to a radio if the mac address of the destination is ...
Definition: RadioMedium.h:93
virtual const IInterference * getInterference(const IRadio *receiver, const ITransmission *transmission) const override
Returns the interference of the transmission arriving at the provided receiver.
Definition: RadioMedium.cc:339
long transmissionCount
Total number of transmissions.
Definition: RadioMedium.h:140
virtual void mapRadios(std::function< void(const IRadio *)> f) const =0
virtual const simtime_t getCachedInterferenceEndTime(const ITransmission *transmission)=0
virtual void removeNonInterferingTransmissions()
Removes all cached data related to past transmissions that don't have any effect on any ongoing trans...
Definition: RadioMedium.cc:226
virtual void writeReception(const IRadio *receiver, const IWirelessSignal *signal)
Definition: CommunicationLog.cc:35
bool listeningFilter
True means the radio medium doesn't send signals to a radio if it listens on the medium in incompatib...
Definition: RadioMedium.h:88
virtual void setCachedSignal(const ITransmission *transmission, const IWirelessSignal *signal)=0
@ RANGE_FILTER_ANYWHERE
Definition: RadioMedium.h:37
virtual void removeRadio(const IRadio *radio)=0
const physicalenvironment::IMaterial * material
The physical material of the medium is never nullptr.
Definition: RadioMedium.h:72
virtual const IArrival * getArrival(const IRadio *receiver, const ITransmission *transmission) const override
Returns the space and time coordinates of the transmission arriving at the provided receiver.
Definition: RadioMedium.cc:315
long signalSendCount
Total number of signal sends.
Definition: RadioMedium.h:144
virtual void addTransmission(const ITransmission *transmission)=0
virtual void setCachedInterference(const IRadio *receiver, const ITransmission *transmission, const IInterference *interference)=0
long cacheInterferenceGetCount
Total number of interference cache queries.
Definition: RadioMedium.h:176
virtual const IListening * getListening(const IRadio *receiver, const ITransmission *transmission) const override
Returns how the radio is listening on the medium when the transmission arrives at the provided receiv...
Definition: RadioMedium.cc:320
const IAnalogModel * analogModel
The analog model is never nullptr.
Definition: RadioMedium.h:60
virtual bool isInCommunicationRange(const ITransmission *transmission, const Coord &startPosition, const Coord &endPosition) const
Definition: RadioMedium.cc:188
long interferenceComputationCount
Total number of interference computations.
Definition: RadioMedium.h:152
friend Radio
Definition: RadioMedium.h:33
virtual void addRadio(const IRadio *radio)=0
removed DscpReq Ipv4ControlInfo Ipv6ControlInfo up L3AddressInd DispatchProtocolReq L4PortInd Ipv4ControlInfo Ipv6ControlInfo down PacketProtocolTag
Definition: IUdp-gates.txt:25
long cacheNoiseGetCount
Total number of noise cache queries.
Definition: RadioMedium.h:184
virtual m getMaxInterferenceRange() const =0
Returns the maximum possible interference range among the radios, the value is in the range [0,...
virtual const IReception * computeReception(const IRadio *receiver, const ITransmission *transmission, const IArrival *arrival) const =0
Returns the reception for the provided transmission at the receiver.
bool recordReceptionLog
Definition: RadioMedium.h:100
@ RANGE_FILTER_INTERFERENCE_RANGE
Definition: RadioMedium.h:38
std::string printFieldToString(const IPrintableObject *object, int level, int evFlags=0)
Definition: IPrintableObject.h:98
virtual const Material * getMaterial(const char *name) const =0
virtual std::string getCompleteStringRepresentation(int evFlags=0) const
Definition: IPrintableObject.h:78
virtual void sendToNeighbors(IRadio *transmitter, const IWirelessSignal *signal, double range) const =0
Sends the provided frame (using the radio medium) to all neighbors within the given range.
const physicalenvironment::IPhysicalEnvironment * physicalEnvironment
The physical environment model or nullptr if unused.
Definition: RadioMedium.h:68
virtual const IListening * getCachedListening(const IRadio *receiver, const ITransmission *transmission)=0
virtual void removeCachedReceptionResult(const IRadio *receiver, const ITransmission *transmission)=0
@ RADIO_MODE_RECEIVER
The radio is prepared for frame reception, frame transmission is not possible, power consumption is l...
Definition: IRadio.h:97
virtual const IRadio * getRadio(int id) const =0
#define EV_FIELD(...)
Definition: INETDefs.h:112
virtual bool isPotentialReceiver(const IRadio *receiver, const ITransmission *transmission) const
Returns true if the radio can potentially receive the transmission successfully.
Definition: RadioMedium.cc:610
virtual bool matchesMacAddressFilter(const IRadio *radio, const Packet *packet) const
Definition: RadioMedium.cc:170
virtual const IWirelessSignal * getCachedSignal(const ITransmission *transmission)=0
virtual const IRadio * getRadio(int id) const override
Returns radio instance from medium by id.
Definition: RadioMedium.cc:455
virtual void removeRadio(const IRadio *radio)=0
bool radioModeFilter
True means the radio medium doesn't send signals to a radio if it's neither in receiver nor in transc...
Definition: RadioMedium.h:82
static simsignal_t signalAddedSignal
This simsignal is emitted when a signal is added to the medium.
Definition: IRadioMedium.h:57
static simsignal_t listeningChangedSignal
This signal is emitted when the radio listening of the radio is changed.
Definition: IRadio.h:48
virtual void open()
Definition: CommunicationLog.cc:15
virtual bool isReceptionAttempted(const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part) const override
Returns true when the reception is attempted of the transmission part.
Definition: RadioMedium.cc:643
long cacheNoiseHitCount
Total number of noise cache hits.
Definition: RadioMedium.h:188
virtual const INoise * getNoise(const IRadio *receiver, const ITransmission *transmission) const override
Returns the total noise computed from the interference of the transmission arriving at the provided r...
Definition: RadioMedium.cc:357
const IPropagation * propagation
The propagation model is never nullptr.
Definition: RadioMedium.h:48
long cacheSNIRGetCount
Total number of SNIR cache queries.
Definition: RadioMedium.h:192
virtual void setCachedSNIR(const IRadio *receiver, const ITransmission *transmission, const ISnir *snir)=0
long receptionDecisionComputationCount
Total number of data reception decision computations.
Definition: RadioMedium.h:156
virtual const IReceptionDecision * computeReceptionDecision(const IRadio *receiver, const IListening *listening, const ITransmission *transmission, IRadioSignal::SignalPart part) const
Definition: RadioMedium.cc:286
long cacheInterferenceHitCount
Total number of interference cache hits.
Definition: RadioMedium.h:180
INET_API InitStage INITSTAGE_LOCAL
Initialization of local state that don't use or affect other modules includes:
virtual void removeRadio(const IRadio *radio)=0
Notifies the cache when a radio is removed from the medium.
virtual const IReceptionResult * getReceptionResult(const IRadio *receiver, const IListening *listening, const ITransmission *transmission) const override
Returns the reception result for the transmission that describes the end result of the reception proc...
Definition: RadioMedium.cc:401
virtual bool isInterferingTransmission(const ITransmission *transmission, const IListening *listening) const
Definition: RadioMedium.cc:204
@ PRINT_LEVEL_TRACE
Definition: IPrintableObject.h:22
virtual void removeTransmission(const ITransmission *transmission)=0
virtual const IReceptionDecision * getCachedReceptionDecision(const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part)=0
virtual const INoise * computeNoise(const IListening *listening) const =0
cMessage * removeNonInterferingTransmissionsTimer
The message that is used to purge the internal state of the medium.
Definition: RadioMedium.h:108
virtual const IArrival * computeArrival(const ITransmission *transmission, IMobility *mobility) const =0
Returns the time and space coordinates when the transmission arrives at the object that moves with th...
#define NUM_INIT_STAGES
Definition: InitStageRegistry.h:73
virtual const IReceptionResult * getCachedReceptionResult(const IRadio *receiver, const ITransmission *transmission)=0
virtual const IInterference * getCachedInterference(const IRadio *receiver, const ITransmission *transmission)=0
virtual const std::vector< const IReception * > * computeInterferingReceptions(const IListening *listening) const
Definition: RadioMedium.cc:238
long cacheDecisionGetCount
Total number of reception decision cache queries.
Definition: RadioMedium.h:200
virtual void setCachedReceptionResult(const IRadio *receiver, const ITransmission *transmission, const IReceptionResult *receptionResult)=0
virtual const IReceptionDecision * getReceptionDecision(const IRadio *receiver, const IListening *listening, const ITransmission *transmission, IRadioSignal::SignalPart part) const override
Returns the reception decision for the transmission part that specifies whether the reception is poss...
Definition: RadioMedium.cc:387
bool recordTransmissionLog
Records all transmissions (if recordTransmissionLog is enabled) and receptions (if recordReceptionLog...
Definition: RadioMedium.h:99
static simsignal_t signalRemovedSignal
This simsignal is emitted when a signal is removed from the medium.
Definition: IRadioMedium.h:63
int evFlags
Definition: INETDefs.cc:12
virtual void mapTransmissions(std::function< void(const ITransmission *)> f) const =0
virtual void sendToAllRadios(IRadio *transmitter, const IWirelessSignal *signal)
Sends a copy of the provided signal to all receivers on the radio medium.
Definition: RadioMedium.cc:666
static simsignal_t radioRemovedSignal
This simsignal is emitted when a radio is removed from the medium.
Definition: IRadioMedium.h:51
virtual void sendToRadio(IRadio *trasmitter, const IRadio *receiver, const IWirelessSignal *signal)
Definition: RadioMedium.cc:549
CommunicationLog communicationLog
The communication log output recorder.
Definition: RadioMedium.h:132
#define Enter_Method(...)
Definition: SelfDoc.h:71
virtual const IReception * getReception(const IRadio *receiver, const ITransmission *transmission) const override
Returns the reception of the transmission arriving at the provided receiver.
Definition: RadioMedium.cc:325
const value_type & get() const
Definition: Units.h:108
virtual const IInterference * computeInterference(const IRadio *receiver, const IListening *listening) const
Definition: RadioMedium.cc:269
long cacheDecisionHitCount
Total number of reception decision cache hits.
Definition: RadioMedium.h:204
virtual void addRadio(const IRadio *radio)=0
virtual void setCachedInterferenceEndTime(const ITransmission *transmission, const simtime_t interferenceEndTime)=0
IMediumLimitCache * mediumLimitCache
Caches various medium limits among all radios.
Definition: RadioMedium.h:116
virtual const ITransmission * getTransmission(int id) const =0
virtual const ISnir * getCachedSNIR(const IRadio *receiver, const ITransmission *transmission)=0
long receptionResultComputationCount
Total number of data reception result computations.
Definition: RadioMedium.h:160
virtual const simtime_t & getMaxTransmissionDuration() const =0
Returns the maximum possible transmission durations among the radios, the value is in the range [0,...
value< double, units::m > m
Definition: Units.h:1233
virtual void removeNonInterferingTransmissions(std::function< void(const ITransmission *transmission)> f)=0
virtual void writeTransmission(const IRadio *transmitter, const IWirelessSignal *signal)
Definition: CommunicationLog.cc:25
virtual bool isReceptionPossible(const IRadio *receiver, const ITransmission *transmission, IRadioSignal::SignalPart part) const override
Returns true when the reception is possible of the transmission part.
Definition: RadioMedium.cc:632
virtual void setCachedNoise(const IRadio *receiver, const ITransmission *transmission, const INoise *noise)=0
INeighborCache * neighborCache
Caches neighbors for all radios or nullptr if turned off.
Definition: RadioMedium.h:120
virtual const ISnir * computeSNIR(const IReception *reception, const INoise *noise) const =0
Returns the signal to noise and interference ratio.
long cacheResultHitCount
Total number of reception result cache hits.
Definition: RadioMedium.h:212
simsignal_t interfaceConfigChangedSignal
Definition: Simsignals.cc:33
virtual const simtime_t & getMinInterferenceTime() const =0
Returns the minimum required signal interference time among the radios, the value is in the range [0,...
long cacheSNIRHitCount
Total number of SNIR cache hits.
Definition: RadioMedium.h:196
virtual void setCachedListening(const IRadio *receiver, const ITransmission *transmission, const IListening *listening)=0
long cacheReceptionHitCount
Total number of reception cache hits.
Definition: RadioMedium.h:172
virtual void setCachedReception(const IRadio *receiver, const ITransmission *transmission, const IReception *reception)=0
virtual IWirelessSignal * createReceiverSignal(const ITransmission *transmission)
Creates a new signal for a receiver.
Definition: RadioMedium.cc:509
const IPathLoss * pathLoss
The path loss model is never nullptr.
Definition: RadioMedium.h:52
virtual const IReceptionResult * computeReceptionResult(const IRadio *receiver, const IListening *listening, const ITransmission *transmission) const
Definition: RadioMedium.cc:295
static simsignal_t radioModeChangedSignal
This signal is emitted when the radio mode of the radio is changed.
Definition: IRadio.h:42
virtual const IReception * computeReception(const IRadio *receiver, const ITransmission *transmission) const
Definition: RadioMedium.cc:263
virtual void pickUpSignals(IRadio *receiver)
Sends a copy of all ongoing signals to the receiver on the radio medium.
Definition: RadioMedium.cc:673