From 8a395dc05a5e3ea59a7b1689e57bd492e8076263 Mon Sep 17 00:00:00 2001 From: Tom Henderson Date: Sat, 3 Jun 2017 07:59:20 -0700 Subject: [PATCH] csma: (fixes #2556) Avoid modification of transmitted packets Packets sent to channel may later be modified by calling device. Possible solutions are to copy before or after sending the packet to the channel. Adopted solution similar to YansWifiChannel; a Ptr is instead passed to the channel object, and channel object is responsible for copy. --- src/csma/model/csma-channel.cc | 4 ++-- src/csma/model/csma-channel.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/csma/model/csma-channel.cc b/src/csma/model/csma-channel.cc index 7f96b4673..0ba64b537 100644 --- a/src/csma/model/csma-channel.cc +++ b/src/csma/model/csma-channel.cc @@ -170,7 +170,7 @@ CsmaChannel::Detach (Ptr device) } bool -CsmaChannel::TransmitStart (Ptr p, uint32_t srcId) +CsmaChannel::TransmitStart (Ptr p, uint32_t srcId) { NS_LOG_FUNCTION (this << p << srcId); NS_LOG_INFO ("UID is " << p->GetUid () << ")"); @@ -188,7 +188,7 @@ CsmaChannel::TransmitStart (Ptr p, uint32_t srcId) } NS_LOG_LOGIC ("switch to TRANSMITTING"); - m_currentPkt = p; + m_currentPkt = p->Copy (); m_currentSrc = srcId; m_state = TRANSMITTING; return true; diff --git a/src/csma/model/csma-channel.h b/src/csma/model/csma-channel.h index ae4859941..4bbcfd873 100644 --- a/src/csma/model/csma-channel.h +++ b/src/csma/model/csma-channel.h @@ -184,7 +184,7 @@ public: * \return True if the channel is not busy and the transmitting net * device is currently active. */ - bool TransmitStart (Ptr p, uint32_t srcId); + bool TransmitStart (Ptr p, uint32_t srcId); /** * \brief Indicates that the net device has finished transmitting