Merged nonotifier with main branch.

This commit is contained in:
Unknown
2008-05-15 07:47:17 -04:00
3 changed files with 10 additions and 5 deletions

View File

@@ -186,6 +186,11 @@ Node::ReceiveFromDevice (Ptr<NetDevice> device, Ptr<Packet> packet,
uint16_t protocol, const Address &from)
{
bool found = false;
// if there are (potentially) multiple handlers, we need to copy the
// packet before passing it to each handler, because handlers may
// modify it.
bool copyNeeded = (m_handlers.size () > 1);
for (ProtocolHandlerList::iterator i = m_handlers.begin ();
i != m_handlers.end (); i++)
{
@@ -195,7 +200,7 @@ Node::ReceiveFromDevice (Ptr<NetDevice> device, Ptr<Packet> packet,
if (i->protocol == 0 ||
i->protocol == protocol)
{
i->handler (device, packet, protocol, from);
i->handler (device, (copyNeeded ? packet->Copy () : packet), protocol, from);
found = true;
}
}

View File

@@ -111,11 +111,11 @@ PacketSocket::DoBind (const PacketSocketAddress &address)
Ptr<NetDevice> dev ;
if (address.IsSingleDevice ())
{
dev = 0;
dev = m_node->GetDevice (address.GetSingleDevice ());
}
else
{
dev = m_node->GetDevice (address.GetSingleDevice ());
dev = 0;
}
m_node->RegisterProtocolHandler (MakeCallback (&PacketSocket::ForwardUp, this),
address.GetProtocol (), dev);