From 47e58be578b01c6579d96b7d5b1c2f1a7ee44b50 Mon Sep 17 00:00:00 2001 From: Mathieu Lacage Date: Wed, 14 May 2008 09:37:00 -0700 Subject: [PATCH 1/3] update pcap trace setup filename --- examples/mixed-wireless.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/mixed-wireless.cc b/examples/mixed-wireless.cc index 05dbcf0a4..baf9a2836 100644 --- a/examples/mixed-wireless.cc +++ b/examples/mixed-wireless.cc @@ -339,9 +339,9 @@ main (int argc, char *argv[]) CsmaHelper::EnableAsciiAll (ascii); // Let's do a pcap trace on the backbone devices - WifiHelper::EnablePcap ("mixed-wireless.pcap", backboneDevices); + WifiHelper::EnablePcap ("mixed-wireless", backboneDevices); // Let's additionally trace the application Sink, ifIndex 0 - CsmaHelper::EnablePcap ("mixed-wireless.pcap", appSink->GetId (), 0); + CsmaHelper::EnablePcap ("mixed-wireless", appSink->GetId (), 0); #ifdef ENABLE_FOR_TRACING_EXAMPLE Config::Connect ("/NodeList/*/$MobilityModelNotifier/CourseChange", From 1cecfe5548e71d4b6ab158f183976a9929e73b25 Mon Sep 17 00:00:00 2001 From: "Gustavo J. A. M. Carneiro" Date: Wed, 14 May 2008 18:15:26 +0100 Subject: [PATCH 2/3] Missing Packet::Copy in Node::ReceiveFromDevice for the multiple protocol handlers scenario. --- src/node/node.cc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/node/node.cc b/src/node/node.cc index 456e13a95..ef56ec6db 100644 --- a/src/node/node.cc +++ b/src/node/node.cc @@ -186,6 +186,11 @@ Node::ReceiveFromDevice (Ptr device, Ptr 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 device, Ptr 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; } } From 36e6b69aafe81bf66b6b68136ddae87f4c161475 Mon Sep 17 00:00:00 2001 From: "Gustavo J. A. M. Carneiro" Date: Wed, 14 May 2008 19:15:00 +0100 Subject: [PATCH 3/3] PacketSocket bind-to-interface bug --- src/node/packet-socket.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/node/packet-socket.cc b/src/node/packet-socket.cc index 7d3578475..f45690ecf 100644 --- a/src/node/packet-socket.cc +++ b/src/node/packet-socket.cc @@ -111,11 +111,11 @@ PacketSocket::DoBind (const PacketSocketAddress &address) Ptr 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);