|
|
| 197 |
{ |
197 |
{ |
| 198 |
NS_LOG_FUNCTION (this << node->GetId ()); |
198 |
NS_LOG_FUNCTION (this << node->GetId ()); |
| 199 |
|
199 |
|
| 200 |
Ptr<Ipv4L3Protocol> ipv4 = node->GetObject<Ipv4L3Protocol> (); |
200 |
m_ipv4 = node->GetObject<Ipv4L3Protocol> (); |
| 201 |
|
201 |
|
| 202 |
if (!ipv4->TraceConnectWithoutContext ("SendOutgoing", |
202 |
if (!m_ipv4->TraceConnectWithoutContext ("SendOutgoing", |
| 203 |
MakeCallback (&Ipv4FlowProbe::SendOutgoingLogger, Ptr<Ipv4FlowProbe> (this)))) |
203 |
MakeCallback (&Ipv4FlowProbe::SendOutgoingLogger, Ptr<Ipv4FlowProbe> (this)))) |
| 204 |
{ |
204 |
{ |
| 205 |
NS_FATAL_ERROR ("trace fail"); |
205 |
NS_FATAL_ERROR ("trace fail"); |
| 206 |
} |
206 |
} |
| 207 |
if (!ipv4->TraceConnectWithoutContext ("UnicastForward", |
207 |
if (!m_ipv4->TraceConnectWithoutContext ("UnicastForward", |
| 208 |
MakeCallback (&Ipv4FlowProbe::ForwardLogger, Ptr<Ipv4FlowProbe> (this)))) |
208 |
MakeCallback (&Ipv4FlowProbe::ForwardLogger, Ptr<Ipv4FlowProbe> (this)))) |
| 209 |
{ |
209 |
{ |
| 210 |
NS_FATAL_ERROR ("trace fail"); |
210 |
NS_FATAL_ERROR ("trace fail"); |
| 211 |
} |
211 |
} |
| 212 |
if (!ipv4->TraceConnectWithoutContext ("LocalDeliver", |
212 |
if (!m_ipv4->TraceConnectWithoutContext ("LocalDeliver", |
| 213 |
MakeCallback (&Ipv4FlowProbe::ForwardUpLogger, Ptr<Ipv4FlowProbe> (this)))) |
213 |
MakeCallback (&Ipv4FlowProbe::ForwardUpLogger, Ptr<Ipv4FlowProbe> (this)))) |
| 214 |
{ |
214 |
{ |
| 215 |
NS_FATAL_ERROR ("trace fail"); |
215 |
NS_FATAL_ERROR ("trace fail"); |
| 216 |
} |
216 |
} |
| 217 |
|
217 |
|
| 218 |
if (!ipv4->TraceConnectWithoutContext ("Drop", |
218 |
if (!m_ipv4->TraceConnectWithoutContext ("Drop", |
| 219 |
MakeCallback (&Ipv4FlowProbe::DropLogger, Ptr<Ipv4FlowProbe> (this)))) |
219 |
MakeCallback (&Ipv4FlowProbe::DropLogger, Ptr<Ipv4FlowProbe> (this)))) |
| 220 |
{ |
220 |
{ |
| 221 |
NS_FATAL_ERROR ("trace fail"); |
221 |
NS_FATAL_ERROR ("trace fail"); |
| 222 |
} |
222 |
} |
|
|
| 234 |
void |
234 |
void |
| 235 |
Ipv4FlowProbe::DoDispose () |
235 |
Ipv4FlowProbe::DoDispose () |
| 236 |
{ |
236 |
{ |
|
|
237 |
m_ipv4 = 0; |
| 238 |
m_classifier = 0; |
| 237 |
FlowProbe::DoDispose (); |
239 |
FlowProbe::DoDispose (); |
| 238 |
} |
240 |
} |
| 239 |
|
241 |
|
|
|
| 243 |
FlowId flowId; |
245 |
FlowId flowId; |
| 244 |
FlowPacketId packetId; |
246 |
FlowPacketId packetId; |
| 245 |
|
247 |
|
|
|
248 |
if (!m_ipv4->IsUnicast(ipHeader.GetDestination ())) |
| 249 |
{ |
| 250 |
// we are not prepared to handle broadcast yet |
| 251 |
return; |
| 252 |
} |
| 253 |
|
| 246 |
if (m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId)) |
254 |
if (m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId)) |
| 247 |
{ |
255 |
{ |
| 248 |
uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ()); |
256 |
uint32_t size = (ipPayload->GetSize () + ipHeader.GetSerializedSize ()); |