# HG changeset patch # User Mathieu Lacage # Date 1178126074 -7200 # Node ID a839408950b96cbfde5090f9211d432f8be100b3 # Parent b783e010cb4a82d6999678dde0de3939f1ce4828 rework the socket/udp layer to remove the Ipv4EndPointDemux template diff -r b783e010cb4a -r a839408950b9 SConstruct --- a/SConstruct Wed May 02 15:14:27 2007 +0200 +++ b/SConstruct Wed May 02 19:14:34 2007 +0200 @@ -199,7 +199,6 @@ 'ipv4-interface.cc', 'ipv4.cc', 'ipv4-end-point.cc', - 'udp-end-point.cc', 'udp.cc', 'capability.cc', 'arp-header.cc', @@ -220,6 +219,7 @@ 'socket.cc', 'udp-socket.cc', 'pcap-trace.cc', + 'ipv4-end-point-demux.cc', ]) node.add_headers ([ 'ipv4-header.h', @@ -266,7 +266,6 @@ 'udp.h', 'ipv4-l4-protocol.h', 'ipv4-l4-demux.h', - 'udp-end-point.h', 'ipv4-end-point-demux.h', 'ipv4-end-point.h', 'pcap-trace.h', diff -r b783e010cb4a -r a839408950b9 src/node/ipv4-end-point-demux.cc --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/node/ipv4-end-point-demux.cc Wed May 02 19:14:34 2007 +0200 @@ -0,0 +1,204 @@ +/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ +/* + * Copyright (c) 2005 INRIA + * All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation; + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + * Author: Mathieu Lacage + */ + +#include "ipv4-end-point-demux.h" +#include "ipv4-end-point.h" + +namespace ns3{ + +Ipv4EndPointDemux::Ipv4EndPointDemux () + : m_ephemeral (1025) +{} + +Ipv4EndPointDemux::~Ipv4EndPointDemux () +{ + for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) + { + Ipv4EndPoint *endPoint = *i; + delete endPoint; + } + m_endPoints.clear (); +} + +bool +Ipv4EndPointDemux::LookupPortLocal (uint16_t port) +{ + for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) + { + if ((*i)->GetLocalPort () == port) + { + return true; + } + } + return false; +} + +bool +Ipv4EndPointDemux::LookupLocal (Ipv4Address addr, uint16_t port) +{ + for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) + { + if ((*i)->GetLocalPort () == port && + (*i)->GetLocalAddress () == addr) + { + return true; + } + } + return false; +} + +Ipv4EndPoint * +Ipv4EndPointDemux::Allocate (void) +{ + uint16_t port = AllocateEphemeralPort (); + if (port == 0) + { + return 0; + } + Ipv4EndPoint *endPoint = new Ipv4EndPoint (Ipv4Address::GetAny (), port); + m_endPoints.push_back (endPoint); + return endPoint; +} +Ipv4EndPoint * +Ipv4EndPointDemux::Allocate (Ipv4Address address) +{ + uint16_t port = AllocateEphemeralPort (); + if (port == 0) + { + return 0; + } + Ipv4EndPoint *endPoint = new Ipv4EndPoint (address, port); + m_endPoints.push_back (endPoint); + return endPoint; +} +Ipv4EndPoint * +Ipv4EndPointDemux::Allocate (uint16_t port) +{ + return Allocate (Ipv4Address::GetAny (), port); +} +Ipv4EndPoint * +Ipv4EndPointDemux::Allocate (Ipv4Address address, uint16_t port) +{ + if (LookupLocal (address, port)) + { + return 0; + } + Ipv4EndPoint *endPoint = new Ipv4EndPoint (address, port); + m_endPoints.push_back (endPoint); + return endPoint; +} + +Ipv4EndPoint * +Ipv4EndPointDemux::Allocate (Ipv4Address localAddress, uint16_t localPort, + Ipv4Address peerAddress, uint16_t peerPort) +{ + for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) + { + if ((*i)->GetLocalPort () == localPort && + (*i)->GetLocalAddress () == localAddress && + (*i)->GetPeerPort () == peerPort && + (*i)->GetPeerAddress () == peerAddress) + { + /* no way we can allocate this end-point. */ + return 0; + } + } + Ipv4EndPoint *endPoint = new Ipv4EndPoint (localAddress, localPort); + endPoint->SetPeer (peerAddress, peerPort); + m_endPoints.push_back (endPoint); + return endPoint; +} + + +/* + * If we have an exact match, we return it. + * Otherwise, if we find a generic match, we return it. + * Otherwise, we return 0. + */ +Ipv4EndPoint * +Ipv4EndPointDemux::Lookup (Ipv4Address daddr, uint16_t dport, + Ipv4Address saddr, uint16_t sport) +{ + uint32_t genericity = 3; + Ipv4EndPoint *generic = 0; + //TRACE ("lookup " << daddr << ":" << dport << " " << saddr << ":" << sport); + for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) + { +#if 0 + TRACE ("against " << + (*i)->GetLocalAddress () + << ":" << + (*i)->GetLocalPort () + << " " << + (*i)->GetPeerAddress () + << ":" + << (*i)->GetPeerPort ()); +#endif + if ((*i)->GetLocalPort () != dport) + { + continue; + } + if ((*i)->GetLocalAddress () == daddr && + (*i)->GetPeerPort () == sport && + (*i)->GetPeerAddress () == saddr) + { + /* this is an exact match. */ + return *i; + } + uint32_t tmp = 0; + if ((*i)->GetLocalAddress () == Ipv4Address::GetAny ()) + { + tmp ++; + } + if ((*i)->GetPeerAddress () == Ipv4Address::GetAny ()) + { + tmp ++; + } + if (tmp < genericity) + { + generic = (*i); + genericity = tmp; + } + } + return generic; +} + +uint16_t +Ipv4EndPointDemux::AllocateEphemeralPort (void) +{ + uint16_t port = m_ephemeral; + do + { + port++; + if (port > 5000) + { + port = 1024; + } + if (!LookupPortLocal (port)) + { + return port; + } + } while (port != m_ephemeral); + return 0; +} + +} //namespace ns3 + diff -r b783e010cb4a -r a839408950b9 src/node/ipv4-end-point-demux.h --- a/src/node/ipv4-end-point-demux.h Wed May 02 15:14:27 2007 +0200 +++ b/src/node/ipv4-end-point-demux.h Wed May 02 19:14:34 2007 +0200 @@ -30,7 +30,6 @@ class Ipv4EndPoint; -template class Ipv4EndPointDemux { public: Ipv4EndPointDemux (); @@ -38,216 +37,29 @@ bool LookupPortLocal (uint16_t port); bool LookupLocal (Ipv4Address addr, uint16_t port); - T *Lookup (Ipv4Address daddr, - uint16_t dport, - Ipv4Address saddr, - uint16_t sport); + Ipv4EndPoint *Lookup (Ipv4Address daddr, + uint16_t dport, + Ipv4Address saddr, + uint16_t sport); - T *Allocate (void); - T *Allocate (Ipv4Address address); - T *Allocate (uint16_t port); - T *Allocate (Ipv4Address address, uint16_t port); - T *Allocate (Ipv4Address localAddress, - uint16_t localPort, - Ipv4Address peerAddress, - uint16_t peerPort); + Ipv4EndPoint *Allocate (void); + Ipv4EndPoint *Allocate (Ipv4Address address); + Ipv4EndPoint *Allocate (uint16_t port); + Ipv4EndPoint *Allocate (Ipv4Address address, uint16_t port); + Ipv4EndPoint *Allocate (Ipv4Address localAddress, + uint16_t localPort, + Ipv4Address peerAddress, + uint16_t peerPort); private: uint16_t AllocateEphemeralPort (void); - typedef std::list EndPoints; - typedef typename std::list::iterator EndPointsI; + typedef std::list EndPoints; + typedef std::list::iterator EndPointsI; uint16_t m_ephemeral; EndPoints m_endPoints; }; -}; // namespace ns3 - -namespace ns3{ - -template -Ipv4EndPointDemux::Ipv4EndPointDemux () - : m_ephemeral (1025) -{} - -template -Ipv4EndPointDemux::~Ipv4EndPointDemux () -{} - -template -bool -Ipv4EndPointDemux::LookupPortLocal (uint16_t port) -{ - for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) - { - if ((*i)->GetLocalPort () == port) - { - return true; - } - } - return false; -} - -template -bool -Ipv4EndPointDemux::LookupLocal (Ipv4Address addr, uint16_t port) -{ - for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) - { - if ((*i)->GetLocalPort () == port && - (*i)->GetLocalAddress () == addr) - { - return true; - } - } - return false; -} - -template -T * -Ipv4EndPointDemux::Allocate (void) -{ - uint16_t port = AllocateEphemeralPort (); - if (port == 0) - { - return 0; - } - T *endPoint = new T (Ipv4Address::GetAny (), port); - m_endPoints.push_back (endPoint); - return endPoint; -} -template -T * -Ipv4EndPointDemux::Allocate (Ipv4Address address) -{ - uint16_t port = AllocateEphemeralPort (); - if (port == 0) - { - return 0; - } - T *endPoint = new T (address, port); - m_endPoints.push_back (endPoint); - return endPoint; -} -template -T * -Ipv4EndPointDemux::Allocate (uint16_t port) -{ - return Allocate (Ipv4Address::GetAny (), port); -} -template -T * -Ipv4EndPointDemux::Allocate (Ipv4Address address, uint16_t port) -{ - if (LookupLocal (address, port)) - { - return 0; - } - T *endPoint = new T (address, port); - m_endPoints.push_back (endPoint); - return endPoint; -} - -template -T * -Ipv4EndPointDemux::Allocate (Ipv4Address localAddress, uint16_t localPort, - Ipv4Address peerAddress, uint16_t peerPort) -{ - for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) - { - if ((*i)->GetLocalPort () == localPort && - (*i)->GetLocalAddress () == localAddress && - (*i)->GetPeerPort () == peerPort && - (*i)->GetPeerAddress () == peerAddress) - { - /* no way we can allocate this end-point. */ - return 0; - } - } - T *endPoint = new T (localAddress, localPort); - endPoint->SetPeer (peerAddress, peerPort); - m_endPoints.push_back (endPoint); - return endPoint; -} - - -/* - * If we have an exact match, we return it. - * Otherwise, if we find a generic match, we return it. - * Otherwise, we return 0. - */ -template -T * -Ipv4EndPointDemux::Lookup (Ipv4Address daddr, uint16_t dport, - Ipv4Address saddr, uint16_t sport) -{ - uint32_t genericity = 3; - T *generic = 0; - //TRACE ("lookup " << daddr << ":" << dport << " " << saddr << ":" << sport); - for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) - { -#if 0 - TRACE ("against " << - (*i)->GetLocalAddress () - << ":" << - (*i)->GetLocalPort () - << " " << - (*i)->GetPeerAddress () - << ":" - << (*i)->GetPeerPort ()); -#endif - if ((*i)->GetLocalPort () != dport) - { - continue; - } - if ((*i)->GetLocalAddress () == daddr && - (*i)->GetPeerPort () == sport && - (*i)->GetPeerAddress () == saddr) - { - /* this is an exact match. */ - return *i; - } - uint32_t tmp = 0; - if ((*i)->GetLocalAddress () == Ipv4Address::GetAny ()) - { - tmp ++; - } - if ((*i)->GetPeerAddress () == Ipv4Address::GetAny ()) - { - tmp ++; - } - if (tmp < genericity) - { - generic = (*i); - genericity = tmp; - } - } - return generic; -} - -template -uint16_t -Ipv4EndPointDemux::AllocateEphemeralPort (void) -{ - uint16_t port = m_ephemeral; - do - { - port++; - if (port > 5000) - { - port = 1024; - } - if (!LookupPortLocal (port)) - { - return port; - } - } while (port != m_ephemeral); - return 0; -} - - - -}//namespace ns3 - +} // namespace ns3 #endif /* IPV4_END_POINTS_H */ diff -r b783e010cb4a -r a839408950b9 src/node/ipv4-end-point.cc --- a/src/node/ipv4-end-point.cc Wed May 02 15:14:27 2007 +0200 +++ b/src/node/ipv4-end-point.cc Wed May 02 19:14:34 2007 +0200 @@ -30,7 +30,12 @@ m_peerPort (0) {} Ipv4EndPoint::~Ipv4EndPoint () -{} +{ + if (!m_destroyCallback.IsNull ()) + { + m_destroyCallback (); + } +} Ipv4Address Ipv4EndPoint::GetLocalAddress (void) @@ -59,5 +64,27 @@ m_peerPort = port; } +void +Ipv4EndPoint::SetRxCallback (Callback callback) +{ + m_rxCallback = callback; +} + +void +Ipv4EndPoint::SetDestroyCallback (Callback callback) +{ + m_destroyCallback = callback; +} + +void +Ipv4EndPoint::ForwardUp (const Packet &p, Ipv4Address saddr, uint16_t sport) +{ + if (!m_rxCallback.IsNull ()) + { + m_rxCallback (p, saddr, sport); + } +} + + }; // namespace ns3 diff -r b783e010cb4a -r a839408950b9 src/node/ipv4-end-point.h --- a/src/node/ipv4-end-point.h Wed May 02 15:14:27 2007 +0200 +++ b/src/node/ipv4-end-point.h Wed May 02 19:14:34 2007 +0200 @@ -24,10 +24,12 @@ #include #include "ipv4-address.h" +#include "ns3/callback.h" namespace ns3 { class Header; +class Packet; class Ipv4EndPoint { public: @@ -41,11 +43,18 @@ void SetPeer (Ipv4Address address, uint16_t port); + void SetRxCallback (Callback callback); + void SetDestroyCallback (Callback callback); + + void ForwardUp (const Packet &p, Ipv4Address saddr, uint16_t sport); + private: Ipv4Address m_localAddr; uint16_t m_localPort; Ipv4Address m_peerAddr; uint16_t m_peerPort; + Callback m_rxCallback; + Callback m_destroyCallback; }; }; // namespace ns3 diff -r b783e010cb4a -r a839408950b9 src/node/udp-end-point.cc --- a/src/node/udp-end-point.cc Wed May 02 15:14:27 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2005 INRIA - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#include "udp-end-point.h" - -namespace ns3 { - -UdpEndPoint::UdpEndPoint (Ipv4Address address, uint16_t port) - : Ipv4EndPoint (address, port), - m_socket (0) -{} - -void -UdpEndPoint::SetSocket (UdpSocket *socket) -{ - m_socket = socket; -} -UdpSocket * -UdpEndPoint::GetSocket (void) const -{ - return m_socket; -} - -}//namespace ns3 diff -r b783e010cb4a -r a839408950b9 src/node/udp-end-point.h --- a/src/node/udp-end-point.h Wed May 02 15:14:27 2007 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,45 +0,0 @@ -/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ -/* - * Copyright (c) 2005 INRIA - * All rights reserved. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation; - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * Author: Mathieu Lacage - */ -#ifndef UDP_END_POINT_H -#define UDP_END_POINT_H - -#include -#include "ipv4-end-point.h" -#include "ipv4-address.h" - -namespace ns3 { - -class UdpSocket; - -class UdpEndPoint : public Ipv4EndPoint -{ -public: - UdpEndPoint (Ipv4Address address, uint16_t port); - - void SetSocket (UdpSocket *socket); - UdpSocket *GetSocket (void) const; -private: - UdpSocket *m_socket; -}; - -}//namespace ns3 - -#endif /* UDP_END_POINT_H */ diff -r b783e010cb4a -r a839408950b9 src/node/udp-socket.cc --- a/src/node/udp-socket.cc Wed May 02 15:14:27 2007 +0200 +++ b/src/node/udp-socket.cc Wed May 02 19:14:34 2007 +0200 @@ -20,7 +20,7 @@ */ #include "udp-socket.h" #include "udp.h" -#include "udp-end-point.h" +#include "ipv4-end-point.h" #include "node.h" #include "ipv4-l4-demux.h" @@ -39,7 +39,6 @@ } UdpSocket::~UdpSocket () { - delete m_endPoint; m_node->Unref (); m_node = 0; } @@ -50,49 +49,46 @@ return m_node; } +void +UdpSocket::DestroyEndPoint (void) +{ + m_endPoint = 0; +} +int +UdpSocket::FinishBind (void) +{ + m_endPoint->SetRxCallback (MakeCallback (&UdpSocket::ForwardUp, this)); + m_endPoint->SetDestroyCallback (MakeCallback (&UdpSocket::DestroyEndPoint, this)); + if (m_endPoint == 0) + { + return -1; + } + return 0; +} + int UdpSocket::Bind (void) { m_endPoint = GetUdp ()->Allocate (); - if (m_endPoint == 0) - { - return -1; - } - m_endPoint->SetSocket (this); - return 0; + return FinishBind (); } int UdpSocket::Bind (Ipv4Address address) { m_endPoint = GetUdp ()->Allocate (address); - if (m_endPoint == 0) - { - return -1; - } - m_endPoint->SetSocket (this); - return 0; + return FinishBind (); } int UdpSocket::Bind (uint16_t port) { m_endPoint = GetUdp ()->Allocate (port); - if (m_endPoint == 0) - { - return -1; - } - m_endPoint->SetSocket (this); - return 0; + return FinishBind (); } int UdpSocket::Bind (Ipv4Address address, uint16_t port) { m_endPoint = GetUdp ()->Allocate (address, port); - if (m_endPoint == 0) - { - return -1; - } - m_endPoint->SetSocket (this); - return 0; + return FinishBind (); } enum Socket::SocketErrno @@ -228,12 +224,13 @@ } void -UdpSocket::ForwardUp (Packet &p, Ipv4Address saddr, uint16_t sport) +UdpSocket::ForwardUp (const Packet &packet, Ipv4Address saddr, uint16_t sport) { if (m_shutdownRecv) { return; } + Packet p = packet; if (!m_dummyRxCallback.IsNull ()) { m_dummyRxCallback (this, p.GetSize (), saddr, sport); diff -r b783e010cb4a -r a839408950b9 src/node/udp-socket.h --- a/src/node/udp-socket.h Wed May 02 15:14:27 2007 +0200 +++ b/src/node/udp-socket.h Wed May 02 19:14:34 2007 +0200 @@ -27,7 +27,7 @@ namespace ns3 { -class UdpEndPoint; +class Ipv4EndPoint; class Node; class Packet; class Udp; @@ -74,12 +74,14 @@ private: friend class Udp; // invoked by Udp class - void ForwardUp (Packet &p, Ipv4Address saddr, uint16_t sport); + int FinishBind (void); + void ForwardUp (const Packet &p, Ipv4Address saddr, uint16_t sport); + void DestroyEndPoint (void); Udp *GetUdp (void) const; int DoSendPacketTo (const Packet &p, Ipv4Address daddr, uint16_t dport, ns3::Callback dataSent); - UdpEndPoint *m_endPoint; + Ipv4EndPoint *m_endPoint; Node *m_node; Ipv4Address m_defaultAddress; uint16_t m_defaultPort; diff -r b783e010cb4a -r a839408950b9 src/node/udp.cc --- a/src/node/udp.cc Wed May 02 15:14:27 2007 +0200 +++ b/src/node/udp.cc Wed May 02 19:14:34 2007 +0200 @@ -26,7 +26,7 @@ #include "udp.h" #include "udp-header.h" #include "ipv4-end-point-demux.h" -#include "udp-end-point.h" +#include "ipv4-end-point.h" #include "node.h" #include "ipv4.h" #include "l3-demux.h" @@ -40,7 +40,7 @@ Udp::Udp (Node *node) : Ipv4L4Protocol (PROT_NUMBER, 2), m_node (node), - m_endPoints (new Ipv4EndPointDemux ()) + m_endPoints (new Ipv4EndPointDemux ()) { m_node->Ref (); } @@ -64,27 +64,27 @@ return new UdpSocket (m_node); } -UdpEndPoint * +Ipv4EndPoint * Udp::Allocate (void) { return m_endPoints->Allocate (); } -UdpEndPoint * +Ipv4EndPoint * Udp::Allocate (Ipv4Address address) { return m_endPoints->Allocate (address); } -UdpEndPoint * +Ipv4EndPoint * Udp::Allocate (uint16_t port) { return m_endPoints->Allocate (port); } -UdpEndPoint * +Ipv4EndPoint * Udp::Allocate (Ipv4Address address, uint16_t port) { return m_endPoints->Allocate (address, port); } -UdpEndPoint * +Ipv4EndPoint * Udp::Allocate (Ipv4Address localAddress, uint16_t localPort, Ipv4Address peerAddress, uint16_t peerPort) { @@ -105,15 +105,13 @@ { UdpHeader udpHeader; packet.RemoveHeader (udpHeader); - UdpEndPoint *endPoint = m_endPoints->Lookup (destination, udpHeader.GetDestination (), - source, udpHeader.GetSource ()); + Ipv4EndPoint *endPoint = m_endPoints->Lookup (destination, udpHeader.GetDestination (), + source, udpHeader.GetSource ()); if (endPoint == 0) { return; } - UdpSocket *socket = endPoint->GetSocket (); - socket->ForwardUp (packet, source, udpHeader.GetSource ()); - NS_ASSERT (socket != 0); + endPoint->ForwardUp (packet, source, udpHeader.GetSource ()); } void diff -r b783e010cb4a -r a839408950b9 src/node/udp.h --- a/src/node/udp.h Wed May 02 15:14:27 2007 +0200 +++ b/src/node/udp.h Wed May 02 19:14:34 2007 +0200 @@ -27,7 +27,6 @@ #include "ns3/packet.h" #include "ipv4-address.h" #include "ipv4-end-point-demux.h" -#include "udp-end-point.h" #include "ipv4-l4-protocol.h" namespace ns3 { @@ -48,11 +47,11 @@ Socket *CreateSocket (void); - UdpEndPoint *Allocate (void); - UdpEndPoint *Allocate (Ipv4Address address); - UdpEndPoint *Allocate (uint16_t port); - UdpEndPoint *Allocate (Ipv4Address address, uint16_t port); - UdpEndPoint *Allocate (Ipv4Address localAddress, uint16_t localPort, + Ipv4EndPoint *Allocate (void); + Ipv4EndPoint *Allocate (Ipv4Address address); + Ipv4EndPoint *Allocate (uint16_t port); + Ipv4EndPoint *Allocate (Ipv4Address address, uint16_t port); + Ipv4EndPoint *Allocate (Ipv4Address localAddress, uint16_t localPort, Ipv4Address peerAddress, uint16_t peerPort); // called by UdpSocket. @@ -66,7 +65,7 @@ Ipv4Address const &destination); private: Node *m_node; - Ipv4EndPointDemux *m_endPoints; + Ipv4EndPointDemux *m_endPoints; }; }; // namespace ns3