Skip to content

Commit 156c07a

Browse files
committed
EthernetMac: Added missing transmission and propagation packet event.
1 parent a385a73 commit 156c07a

File tree

1 file changed

+14
-0
lines changed

1 file changed

+14
-0
lines changed

src/inet/linklayer/ethernet/basic/EthernetMac.cc

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@
77

88
#include "inet/linklayer/ethernet/basic/EthernetMac.h"
99

10+
#include "inet/common/PacketEventTag.h"
1011
#include "inet/common/ProtocolTag_m.h"
1112
#include "inet/common/Simsignals.h"
13+
#include "inet/common/TimeTag.h"
1214
#include "inet/linklayer/common/EtherType_m.h"
1315
#include "inet/linklayer/common/InterfaceTag_m.h"
1416
#include "inet/linklayer/common/MacAddressTag_m.h"
@@ -100,6 +102,18 @@ void EthernetMac::startFrameTransmission()
100102
// add preamble and SFD (Starting Frame Delimiter), then send out
101103
encapsulate(frame);
102104

105+
auto packetEvent = new PacketTransmittedEvent();
106+
auto packet = frame;
107+
simtime_t packetTransmissionTime = packet->getBitLength() / curEtherDescr->bitrate;
108+
simtime_t bitTransmissionTime = packet->getBitLength() != 0 ? 1 / curEtherDescr->bitrate : 0;
109+
packetEvent->setDatarate(bps(curEtherDescr->bitrate));
110+
insertPacketEvent(this, packet, PEK_TRANSMITTED, bitTransmissionTime, 0, packetEvent);
111+
increaseTimeTag<TransmissionTimeTag>(packet, bitTransmissionTime, packetTransmissionTime);
112+
if (auto channel = dynamic_cast<cDatarateChannel *>(physOutGate->findTransmissionChannel())) {
113+
insertPacketEvent(this, packet, PEK_PROPAGATED, 0, channel->getDelay());
114+
increaseTimeTag<PropagationTimeTag>(packet, channel->getDelay(), channel->getDelay());
115+
}
116+
103117
// send
104118
auto& oldPacketProtocolTag = frame->removeTag<PacketProtocolTag>();
105119
frame->clearTags();

0 commit comments

Comments
 (0)