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

classifies IP packets according to Traffic Flow Templates (TFTs) More...

#include "epc-tft-classifier.h"

+ Inheritance diagram for ns3::EpcTftClassifier:
+ Collaboration diagram for ns3::EpcTftClassifier:

Public Member Functions

 EpcTftClassifier ()
 
void Add (Ptr< EpcTft > tft, uint32_t id)
 add a TFT to the Classifier More...
 
uint32_t Classify (Ptr< Packet > p, EpcTft::Direction direction, uint16_t protocolNumber)
 classify an IP packet More...
 
void Delete (uint32_t id)
 delete an existing TFT from the classifier More...
 
- Public Member Functions inherited from ns3::SimpleRefCount< EpcTftClassifier >
 SimpleRefCount ()
 Default constructor. More...
 
 SimpleRefCount (const SimpleRefCount &o)
 Copy constructor. More...
 
uint32_t GetReferenceCount (void) const
 Get the reference count of the object. More...
 
SimpleRefCountoperator= (const SimpleRefCount &o)
 Assignment operator. More...
 
void Ref (void) const
 Increment the reference count. More...
 
void Unref (void) const
 Decrement the reference count. More...
 

Protected Attributes

std::map< std::tuple< uint32_t, uint32_t, uint8_t, uint16_t >, std::pair< uint32_t, uint32_t > > m_classifiedIpv4Fragments
 Map with already classified IPv4 Fragments An entry is added when the port info is available, i.e. More...
 
std::map< uint32_t, Ptr< EpcTft > > m_tftMap
 TFT map. More...
 

Detailed Description

classifies IP packets according to Traffic Flow Templates (TFTs)

Note
this implementation works with IPv4 and IPv6. When there is fragmentation of IP packets, UDP/TCP ports maybe missing.

The following actions are performed to use the port info present in the first segment with the next fragments:

  • Port info is stored if it is available, i.e. it is the first fragment with UDP/TCP protocol and there is enough data in the payload of the IP packet for the port numbers.
  • Port info is used for the next fragments.
  • Port info is deleted, when the last fragment is processed.

When we cannot cache the port info, the TFT of the default bearer is used. This may happen if there is reordering or losses of IP packets.

Definition at line 54 of file epc-tft-classifier.h.

Constructor & Destructor Documentation

◆ EpcTftClassifier()

ns3::EpcTftClassifier::EpcTftClassifier ( )

Definition at line 45 of file epc-tft-classifier.cc.

References NS_LOG_FUNCTION.

Member Function Documentation

◆ Add()

void ns3::EpcTftClassifier::Add ( Ptr< EpcTft tft,
uint32_t  id 
)

add a TFT to the Classifier

Parameters
tftthe TFT to be added
idthe ID of the bearer which will be classified by specified TFT classifier

Definition at line 51 of file epc-tft-classifier.cc.

References m_tftMap, NS_ASSERT, and NS_LOG_FUNCTION.

Referenced by ns3::EpcUeNas::DoActivateEpsBearer(), and EpcTftClassifierTestSuite::EpcTftClassifierTestSuite().

+ Here is the caller graph for this function:

◆ Classify()

uint32_t ns3::EpcTftClassifier::Classify ( Ptr< Packet p,
EpcTft::Direction  direction,
uint16_t  protocolNumber 
)

classify an IP packet

Parameters
pthe IP packet. The outmost header can only be an IPv4 or an IPv6 header.
directionthe EPC TFT direction (can be downlink, uplink or bi-directional)
protocolNumberthe protocol of the packet. Only IPv4 and IPv6 are supported.
Returns
the identifier (>0) of the first TFT that matches with the IP packet; 0 if no TFT matched.

Definition at line 68 of file epc-tft-classifier.cc.

References ns3::Packet::Copy(), ns3::EpcTft::DOWNLINK, ns3::Ipv4Address::Get(), ns3::Ipv4Header::GetDestination(), ns3::Ipv6Header::GetDestinationAddress(), ns3::UdpHeader::GetDestinationPort(), ns3::TcpHeader::GetDestinationPort(), ns3::Ipv4Header::GetFragmentOffset(), ns3::Ipv4Header::GetIdentification(), ns3::Ipv6Header::GetNextHeader(), ns3::Ipv4Header::GetPayloadSize(), ns3::Ipv4Header::GetProtocol(), ns3::Packet::GetSize(), ns3::Ipv4Header::GetSource(), ns3::Ipv6Header::GetSourceAddress(), ns3::UdpHeader::GetSourcePort(), ns3::TcpHeader::GetSourcePort(), ns3::Ipv4Header::GetTos(), ns3::Ipv6Header::GetTrafficClass(), ns3::Ipv4Header::IsLastFragment(), m_classifiedIpv4Fragments, m_tftMap, NS_ABORT_MSG, NS_ASSERT, NS_LOG_FUNCTION, NS_LOG_INFO, NS_LOG_LOGIC(), ns3::UdpL4Protocol::PROT_NUMBER, ns3::Ipv6L3Protocol::PROT_NUMBER, ns3::TcpL4Protocol::PROT_NUMBER, ns3::Ipv4L3Protocol::PROT_NUMBER, and ns3::EpcTft::UPLINK.

Referenced by EpcTftClassifierTestCase::DoRun(), and ns3::EpcUeNas::Send().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ Delete()

void ns3::EpcTftClassifier::Delete ( uint32_t  id)

delete an existing TFT from the classifier

Parameters
idthe identifier of the TFT to be deleted

Definition at line 61 of file epc-tft-classifier.cc.

References m_tftMap, and NS_LOG_FUNCTION.

Referenced by ns3::EpcUeNas::DoNotifyConnectionReleased().

+ Here is the caller graph for this function:

Member Data Documentation

◆ m_classifiedIpv4Fragments

std::map< std::tuple<uint32_t, uint32_t, uint8_t, uint16_t>, std::pair<uint32_t, uint32_t> > ns3::EpcTftClassifier::m_classifiedIpv4Fragments
protected

Map with already classified IPv4 Fragments An entry is added when the port info is available, i.e.

first fragment, UDP/TCP protocols and enough payload data An entry is used if port info is not available, i.e. not first fragment or not enough payload data for TCP/UDP An entry is removed when the last fragment is classified Note: If last fragment is lost, entry is not removed

Definition at line 94 of file epc-tft-classifier.h.

Referenced by Classify().

◆ m_tftMap

std::map<uint32_t, Ptr<EpcTft> > ns3::EpcTftClassifier::m_tftMap
protected

TFT map.

Definition at line 90 of file epc-tft-classifier.h.

Referenced by Add(), Classify(), and Delete().


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