From 39c1412e3e5473bb1abace6400f2dcd31009dc8b Mon Sep 17 00:00:00 2001 From: "Gustavo J. A. M. Carneiro" Date: Thu, 29 May 2008 09:34:31 +0100 Subject: [PATCH] Don't register IPv4 protocol handler for all interfaces, only for IPv4-enabled interfaces. --- src/internet-node/arp-l3-protocol.h | 2 ++ src/internet-node/internet-stack.cc | 6 ------ src/internet-node/ipv4-l3-protocol.cc | 8 ++++++++ 3 files changed, 10 insertions(+), 6 deletions(-) diff --git a/src/internet-node/arp-l3-protocol.h b/src/internet-node/arp-l3-protocol.h index b2365ff56..8aed646cd 100644 --- a/src/internet-node/arp-l3-protocol.h +++ b/src/internet-node/arp-l3-protocol.h @@ -26,6 +26,8 @@ #include "ns3/ptr.h" #include "ns3/traced-callback.h" +#include "ipv4-interface.h" + namespace ns3 { class ArpCache; diff --git a/src/internet-node/internet-stack.cc b/src/internet-node/internet-stack.cc index 5b8f3bfd1..6070daab9 100644 --- a/src/internet-node/internet-stack.cc +++ b/src/internet-node/internet-stack.cc @@ -40,12 +40,6 @@ AddInternetStack (Ptr node) Ptr arp = CreateObject (); ipv4->SetNode (node); arp->SetNode (node); - // XXX remove the PeekPointer below. - node->RegisterProtocolHandler (MakeCallback (&Ipv4L3Protocol::Receive, PeekPointer (ipv4)), - Ipv4L3Protocol::PROT_NUMBER, 0); - node->RegisterProtocolHandler (MakeCallback (&ArpL3Protocol::Receive, PeekPointer (arp)), - ArpL3Protocol::PROT_NUMBER, 0); - Ptr ipv4L4Demux = CreateObject (); Ptr udp = CreateObject (); diff --git a/src/internet-node/ipv4-l3-protocol.cc b/src/internet-node/ipv4-l3-protocol.cc index 7892f9bcd..894518f47 100644 --- a/src/internet-node/ipv4-l3-protocol.cc +++ b/src/internet-node/ipv4-l3-protocol.cc @@ -29,6 +29,7 @@ #include "ns3/uinteger.h" #include "ns3/trace-source-accessor.h" #include "ns3/object-vector.h" +#include "arp-l3-protocol.h" #include "ipv4-l3-protocol.h" #include "ipv4-l4-protocol.h" @@ -320,6 +321,13 @@ uint32_t Ipv4L3Protocol::AddInterface (Ptr device) { NS_LOG_FUNCTION (this << &device); + + Ptr node = GetObject (); + node->RegisterProtocolHandler (MakeCallback (&Ipv4L3Protocol::Receive, this), + Ipv4L3Protocol::PROT_NUMBER, device); + node->RegisterProtocolHandler (MakeCallback (&ArpL3Protocol::Receive, PeekPointer (GetObject ())), + ArpL3Protocol::PROT_NUMBER, device); + Ptr interface = CreateObject (); interface->SetNode (m_node); interface->SetDevice (device);