implement the Node::ProtocolHandler support.
This commit is contained in:
@@ -23,8 +23,8 @@
|
||||
|
||||
#include "ns3/composite-trace-resolver.h"
|
||||
#include "ns3/net-device.h"
|
||||
#include "ns3/callback.h"
|
||||
|
||||
#include "l3-demux.h"
|
||||
#include "ipv4-l4-demux.h"
|
||||
#include "internet-node.h"
|
||||
#include "udp-l4-protocol.h"
|
||||
@@ -33,7 +33,6 @@
|
||||
#include "udp-impl.h"
|
||||
#include "arp-private.h"
|
||||
#include "ipv4-impl.h"
|
||||
#include "ipv4-private.h"
|
||||
|
||||
namespace ns3 {
|
||||
|
||||
@@ -56,25 +55,25 @@ InternetNode::Construct (void)
|
||||
{
|
||||
Ptr<Ipv4L3Protocol> ipv4 = Create<Ipv4L3Protocol> (this);
|
||||
Ptr<ArpL3Protocol> arp = Create<ArpL3Protocol> (this);
|
||||
Ptr<UdpL4Protocol> udp = Create<UdpL4Protocol> (this);
|
||||
// XXX remove the PeekPointer below.
|
||||
RegisterProtocolHandler (MakeCallback (&Ipv4L3Protocol::Receive, PeekPointer (ipv4)),
|
||||
Ipv4L3Protocol::PROT_NUMBER, 0);
|
||||
RegisterProtocolHandler (MakeCallback (&ArpL3Protocol::Receive, PeekPointer (arp)),
|
||||
ArpL3Protocol::PROT_NUMBER, 0);
|
||||
|
||||
|
||||
Ptr<L3Demux> l3Demux = Create<L3Demux> (this);
|
||||
Ptr<Ipv4L4Demux> ipv4L4Demux = Create<Ipv4L4Demux> (this);
|
||||
|
||||
l3Demux->Insert (ipv4);
|
||||
l3Demux->Insert (arp);
|
||||
Ptr<UdpL4Protocol> udp = Create<UdpL4Protocol> (this);
|
||||
ipv4L4Demux->Insert (udp);
|
||||
|
||||
Ptr<UdpImpl> udpImpl = Create<UdpImpl> (udp);
|
||||
Ptr<ArpPrivate> arpPrivate = Create<ArpPrivate> (arp);
|
||||
Ptr<Ipv4Impl> ipv4Impl = Create<Ipv4Impl> (ipv4);
|
||||
Ptr<Ipv4Private> ipv4Private = Create<Ipv4Private> (ipv4);
|
||||
|
||||
Object::AddInterface (ipv4Private);
|
||||
Object::AddInterface (ipv4);
|
||||
Object::AddInterface (ipv4Impl);
|
||||
Object::AddInterface (arpPrivate);
|
||||
Object::AddInterface (udpImpl);
|
||||
Object::AddInterface (l3Demux);
|
||||
Object::AddInterface (ipv4L4Demux);
|
||||
}
|
||||
|
||||
@@ -83,9 +82,9 @@ TraceResolver *
|
||||
InternetNode::DoCreateTraceResolver (TraceContext const &context)
|
||||
{
|
||||
CompositeTraceResolver *resolver = new CompositeTraceResolver (context);
|
||||
Ptr<Ipv4Private> ipv4 = QueryInterface<Ipv4Private> (Ipv4Private::iid);
|
||||
Ptr<Ipv4L3Protocol> ipv4 = QueryInterface<Ipv4L3Protocol> (Ipv4L3Protocol::iid);
|
||||
resolver->Add ("ipv4",
|
||||
MakeCallback (&Ipv4Private::CreateTraceResolver, PeekPointer (ipv4)),
|
||||
MakeCallback (&Ipv4L3Protocol::CreateTraceResolver, PeekPointer (ipv4)),
|
||||
InternetNode::IPV4);
|
||||
|
||||
return resolver;
|
||||
@@ -97,25 +96,4 @@ InternetNode::DoDispose()
|
||||
Node::DoDispose ();
|
||||
}
|
||||
|
||||
void
|
||||
InternetNode::DoAddDevice (Ptr<NetDevice> device)
|
||||
{
|
||||
device->SetReceiveCallback (MakeCallback (&InternetNode::ReceiveFromDevice, this));
|
||||
}
|
||||
|
||||
bool
|
||||
InternetNode::ReceiveFromDevice (Ptr<NetDevice> device, const Packet &p, uint16_t protocolNumber) const
|
||||
{
|
||||
Ptr<L3Demux> demux = QueryInterface<L3Demux> (L3Demux::iid);
|
||||
Ptr<L3Protocol> target = demux->GetProtocol (protocolNumber);
|
||||
if (target != 0)
|
||||
{
|
||||
Packet packet = p;
|
||||
target->Receive(packet, device);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}//namespace ns3
|
||||
|
||||
Reference in New Issue
Block a user