21 #include "ns3/ipv4-flow-probe.h"
22 #include "ns3/ipv4-flow-classifier.h"
24 #include "ns3/packet.h"
25 #include "ns3/flow-monitor.h"
27 #include "ns3/pointer.h"
28 #include "ns3/config.h"
29 #include "ns3/flow-id-tag.h"
47 virtual void Print (std::ostream &os)
const;
68 .AddConstructor<Ipv4FlowProbeTag> ()
109 :
Tag (), m_flowId (flowId), m_packetId (packetId), m_packetSize (packetSize)
152 m_classifier (classifier)
158 if (!ipv4->TraceConnectWithoutContext (
"SendOutgoing",
163 if (!ipv4->TraceConnectWithoutContext (
"UnicastForward",
168 if (!ipv4->TraceConnectWithoutContext (
"LocalDeliver",
174 if (!ipv4->TraceConnectWithoutContext (
"Drop",
181 std::ostringstream oss;
182 oss <<
"/NodeList/" << node->
GetId () <<
"/DeviceList/*/TxQueue/Drop";
202 if (
m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
205 NS_LOG_DEBUG (
"ReportFirstTx ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
"); "
206 << ipHeader << *ipPayload);
222 if (
m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
225 NS_LOG_DEBUG (
"ReportForwarding ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
");");
226 m_flowMonitor->ReportForwarding (
this, flowId, packetId, size);
237 if (
m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
243 ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
246 NS_LOG_DEBUG (
"ReportLastRx ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
");");
264 Ipv4Mask maski = m_ipv4->GetNetworkMask (ifIndex);
276 if (
m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
282 ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
285 NS_LOG_DEBUG (
"Drop ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
", " << reason
287 <<
"HDR: " << ipHeader <<
" PKT: " << *ipPayload);
324 m_flowMonitor->ReportDrop (
this, flowId, packetId, size, myReason);
336 tagFound = ConstCast<Packet> (ipPayload)->RemovePacketTag (fTag);
void ForwardUpLogger(const Ipv4Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t interface)
smart pointer class similar to boost::intrusive_ptr
#define NS_LOG_FUNCTION(parameters)
virtual void DoDispose(void)
void SetPacketSize(uint32_t packetSize)
a class to represent an Ipv4 address mask
Ipv4FlowProbe(Ptr< FlowMonitor > monitor, Ptr< Ipv4FlowClassifier > classifier, Ptr< Node > node)
void AddPacketTag(const Tag &tag) const
uint32_t GetSize(void) const
TAG_BUFFER_INLINE uint32_t ReadU32(void)
void SendOutgoingLogger(const Ipv4Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t interface)
Ptr< FlowMonitor > m_flowMonitor
#define NS_FATAL_ERROR(msg)
fatal error handling
Ipv4Address GetSubnetDirectedBroadcast(Ipv4Mask const &mask) const
Generate subnet-directed broadcast address corresponding to mask.
virtual uint32_t GetSerializedSize(void) const
DropReason
Reason why a packet has been dropped.
void ForwardLogger(const Ipv4Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t interface)
void SetFlowId(uint32_t flowId)
virtual void Serialize(TagBuffer buf) const
void QueueDropLogger(Ptr< const Packet > ipPayload)
TAG_BUFFER_INLINE void WriteU32(uint32_t v)
void SetPacketId(uint32_t packetId)
Callback< R > MakeCallback(R(T::*memPtr)(void), OBJ objPtr)
uint32_t GetPacketId(void) const
Packet dropped due to invalid checksum in the IPv4 header.
tag a set of bytes in a packet
Implement the Ipv4 layer.
virtual void Print(std::ostream &os) const
Ptr< Ipv4FlowClassifier > m_classifier
virtual TypeId GetInstanceTypeId(void) const
virtual void Deserialize(TagBuffer buf)
uint32_t GetFlowId(void) const
Packet dropped due to TTL decremented to zero during IPv4 forwarding.
uint32_t GetPacketSize(void) const
Ipv4 addresses are stored in host order in this class.
NS_LOG_COMPONENT_DEFINE("PacketLossCounter")
uint32_t GetId(void) const
#define NS_LOG_DEBUG(msg)
Packet dropped due to missing route to the destination.
DropReason
enumeration of possible reasons why a packet may be dropped
Ptr< T > GetObject(void) const
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
void ConnectWithoutContext(std::string path, const CallbackBase &cb)
virtual void DoDispose(void)
static TypeId GetTypeId(void)
void DropLogger(const Ipv4Header &ipHeader, Ptr< const Packet > ipPayload, Ipv4L3Protocol::DropReason reason, Ptr< Ipv4 > ipv4, uint32_t ifIndex)