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"
60 virtual void Print (std::ostream &os)
const;
125 .SetGroupName (
"FlowMonitor")
138 return 4 + 4 + 4 + 8;
179 :
Tag (), m_flowId (flowId), m_packetId (packetId), m_packetSize (
packetSize), m_src (src), m_dst (dst)
227 m_classifier (classifier)
233 if (!
m_ipv4->TraceConnectWithoutContext (
"SendOutgoing",
238 if (!
m_ipv4->TraceConnectWithoutContext (
"UnicastForward",
243 if (!
m_ipv4->TraceConnectWithoutContext (
"LocalDeliver",
249 if (!
m_ipv4->TraceConnectWithoutContext (
"Drop",
255 std::ostringstream qd;
256 qd <<
"/NodeList/" << node->
GetId () <<
"/$ns3::TrafficControlLayer/RootQueueDiscList/*/Drop";
260 std::ostringstream oss;
261 oss <<
"/NodeList/" << node->
GetId () <<
"/DeviceList/*/TxQueue/Drop";
275 .SetGroupName (
"FlowMonitor")
309 if (
m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
312 NS_LOG_DEBUG (
"ReportFirstTx ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
"); "
313 << ipHeader << *ipPayload);
346 NS_LOG_DEBUG (
"ReportForwarding ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
");");
347 m_flowMonitor->ReportForwarding (
this, flowId, packetId, size);
369 NS_LOG_DEBUG (
"ReportLastRx ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
"); "
370 << ipHeader << *ipPayload);
406 NS_LOG_DEBUG (
"Drop ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
", " << reason
408 <<
"HDR: " << ipHeader <<
" PKT: " << *ipPayload);
445 m_flowMonitor->ReportDrop (
this, flowId, packetId, size, myReason);
474 bool tagFound = item->GetPacket ()->FindFirstMatchingByteTag (fTag);
The FlowProbe class is responsible for listening for packet events in a specific point of the simulat...
virtual void DoDispose(void)
Destructor implementation.
Ptr< FlowMonitor > m_flowMonitor
the FlowMonitor instance
Ipv4 addresses are stored in host order in this class.
void Serialize(uint8_t buf[4]) const
Serialize this address to a 4-byte buffer.
static Ipv4Address Deserialize(const uint8_t buf[4])
Ipv4Address GetSubnetDirectedBroadcast(Ipv4Mask const &mask) const
Generate subnet-directed broadcast address corresponding to mask.
DropReason
enumeration of possible reasons why a packet may be dropped
@ DROP_ROUTE_ERROR
Route error.
@ DROP_BAD_CHECKSUM
Packet dropped due to invalid checksum in the IPv4 header.
@ DROP_TTL_EXPIRE
Packet dropped due to TTL decremented to zero during IPv4 forwarding.
@ DROP_INTERFACE_DOWN
Interface is down so can not send packet.
@ DROP_NO_ROUTE
Packet dropped due to missing route to the destination.
@ DROP_INVALID_REASON
Fallback reason (no known reason)
@ DROP_QUEUE_DISC
Packet dropped by the queue disc.
@ DROP_FRAGMENT_TIMEOUT
Fragment timeout exceeded.
@ DROP_QUEUE
Packet dropped due to queue overflow.
static TypeId GetTypeId(void)
Register this type.
void SendOutgoingLogger(const Ipv4Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t interface)
Log a packet being sent.
void DropLogger(const Ipv4Header &ipHeader, Ptr< const Packet > ipPayload, Ipv4L3Protocol::DropReason reason, Ptr< Ipv4 > ipv4, uint32_t ifIndex)
Log a packet being dropped.
void QueueDropLogger(Ptr< const Packet > ipPayload)
Log a packet being dropped by a queue.
void ForwardUpLogger(const Ipv4Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t interface)
Log a packet being received by the destination.
Ptr< Ipv4L3Protocol > m_ipv4
the Ipv4L3Protocol this probe is bound to
Ipv4FlowProbe(Ptr< FlowMonitor > monitor, Ptr< Ipv4FlowClassifier > classifier, Ptr< Node > node)
Constructor.
void QueueDiscDropLogger(Ptr< const QueueDiscItem > item)
Log a packet being dropped by a queue disc.
void ForwardLogger(const Ipv4Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t interface)
Log a packet being forwarded.
Ptr< Ipv4FlowClassifier > m_classifier
the Ipv4FlowClassifier this probe is associated with
virtual void DoDispose(void)
Destructor implementation.
Tag used to allow a fast identification of the packet.
uint32_t m_packetSize
packet size
virtual void Deserialize(TagBuffer buf)
bool IsSrcDstValid(Ipv4Address src, Ipv4Address dst) const
Checks if the addresses stored in tag are matching the arguments.
Ipv4Address m_dst
IP destination.
virtual void Serialize(TagBuffer buf) const
static TypeId GetTypeId(void)
Get the type ID.
uint32_t GetPacketId(void) const
Set the packet identifier.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
void SetPacketSize(uint32_t packetSize)
Set the packet size.
uint32_t m_packetId
packet identifier
void SetFlowId(uint32_t flowId)
Set the flow identifier.
uint32_t m_flowId
flow identifier
virtual uint32_t GetSerializedSize(void) const
uint32_t GetPacketSize(void) const
Get the packet size.
uint32_t GetFlowId(void) const
Set the flow identifier.
void SetPacketId(uint32_t packetId)
Set the packet identifier.
virtual void Print(std::ostream &os) const
Ipv4Address m_src
IP source.
Implement the IPv4 layer.
DropReason
Reason why a packet has been dropped.
@ DROP_BAD_CHECKSUM
Bad checksum.
@ DROP_NO_ROUTE
No route to host.
@ DROP_INTERFACE_DOWN
Interface is down so can not send packet.
@ DROP_TTL_EXPIRED
Packet TTL has expired.
@ DROP_ROUTE_ERROR
Route error.
@ DROP_FRAGMENT_TIMEOUT
Fragment timeout exceeded.
a class to represent an Ipv4 address mask
uint32_t GetId(void) const
Ptr< T > GetObject(void) const
Get a pointer to the requested aggregated Object.
bool FindFirstMatchingByteTag(Tag &tag) const
Finds the first tag matching the parameter Tag type.
void AddByteTag(const Tag &tag) const
Tag each byte included in this packet with a new byte tag.
uint32_t GetSize(void) const
Returns the the size in bytes of the packet (including the zero-filled initial payload).
Smart pointer class similar to boost::intrusive_ptr.
void Read(uint8_t *buffer, uint32_t size)
TAG_BUFFER_INLINE uint32_t ReadU32(void)
TAG_BUFFER_INLINE void WriteU32(uint32_t v)
void Write(const uint8_t *buffer, uint32_t size)
tag a set of bytes in a packet
a unique identifier for an interface.
TypeId SetParent(TypeId tid)
Set the parent TypeId.
#define NS_FATAL_ERROR(msg)
Report a fatal error with a message and terminate.
uint32_t FlowId
Abstract identifier of a packet flow.
uint32_t FlowPacketId
Abstract identifier of a packet within a flow.
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name.
#define NS_LOG_DEBUG(msg)
Use NS_LOG to output a message of level LOG_DEBUG.
#define NS_LOG_LOGIC(msg)
Use NS_LOG to output a message of level LOG_LOGIC.
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
#define NS_LOG_WARN(msg)
Use NS_LOG to output a message of level LOG_WARN.
bool ConnectWithoutContextFailSafe(std::string path, const CallbackBase &cb)
This function will attempt to find all trace sources which match the input path and will then connect...
Every class exported by the ns3 library is enclosed in the ns3 namespace.
Callback< R, Ts... > MakeCallback(R(T::*memPtr)(Ts...), OBJ objPtr)
Build Callbacks for class method members which take varying numbers of arguments and potentially retu...
static const uint32_t packetSize