22 #include "ns3/ipv6-flow-probe.h"
23 #include "ns3/ipv6-flow-classifier.h"
25 #include "ns3/packet.h"
26 #include "ns3/flow-monitor.h"
28 #include "ns3/pointer.h"
29 #include "ns3/config.h"
30 #include "ns3/flow-id-tag.h"
61 virtual void Print (std::ostream &os)
const;
112 .SetGroupName (
"FlowMonitor")
154 :
Tag (), m_flowId (flowId), m_packetId (packetId), m_packetSize (
packetSize)
197 m_classifier (classifier)
203 if (!ipv6->TraceConnectWithoutContext (
"SendOutgoing",
208 if (!ipv6->TraceConnectWithoutContext (
"UnicastForward",
213 if (!ipv6->TraceConnectWithoutContext (
"LocalDeliver",
219 if (!ipv6->TraceConnectWithoutContext (
"Drop",
225 std::ostringstream qd;
226 qd <<
"/NodeList/" << node->
GetId () <<
"/$ns3::TrafficControlLayer/RootQueueDiscList/*/Drop";
230 std::ostringstream oss;
231 oss <<
"/NodeList/" << node->
GetId () <<
"/DeviceList/*/TxQueue/Drop";
241 .SetGroupName (
"FlowMonitor")
264 if (
m_classifier->Classify (ipHeader, ipPayload, &flowId, &packetId))
267 NS_LOG_DEBUG (
"ReportFirstTx ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
"); "
268 << ipHeader << *ipPayload);
290 NS_LOG_DEBUG (
"ReportForwarding ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
");");
291 m_flowMonitor->ReportForwarding (
this, flowId, packetId, size);
307 NS_LOG_DEBUG (
"ReportLastRx ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
");");
323 case Ipv6L3Protocol::DROP_BAD_CHECKSUM:
325 Ipv6Mask maski = m_ipv6->GetNetworkMask (ifIndex);
326 Ipv6Address bcast = addri.GetSubnetDirectedBroadcast (maski);
327 if (ipHeader.GetDestination () == bcast)
343 NS_LOG_DEBUG (
"Drop ("<<
this<<
", "<<flowId<<
", "<<packetId<<
", "<<size<<
", " << reason
345 <<
"HDR: " << ipHeader <<
" PKT: " << *ipPayload);
389 m_flowMonitor->ReportDrop (
this, flowId, packetId, size, myReason);
418 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
Describes an IPv6 address.
static TypeId GetTypeId(void)
Register this type.
void QueueDiscDropLogger(Ptr< const QueueDiscItem > item)
Log a packet being dropped by a queue disc.
void QueueDropLogger(Ptr< const Packet > ipPayload)
Log a packet being dropped by a queue.
virtual void DoDispose(void)
Destructor implementation.
Ptr< Ipv6FlowClassifier > m_classifier
the Ipv6FlowClassifier this probe is associated with
void DropLogger(const Ipv6Header &ipHeader, Ptr< const Packet > ipPayload, Ipv6L3Protocol::DropReason reason, Ptr< Ipv6 > ipv6, uint32_t ifIndex)
Log a packet being dropped.
void ForwardLogger(const Ipv6Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t interface)
Log a packet being forwarded.
Ipv6FlowProbe(Ptr< FlowMonitor > monitor, Ptr< Ipv6FlowClassifier > classifier, Ptr< Node > node)
Constructor.
void ForwardUpLogger(const Ipv6Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t interface)
Log a packet being received by the destination.
DropReason
enumeration of possible reasons why a packet may be dropped
@ DROP_TTL_EXPIRE
Packet dropped due to TTL decremented to zero during IPv4 forwarding.
@ DROP_FRAGMENT_TIMEOUT
Fragment timeout exceeded.
@ DROP_NO_ROUTE
Packet dropped due to missing route to the destination.
@ DROP_UNKNOWN_OPTION
Unknown option.
@ DROP_QUEUE_DISC
Packet dropped by the queue disc.
@ DROP_INTERFACE_DOWN
Interface is down so can not send packet.
@ DROP_MALFORMED_HEADER
Malformed header.
@ DROP_ROUTE_ERROR
Route error.
@ DROP_UNKNOWN_PROTOCOL
Unknown L4 protocol.
@ DROP_INVALID_REASON
Fallback reason (no known reason)
@ DROP_QUEUE
Packet dropped due to queue overflow.
void SendOutgoingLogger(const Ipv6Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t interface)
Log a packet being sent.
Tag used to allow a fast identification of the packet.
uint32_t m_flowId
flow identifier
void SetFlowId(uint32_t flowId)
Set the flow identifier.
uint32_t GetPacketSize(void) const
Get the packet size.
virtual TypeId GetInstanceTypeId(void) const
Get the most derived TypeId for this Object.
void SetPacketId(uint32_t packetId)
Set the packet identifier.
void SetPacketSize(uint32_t packetSize)
Set the packet size.
uint32_t GetPacketId(void) const
Set the packet identifier.
virtual uint32_t GetSerializedSize(void) const
virtual void Serialize(TagBuffer buf) const
uint32_t GetFlowId(void) const
Set the flow identifier.
static TypeId GetTypeId(void)
Get the type ID.
virtual void Deserialize(TagBuffer buf)
uint32_t m_packetSize
packet size
uint32_t m_packetId
packet identifier
virtual void Print(std::ostream &os) const
IPv6 layer implementation.
DropReason
Reason why a packet has been dropped.
@ DROP_FRAGMENT_TIMEOUT
Fragment timeout.
@ DROP_ROUTE_ERROR
Route error.
@ DROP_TTL_EXPIRED
Packet TTL has expired.
@ DROP_INTERFACE_DOWN
Interface is down so can not send packet.
@ DROP_UNKNOWN_OPTION
Unknown option.
@ DROP_NO_ROUTE
No route to host.
@ DROP_UNKNOWN_PROTOCOL
Unknown L4 protocol.
@ DROP_MALFORMED_HEADER
Malformed header.
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.
TAG_BUFFER_INLINE uint32_t ReadU32(void)
TAG_BUFFER_INLINE void WriteU32(uint32_t v)
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_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by ",...
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