Index: src/internet-stack/udp-l4-protocol.cc |
=================================================================== |
--- a/src/internet-stack/udp-l4-protocol.cc |
+++ b/src/internet-stack/udp-l4-protocol.cc |
@@ -31,6 +31,7 @@ |
#include "ipv4-end-point-demux.h" |
#include "ipv4-end-point.h" |
#include "ipv4-l3-protocol.h" |
+#include "ipv4-l3-click-protocol.h" |
#include "udp-socket-impl.h" |
NS_LOG_COMPONENT_DEFINE ("UdpL4Protocol"); |
@@ -82,11 +83,26 @@ |
Ptr<Node> node = this->GetObject<Node> (); |
if (node != 0) |
{ |
- Ptr<Ipv4L3Protocol> ipv4 = this->GetObject<Ipv4L3Protocol> (); |
+ bool isClickNode = false; |
+ |
+ if (DynamicCast<Ipv4L3ClickProtocol> (this->GetObject<Ipv4> ())) |
+ { |
+ isClickNode = true; |
+ } |
+ |
+ Ptr<Ipv4> ipv4 = this->GetObject<Ipv4> (); |
+ |
if (ipv4 != 0) |
{ |
this->SetNode (node); |
- ipv4->Insert (this); |
+ if (!isClickNode) |
+ { |
+ DynamicCast<Ipv4L3Protocol> (ipv4)->Insert (this); |
+ } |
+ else |
+ { |
+ DynamicCast<Ipv4L3ClickProtocol> (ipv4)->Insert (this); |
+ } |
Ptr<UdpSocketFactoryImpl> udpFactory = CreateObject<UdpSocketFactoryImpl> (); |
udpFactory->SetUdp (this); |
node->AggregateObject (udpFactory); |
@@ -255,12 +271,24 @@ |
packet->AddHeader (udpHeader); |
- Ptr<Ipv4L3Protocol> ipv4 = m_node->GetObject<Ipv4L3Protocol> (); |
+ bool isClickNode = false; |
+ Ptr<Ipv4> ipv4 = m_node->GetObject<Ipv4> (); |
+ |
+ if (DynamicCast<Ipv4L3ClickProtocol> (ipv4)) |
+ isClickNode = true; |
+ |
if (ipv4 != 0) |
{ |
NS_LOG_LOGIC ("Sending to IP"); |
// Send with null route |
- ipv4->Send (packet, saddr, daddr, PROT_NUMBER, 0); |
+ if (!isClickNode) |
+ { |
+ DynamicCast<Ipv4L3Protocol> (ipv4)->Send (packet, saddr, daddr, PROT_NUMBER, 0); |
+ } |
+ else |
+ { |
+ DynamicCast<Ipv4L3ClickProtocol> (ipv4)->Send (packet, saddr, daddr, PROT_NUMBER, 0); |
+ } |
} |
} |
@@ -284,11 +312,23 @@ |
packet->AddHeader (udpHeader); |
- Ptr<Ipv4L3Protocol> ipv4 = m_node->GetObject<Ipv4L3Protocol> (); |
+ bool isClickNode = false; |
+ Ptr<Ipv4> ipv4 = m_node->GetObject<Ipv4> (); |
+ |
+ if (DynamicCast<Ipv4L3ClickProtocol> (ipv4)) |
+ isClickNode = true; |
+ |
if (ipv4 != 0) |
{ |
NS_LOG_LOGIC ("Sending to IP"); |
- ipv4->Send (packet, saddr, daddr, PROT_NUMBER, route); |
+ if (!isClickNode) |
+ { |
+ DynamicCast<Ipv4L3Protocol> (ipv4)->Send (packet, saddr, daddr, PROT_NUMBER, route); |
+ } |
+ else |
+ { |
+ DynamicCast<Ipv4L3ClickProtocol> (ipv4)->Send (packet, saddr, daddr, PROT_NUMBER, route); |
+ } |
} |
} |