fixup: multiple devices per channel

This commit is contained in:
Tim Schubert 2020-06-21 13:01:32 +02:00
parent 13e4bf1aa7
commit 07cff2c920
6 changed files with 29 additions and 38 deletions

View file

@ -127,7 +127,8 @@ bool IslChannel::Deliver (
delay,
&IslNetDevice::Receive,
dst,
p->Copy ());
p->Copy (),
src);
// Call the tx anim callback on the net device
m_txrxIsl (p, src, dst, txTime, delay);

View file

@ -368,7 +368,7 @@ IslNetDevice::SetReceiveErrorModel (Ptr<ErrorModel> em)
}
void
IslNetDevice::Receive (Ptr<Packet> packet)
IslNetDevice::Receive (Ptr<Packet> packet, Ptr<IslNetDevice> senderDevice)
{
NS_LOG_FUNCTION (this << packet);
uint16_t protocol = 0;
@ -406,14 +406,15 @@ IslNetDevice::Receive (Ptr<Packet> packet)
//
ProcessHeader (packet, protocol);
Address remote = GetRemote (senderDevice);
if (!m_promiscCallback.IsNull ())
{
m_macPromiscRxTrace (originalPacket);
m_promiscCallback (this, packet, protocol, GetRemote (), GetAddress (), NetDevice::PACKET_HOST);
m_promiscCallback (this, packet, protocol, remote, GetAddress (), NetDevice::PACKET_HOST);
}
m_macRxTrace (originalPacket);
m_rxCallback (this, packet, protocol, GetRemote ());
m_rxCallback (this, packet, protocol, remote);
}
}
@ -653,28 +654,17 @@ IslNetDevice::SupportsSendFrom (void) const
}
void
IslNetDevice::DoMpiReceive (Ptr<Packet> p)
IslNetDevice::DoMpiReceive (Ptr<Packet> p, Ptr<IslNetDevice> senderDevice)
{
NS_LOG_FUNCTION (this << p);
Receive (p);
Receive (p, senderDevice);
}
Address
IslNetDevice::GetRemote (void) const
IslNetDevice::GetRemote (Ptr<IslNetDevice> senderDevice) const
{
NS_LOG_FUNCTION (this);
NS_ASSERT (m_channel->GetNDevices () == 2);
for (std::size_t i = 0; i < m_channel->GetNDevices (); ++i)
{
Ptr<NetDevice> tmp = m_channel->GetDevice (i);
if (tmp != this)
{
return tmp->GetAddress ();
}
}
NS_ASSERT (false);
// quiet compiler.
return Address ();
return senderDevice->GetAddress ();
}
bool

View file

@ -150,7 +150,7 @@ public:
*
* \param p Ptr to the received packet.
*/
void Receive (Ptr<Packet> p);
void Receive (Ptr<Packet> p, Ptr<IslNetDevice> senderDevice);
// The remaining methods are documented in ns3::NetDevice*
@ -205,7 +205,7 @@ protected:
*
* \param p Packet received
*/
void DoMpiReceive (Ptr<Packet> p);
void DoMpiReceive (Ptr<Packet> p, Ptr<IslNetDevice> sender);
virtual void DoInitialize (void);
virtual void NotifyNewAggregate (void);
@ -242,7 +242,7 @@ private:
* \returns the address of the remote device connected to this device
* through the point to point channel.
*/
Address GetRemote (void) const;
Address GetRemote (Ptr<IslNetDevice> senderDevice) const;
/**
* Adds the necessary headers and trailers to a packet of data in order to