00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "ipv4-end-point.h"
00022 #include "ns3/packet.h"
00023 #include "ns3/log.h"
00024 #include "ns3/simulator.h"
00025
00026 NS_LOG_COMPONENT_DEFINE ("Ipv4EndPoint");
00027
00028 namespace ns3 {
00029
00030 Ipv4EndPoint::Ipv4EndPoint (Ipv4Address address, uint16_t port)
00031 : m_localAddr (address),
00032 m_localPort (port),
00033 m_peerAddr (Ipv4Address::GetAny ()),
00034 m_peerPort (0)
00035 {}
00036 Ipv4EndPoint::~Ipv4EndPoint ()
00037 {
00038 if (!m_destroyCallback.IsNull ())
00039 {
00040 m_destroyCallback ();
00041 }
00042 }
00043
00044 Ipv4Address
00045 Ipv4EndPoint::GetLocalAddress (void)
00046 {
00047 return m_localAddr;
00048 }
00049
00050 void
00051 Ipv4EndPoint::SetLocalAddress (Ipv4Address address)
00052 {
00053 m_localAddr = address;
00054 }
00055
00056 uint16_t
00057 Ipv4EndPoint::GetLocalPort (void)
00058 {
00059 return m_localPort;
00060 }
00061 Ipv4Address
00062 Ipv4EndPoint::GetPeerAddress (void)
00063 {
00064 return m_peerAddr;
00065 }
00066 uint16_t
00067 Ipv4EndPoint::GetPeerPort (void)
00068 {
00069 return m_peerPort;
00070 }
00071 void
00072 Ipv4EndPoint::SetPeer (Ipv4Address address, uint16_t port)
00073 {
00074 m_peerAddr = address;
00075 m_peerPort = port;
00076 }
00077
00078 void
00079 Ipv4EndPoint::SetRxCallback (Callback<void,Ptr<Packet>, Ipv4Address, uint16_t> callback)
00080 {
00081 m_rxCallback = callback;
00082 }
00083 void
00084 Ipv4EndPoint::SetIcmpCallback (Callback<void,Ipv4Address,uint8_t,uint8_t,uint8_t,uint32_t> callback)
00085 {
00086 m_icmpCallback = callback;
00087 }
00088
00089 void
00090 Ipv4EndPoint::SetDestroyCallback (Callback<void> callback)
00091 {
00092 m_destroyCallback = callback;
00093 }
00094
00095 void
00096 Ipv4EndPoint::ForwardUp (Ptr<Packet> p, Ipv4Address saddr, uint16_t sport)
00097 {
00098 if (!m_rxCallback.IsNull ())
00099 {
00100 Simulator::ScheduleNow (&Ipv4EndPoint::DoForwardUp, this, p, saddr, sport);
00101 }
00102 }
00103 void
00104 Ipv4EndPoint::DoForwardUp (Ptr<Packet> p, Ipv4Address saddr, uint16_t sport)
00105 {
00106 m_rxCallback (p, saddr, sport);
00107 }
00108
00109 void
00110 Ipv4EndPoint::ForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
00111 uint8_t icmpType, uint8_t icmpCode,
00112 uint32_t icmpInfo)
00113 {
00114 NS_LOG_FUNCTION (this << icmpSource << (uint32_t)icmpTtl << (uint32_t)icmpType <<
00115 (uint32_t)icmpCode << icmpInfo);
00116 if (!m_icmpCallback.IsNull ())
00117 {
00118 Simulator::ScheduleNow (&Ipv4EndPoint::DoForwardIcmp, this,
00119 icmpSource, icmpTtl, icmpType, icmpCode, icmpInfo);
00120 }
00121 }
00122 void
00123 Ipv4EndPoint::DoForwardIcmp (Ipv4Address icmpSource, uint8_t icmpTtl,
00124 uint8_t icmpType, uint8_t icmpCode,
00125 uint32_t icmpInfo)
00126 {
00127 m_icmpCallback (icmpSource,icmpTtl,icmpType,icmpCode,icmpInfo);
00128 }
00129
00130 };