31 : m_ephemeral (49152), m_portLast (65535), m_portFirst (49152)
53 if ((*i)->GetLocalPort () ==
port)
67 if ((*i)->GetLocalPort () == port &&
68 (*i)->GetLocalAddress () == addr)
135 NS_LOG_FUNCTION (
this << localAddress << localPort << peerAddress << peerPort);
138 if ((*i)->GetLocalPort () == localPort &&
139 (*i)->GetLocalAddress () == localAddress &&
140 (*i)->GetPeerPort () == peerPort &&
141 (*i)->GetPeerAddress () == peerAddress)
143 NS_LOG_WARN (
"No way we can allocate this end-point.");
149 endPoint->
SetPeer (peerAddress, peerPort);
184 ret.push_back (endP);
200 NS_LOG_FUNCTION (
this << daddr << dport << saddr << sport << incomingInterface);
207 NS_LOG_DEBUG (
"Looking up endpoint for destination address " << daddr);
218 <<
" because endpoint dport "
220 <<
" does not match packet dport " << dport);
228 <<
" because endpoint is bound to specific device and"
230 <<
" does not match packet device " << incomingInterface->
GetDevice ());
234 bool subnetDirected =
false;
236 for (uint32_t i = 0; i < incomingInterface->
GetNAddresses (); i++)
242 subnetDirected =
true;
243 incomingInterfaceAddr = addr.
GetLocal ();
246 bool isBroadcast = (daddr.
IsBroadcast () || subnetDirected ==
true);
247 NS_LOG_DEBUG (
"dest addr " << daddr <<
" broadcast? " << isBroadcast);
248 bool localAddressMatchesWildCard =
260 incomingInterfaceAddr);
263 if (!(localAddressMatchesExact || localAddressMatchesWildCard))
265 bool remotePeerMatchesExact = endP->
GetPeerPort () == sport;
266 bool remotePeerMatchesWildCard = endP->
GetPeerPort () == 0;
267 bool remoteAddressMatchesExact = endP->
GetPeerAddress () == saddr;
272 if (!(remotePeerMatchesExact || remotePeerMatchesWildCard))
274 if (!(remoteAddressMatchesExact || remoteAddressMatchesWildCard))
278 if (localAddressMatchesWildCard &&
279 remotePeerMatchesWildCard &&
280 remoteAddressMatchesWildCard)
282 retval1.push_back (endP);
284 if ((localAddressMatchesExact || (isBroadcast && localAddressMatchesWildCard))&&
285 remotePeerMatchesWildCard &&
286 remoteAddressMatchesWildCard)
288 retval2.push_back (endP);
290 if (localAddressMatchesWildCard &&
291 remotePeerMatchesExact &&
292 remoteAddressMatchesExact)
294 retval3.push_back (endP);
296 if (localAddressMatchesExact &&
297 remotePeerMatchesExact &&
298 remoteAddressMatchesExact)
300 retval4.push_back (endP);
305 if (!retval4.empty ())
return retval4;
306 if (!retval3.empty ())
return retval3;
307 if (!retval2.empty ())
return retval2;
321 uint32_t genericity = 3;
325 if ((*i)->GetLocalPort () != dport)
329 if ((*i)->GetLocalAddress () == daddr &&
330 (*i)->GetPeerPort () == sport &&
331 (*i)->GetPeerAddress () == saddr)
345 if (tmp < genericity)
static Ipv4Address GetAny(void)
#define NS_LOG_FUNCTION(parameters)
Ipv4Mask GetMask(void) const
Get the network mask.
NS_LOG_COMPONENT_DEFINE("GrantedTimeWindowMpiInterface")
Ipv4Address GetLocal(void) const
Get the local address.
EndPoints GetAllEndPoints(void)
Get the entire list of end points registered.
uint16_t m_ephemeral
The ephemeral port.
bool LookupPortLocal(uint16_t port)
Lookup for port local.
Ipv4Address CombineMask(Ipv4Mask const &mask) const
Combine this address with a network mask.
uint16_t m_portFirst
The first ephemeral port.
bool IsSubnetDirectedBroadcast(Ipv4Mask const &mask) const
Generate subnet-directed broadcast address corresponding to mask.
Ipv4Address GetLocalAddress(void)
Get the local address.
bool IsBroadcast(void) const
#define NS_LOG_LOGIC(msg)
uint16_t m_portLast
The last ephemeral port.
Ipv4InterfaceAddress GetAddress(uint32_t index) const
Ptr< NetDevice > GetBoundNetDevice(void)
Returns socket's bound netdevice, if any.
Ipv4EndPoint * SimpleLookup(Ipv4Address daddr, uint16_t dport, Ipv4Address saddr, uint16_t sport)
simple lookup for a match with all the parameters.
bool LookupLocal(Ipv4Address addr, uint16_t port)
Lookup for address and port.
void SetPeer(Ipv4Address address, uint16_t port)
Set the peer informations (address and port).
EndPoints Lookup(Ipv4Address daddr, uint16_t dport, Ipv4Address saddr, uint16_t sport, Ptr< Ipv4Interface > incomingInterface)
lookup for a match with all the parameters.
Ipv4 addresses are stored in host order in this class.
std::list< Ipv4EndPoint * > EndPoints
Container of the IPv4 endpoints.
a class to store IPv4 address information on an interface
uint16_t GetLocalPort(void)
Get the local port.
Ptr< NetDevice > GetDevice(void) const
#define NS_LOG_DEBUG(msg)
Ipv4Address GetPeerAddress(void)
Get the peer address.
uint16_t GetPeerPort(void)
Get the peer port.
std::list< Ipv4EndPoint * >::iterator EndPointsI
Iterator to the container of the IPv4 endpoints.
void DeAllocate(Ipv4EndPoint *endPoint)
Remove a end point.
EndPoints m_endPoints
A list of IPv4 end points.
uint32_t GetNAddresses(void) const
uint16_t AllocateEphemeralPort(void)
Allocate an ephemeral port.
A representation of an internet endpoint/connection.
Ipv4EndPoint * Allocate(void)
Allocate a Ipv4EndPoint.