|
Lines 85-97
Ipv4EndPointDemux::Allocate (void)
|
Link Here
|
|---|
|
| 85 |
} |
85 |
} |
| 86 |
Ipv4EndPoint *endPoint = new Ipv4EndPoint (Ipv4Address::GetAny (), port); |
86 |
Ipv4EndPoint *endPoint = new Ipv4EndPoint (Ipv4Address::GetAny (), port); |
| 87 |
m_endPoints.push_back (endPoint); |
87 |
m_endPoints.push_back (endPoint); |
|
|
88 |
NS_LOG_DEBUG ("Now have >>" << m_endPoints.size () << "<< endpoints."); |
| 88 |
return endPoint; |
89 |
return endPoint; |
| 89 |
} |
90 |
} |
| 90 |
|
91 |
|
| 91 |
Ipv4EndPoint * |
92 |
Ipv4EndPoint * |
| 92 |
Ipv4EndPointDemux::Allocate (Ipv4Address address) |
93 |
Ipv4EndPointDemux::Allocate (Ipv4Address address) |
| 93 |
{ |
94 |
{ |
| 94 |
NS_LOG_FUNCTION; |
95 |
NS_LOG_METHOD; |
| 95 |
NS_LOG_PARAM ("(" << address << ")"); |
96 |
NS_LOG_PARAM ("(" << address << ")"); |
| 96 |
uint16_t port = AllocateEphemeralPort (); |
97 |
uint16_t port = AllocateEphemeralPort (); |
| 97 |
if (port == 0) |
98 |
if (port == 0) |
|
Lines 101-120
Ipv4EndPointDemux::Allocate (Ipv4Address
|
Link Here
|
|---|
|
| 101 |
} |
102 |
} |
| 102 |
Ipv4EndPoint *endPoint = new Ipv4EndPoint (address, port); |
103 |
Ipv4EndPoint *endPoint = new Ipv4EndPoint (address, port); |
| 103 |
m_endPoints.push_back (endPoint); |
104 |
m_endPoints.push_back (endPoint); |
|
|
105 |
NS_LOG_DEBUG ("Now have >>" << m_endPoints.size () << "<< endpoints."); |
| 104 |
return endPoint; |
106 |
return endPoint; |
| 105 |
} |
107 |
} |
| 106 |
|
108 |
|
| 107 |
Ipv4EndPoint * |
109 |
Ipv4EndPoint * |
| 108 |
Ipv4EndPointDemux::Allocate (uint16_t port) |
110 |
Ipv4EndPointDemux::Allocate (uint16_t port) |
| 109 |
{ |
111 |
{ |
| 110 |
NS_LOG_FUNCTION; |
112 |
NS_LOG_METHOD; |
| 111 |
return Allocate (Ipv4Address::GetAny (), port); |
113 |
return Allocate (Ipv4Address::GetAny (), port); |
| 112 |
} |
114 |
} |
| 113 |
|
115 |
|
| 114 |
Ipv4EndPoint * |
116 |
Ipv4EndPoint * |
| 115 |
Ipv4EndPointDemux::Allocate (Ipv4Address address, uint16_t port) |
117 |
Ipv4EndPointDemux::Allocate (Ipv4Address address, uint16_t port) |
| 116 |
{ |
118 |
{ |
| 117 |
NS_LOG_FUNCTION; |
119 |
NS_LOG_METHOD; |
| 118 |
NS_LOG_PARAM ("(" << address << ", " << port << ")"); |
120 |
NS_LOG_PARAM ("(" << address << ", " << port << ")"); |
| 119 |
if (LookupLocal (address, port)) |
121 |
if (LookupLocal (address, port)) |
| 120 |
{ |
122 |
{ |
|
Lines 123-128
Ipv4EndPointDemux::Allocate (Ipv4Address
|
Link Here
|
|---|
|
| 123 |
} |
125 |
} |
| 124 |
Ipv4EndPoint *endPoint = new Ipv4EndPoint (address, port); |
126 |
Ipv4EndPoint *endPoint = new Ipv4EndPoint (address, port); |
| 125 |
m_endPoints.push_back (endPoint); |
127 |
m_endPoints.push_back (endPoint); |
|
|
128 |
NS_LOG_DEBUG ("Now have >>" << m_endPoints.size () << "<< endpoints."); |
| 126 |
return endPoint; |
129 |
return endPoint; |
| 127 |
} |
130 |
} |
| 128 |
|
131 |
|
|
Lines 150-155
Ipv4EndPointDemux::Allocate (Ipv4Address
|
Link Here
|
|---|
|
| 150 |
Ipv4EndPoint *endPoint = new Ipv4EndPoint (localAddress, localPort); |
153 |
Ipv4EndPoint *endPoint = new Ipv4EndPoint (localAddress, localPort); |
| 151 |
endPoint->SetPeer (peerAddress, peerPort); |
154 |
endPoint->SetPeer (peerAddress, peerPort); |
| 152 |
m_endPoints.push_back (endPoint); |
155 |
m_endPoints.push_back (endPoint); |
|
|
156 |
|
| 157 |
NS_LOG_DEBUG ("Now have >>" << m_endPoints.size () << "<< endpoints."); |
| 158 |
|
| 153 |
return endPoint; |
159 |
return endPoint; |
| 154 |
} |
160 |
} |
| 155 |
|
161 |
|
|
Lines 175-183
Ipv4EndPointDemux::DeAllocate (Ipv4EndPo
|
Link Here
|
|---|
|
| 175 |
*/ |
181 |
*/ |
| 176 |
Ipv4EndPointDemux::EndPoints |
182 |
Ipv4EndPointDemux::EndPoints |
| 177 |
Ipv4EndPointDemux::Lookup (Ipv4Address daddr, uint16_t dport, |
183 |
Ipv4EndPointDemux::Lookup (Ipv4Address daddr, uint16_t dport, |
| 178 |
Ipv4Address saddr, uint16_t sport) |
184 |
Ipv4Address saddr, uint16_t sport, |
| 179 |
{ |
185 |
Ptr<Ipv4Interface> interface) |
| 180 |
NS_LOG_FUNCTION; |
186 |
{ |
|
|
187 |
NS_LOG_METHOD; |
| 181 |
uint32_t genericity = 3; |
188 |
uint32_t genericity = 3; |
| 182 |
Ipv4EndPoint *generic = 0; |
189 |
Ipv4EndPoint *generic = 0; |
| 183 |
EndPoints retval; |
190 |
EndPoints retval; |
|
Lines 187-205
Ipv4EndPointDemux::Lookup (Ipv4Address d
|
Link Here
|
|---|
|
| 187 |
|
194 |
|
| 188 |
for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) |
195 |
for (EndPointsI i = m_endPoints.begin (); i != m_endPoints.end (); i++) |
| 189 |
{ |
196 |
{ |
|
|
197 |
NS_LOG_DEBUG ("Looking at endpoint dport=" << (*i)->GetLocalPort () |
| 198 |
<< " daddr=" << (*i)->GetLocalAddress () |
| 199 |
<< " sport=" << (*i)->GetPeerPort () |
| 200 |
<< " saddr=" << (*i)->GetPeerAddress ()); |
| 190 |
if ((*i)->GetLocalPort () != dport) |
201 |
if ((*i)->GetLocalPort () != dport) |
| 191 |
{ |
202 |
{ |
|
|
203 |
NS_LOG_LOGIC ("Skipping endpoint " << &(*i) |
| 204 |
<< " because endpoint dport " |
| 205 |
<< (*i)->GetLocalPort () |
| 206 |
<< " does not match packet dport " << dport); |
| 192 |
continue; |
207 |
continue; |
| 193 |
} |
208 |
} |
|
|
209 |
bool isBroadcast = |
| 210 |
(daddr.IsBroadcast () || |
| 211 |
daddr.IsSubnetDirectedBroadcast (interface->GetNetworkMask ())); |
| 212 |
NS_LOG_DEBUG ("dest addr " << daddr << " broadcast? " << isBroadcast); |
| 213 |
|
| 194 |
NS_LOG_LOGIC ("Local address matches: " << |
214 |
NS_LOG_LOGIC ("Local address matches: " << |
| 195 |
bool ((*i)->GetLocalAddress () == daddr || daddr.IsBroadcast ())); |
215 |
bool ((*i)->GetLocalAddress () == daddr || isBroadcast)); |
| 196 |
NS_LOG_LOGIC ("Peer port matches: " << |
216 |
NS_LOG_LOGIC ("Peer port matches: " << |
| 197 |
bool ((*i)->GetPeerPort () == sport || sport == 0)); |
217 |
bool ((*i)->GetPeerPort () == sport || (*i)->GetPeerPort () == 0)); |
| 198 |
NS_LOG_LOGIC ("Peer address matches: " << |
218 |
NS_LOG_LOGIC ("Peer address matches: " << |
| 199 |
bool ((*i)->GetPeerAddress () == saddr || |
219 |
bool ((*i)->GetPeerAddress () == saddr || |
| 200 |
(*i)->GetPeerAddress () == Ipv4Address::GetAny ())); |
220 |
(*i)->GetPeerAddress () == Ipv4Address::GetAny ())); |
| 201 |
|
221 |
|
| 202 |
if ( ((*i)->GetLocalAddress () == daddr || daddr.IsBroadcast ()) |
222 |
if ( ((*i)->GetLocalAddress () == daddr || isBroadcast) |
| 203 |
&& ((*i)->GetPeerPort () == sport || (*i)->GetPeerPort () == 0) |
223 |
&& ((*i)->GetPeerPort () == sport || (*i)->GetPeerPort () == 0) |
| 204 |
&& ((*i)->GetPeerAddress () == saddr || (*i)->GetPeerAddress () == Ipv4Address::GetAny ())) |
224 |
&& ((*i)->GetPeerAddress () == saddr || (*i)->GetPeerAddress () == Ipv4Address::GetAny ())) |
| 205 |
{ |
225 |
{ |