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);
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.
bool ConnectWithoutContextFailSafe(std::string path, const CallbackBase &cb)
#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 ",...
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