A Discrete-Event Network Simulator
API
ns3::Ipv4FlowClassifier Class Reference

Classifies packets by looking at their IP and TCP/UDP headers. More...

#include "ipv4-flow-classifier.h"

+ Inheritance diagram for ns3::Ipv4FlowClassifier:
+ Collaboration diagram for ns3::Ipv4FlowClassifier:

Classes

struct  FiveTuple
 Structure to classify a packet. More...
 
class  SortByCount
 Comparator used to sort the vector of DSCP values. More...
 

Public Member Functions

 Ipv4FlowClassifier ()
 
bool Classify (const Ipv4Header &ipHeader, Ptr< const Packet > ipPayload, uint32_t *out_flowId, uint32_t *out_packetId)
 try to classify the packet into flow-id and packet-id More...
 
FiveTuple FindFlow (FlowId flowId) const
 Searches for the FiveTuple corresponding to the given flowId. More...
 
std::vector< std::pair< Ipv4Header::DscpType, uint32_t > > GetDscpCounts (FlowId flowId) const
 get the DSCP values of the packets belonging to the flow with the given FlowId, sorted in decreasing order of number of packets seen with that DSCP value More...
 
virtual void SerializeToXmlStream (std::ostream &os, uint16_t indent) const
 Serializes the results to an std::ostream in XML format. More...
 
- Public Member Functions inherited from ns3::FlowClassifier
 FlowClassifier ()
 
 FlowClassifier (FlowClassifier const &)=delete
 
virtual ~FlowClassifier ()
 
FlowClassifieroperator= (FlowClassifier const &)=delete
 
- Public Member Functions inherited from ns3::SimpleRefCount< FlowClassifier >
 SimpleRefCount ()
 Default constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o[[maybe_unused]])
 Copy constructor. More...
 
uint32_t GetReferenceCount (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= ([[maybe_unused]] const SimpleRefCount &o)
 Assignment operator. More...
 
void Ref (void) const
 Increment the reference count. More...
 
void Unref (void) const
 Decrement the reference count. More...
 

Private Attributes

std::map< FlowId, std::map< Ipv4Header::DscpType, uint32_t > > m_flowDscpMap
 Map FlowIds to (DSCP value, packet count) pairs. More...
 
std::map< FiveTuple, FlowIdm_flowMap
 Map to Flows Identifiers to FlowIds. More...
 
std::map< FlowId, FlowPacketIdm_flowPktIdMap
 Map to FlowIds to FlowPacketId. More...
 

Additional Inherited Members

- Protected Member Functions inherited from ns3::FlowClassifier
FlowId GetNewFlowId ()
 Returns a new, unique Flow Identifier. More...
 
void Indent (std::ostream &os, uint16_t level) const
 Add a number of spaces for indentation purposes. More...
 

Detailed Description

Classifies packets by looking at their IP and TCP/UDP headers.

From these packet headers, a tuple (source-ip, destination-ip, protocol, source-port, destination-port) is created, and a unique flow identifier is assigned for each different tuple combination

Definition at line 38 of file ipv4-flow-classifier.h.

Constructor & Destructor Documentation

◆ Ipv4FlowClassifier()

ns3::Ipv4FlowClassifier::Ipv4FlowClassifier ( )

Definition at line 99 of file ipv4-flow-classifier.cc.

Member Function Documentation

◆ Classify()

bool ns3::Ipv4FlowClassifier::Classify ( const Ipv4Header ipHeader,
Ptr< const Packet ipPayload,
uint32_t *  out_flowId,
uint32_t *  out_packetId 
)

try to classify the packet into flow-id and packet-id

Warning
: it must be called only once per packet, from SendOutgoingLogger.
Returns
true if the packet was classified, false if not (i.e. it does not appear to be part of a flow).
Parameters
ipHeaderpacket's IP header
ipPayloadpacket's IP payload
out_flowIdpacket's FlowId
out_packetIdpacket's identifier

Definition at line 104 of file ipv4-flow-classifier.cc.

References ns3::Packet::CopyData(), data, ns3::Ipv4FlowClassifier::FiveTuple::destinationAddress, ns3::Ipv4FlowClassifier::FiveTuple::destinationPort, ns3::Ipv4Header::GetDestination(), ns3::Ipv4Header::GetDscp(), ns3::Ipv4Header::GetFragmentOffset(), ns3::FlowClassifier::GetNewFlowId(), ns3::Ipv4Header::GetProtocol(), ns3::Packet::GetSize(), ns3::Ipv4Header::GetSource(), m_flowDscpMap, m_flowMap, m_flowPktIdMap, ns3::Ipv4FlowClassifier::FiveTuple::protocol, ns3::Ipv4FlowClassifier::FiveTuple::sourceAddress, ns3::Ipv4FlowClassifier::FiveTuple::sourcePort, ns3::TCP_PROT_NUMBER, and ns3::UDP_PROT_NUMBER.

+ Here is the call graph for this function:

◆ FindFlow()

Ipv4FlowClassifier::FiveTuple ns3::Ipv4FlowClassifier::FindFlow ( FlowId  flowId) const

Searches for the FiveTuple corresponding to the given flowId.

Parameters
flowIdthe FlowId to search for
Returns
the FiveTuple corresponding to flowId

Definition at line 186 of file ipv4-flow-classifier.cc.

References ns3::Ipv4Address::GetZero(), m_flowMap, and NS_FATAL_ERROR.

+ Here is the call graph for this function:

◆ GetDscpCounts()

std::vector< std::pair< Ipv4Header::DscpType, uint32_t > > ns3::Ipv4FlowClassifier::GetDscpCounts ( FlowId  flowId) const

get the DSCP values of the packets belonging to the flow with the given FlowId, sorted in decreasing order of number of packets seen with that DSCP value

Parameters
flowIdthe identifier of the flow of interest
Returns
the vector of DSCP values

Definition at line 209 of file ipv4-flow-classifier.cc.

References m_flowDscpMap, and NS_FATAL_ERROR.

◆ SerializeToXmlStream()

void ns3::Ipv4FlowClassifier::SerializeToXmlStream ( std::ostream &  os,
uint16_t  indent 
) const
virtual

Serializes the results to an std::ostream in XML format.

Parameters
osthe output stream
indentnumber of spaces to use as base indentation level

Implements ns3::FlowClassifier.

Definition at line 225 of file ipv4-flow-classifier.cc.

References check-style::indent(), ns3::FlowClassifier::Indent(), m_flowDscpMap, and m_flowMap.

+ Here is the call graph for this function:

Member Data Documentation

◆ m_flowDscpMap

std::map<FlowId, std::map<Ipv4Header::DscpType, uint32_t> > ns3::Ipv4FlowClassifier::m_flowDscpMap
private

Map FlowIds to (DSCP value, packet count) pairs.

Definition at line 100 of file ipv4-flow-classifier.h.

Referenced by Classify(), GetDscpCounts(), and SerializeToXmlStream().

◆ m_flowMap

std::map<FiveTuple, FlowId> ns3::Ipv4FlowClassifier::m_flowMap
private

Map to Flows Identifiers to FlowIds.

Definition at line 96 of file ipv4-flow-classifier.h.

Referenced by Classify(), FindFlow(), and SerializeToXmlStream().

◆ m_flowPktIdMap

std::map<FlowId, FlowPacketId> ns3::Ipv4FlowClassifier::m_flowPktIdMap
private

Map to FlowIds to FlowPacketId.

Definition at line 98 of file ipv4-flow-classifier.h.

Referenced by Classify().


The documentation for this class was generated from the following files: