29 #include "ns3/packet.h" 
   30 #include "ns3/ipv4-header.h" 
   31 #include "ns3/ipv6-header.h" 
   32 #include "ns3/udp-header.h" 
   33 #include "ns3/tcp-header.h" 
   34 #include "ns3/udp-l4-protocol.h" 
   35 #include "ns3/tcp-l4-protocol.h" 
   36 #include "ns3/icmpv6-l4-protocol.h" 
   37 #include "ns3/icmpv4-l4-protocol.h" 
   75   ipType = (ipType>>4) & 0x0f;
 
   86   uint16_t localPort = 0;
 
   87   uint16_t remotePort = 0;
 
   92       pCopy->RemoveHeader (ipv4Header);
 
   96           localAddressIpv4 = ipv4Header.
GetSource ();
 
  102           remoteAddressIpv4 = ipv4Header.
GetSource ();
 
  105       NS_LOG_INFO (
"local address: " << localAddressIpv4 << 
" remote address: " << remoteAddressIpv4);
 
  115       tos = ipv4Header.
GetTos ();
 
  121       if (fragmentOffset == 0)
 
  126               pCopy->RemoveHeader (udpHeader);
 
  139                   std::tuple<uint32_t, uint32_t, uint8_t, uint16_t> fragmentKey =
 
  151               pCopy->RemoveHeader (tcpHeader);
 
  165                   std::tuple<uint32_t, uint32_t, uint8_t, uint16_t> fragmentKey =
 
  183           std::tuple<uint32_t, uint32_t, uint8_t, uint16_t> fragmentKey =
 
  189           std::map< std::tuple<uint32_t, uint32_t, uint8_t, uint16_t>,
 
  190                     std::pair<uint32_t, uint32_t> >::iterator it =
 
  195               localPort = it->second.first;
 
  196               remotePort = it->second.second;
 
  205   else if (ipType == 0x06)
 
  208       pCopy->RemoveHeader (ipv6Header);
 
  221       NS_LOG_INFO (
"local address: " << localAddressIpv6 << 
" remote address: " << remoteAddressIpv6);
 
  229           pCopy->RemoveHeader (udpHeader);
 
  245           pCopy->RemoveHeader (tcpHeader);
 
  260       NS_ABORT_MSG (
"EpcTftClassifier::Classify - Unknown IP type...");
 
  267           << 
" localAddr="  << localAddressIpv4
 
  268           << 
" remoteAddr=" << remoteAddressIpv4
 
  269           << 
" localPort="  << localPort
 
  270           << 
" remotePort=" << remotePort
 
  271           << 
" tos=0x" << (uint16_t) tos );
 
  276       std::map <uint32_t, Ptr<EpcTft> >::const_reverse_iterator it;
 
  284           if (tft->Matches (direction, remoteAddressIpv4, localAddressIpv4, remotePort, localPort, tos))
 
  291   else if (ipType == 0x06)
 
  294           << 
" localAddr="  << localAddressIpv6
 
  295           << 
" remoteAddr=" << remoteAddressIpv6
 
  296           << 
" localPort="  << localPort
 
  297           << 
" remotePort=" << remotePort
 
  298           << 
" tos=0x" << (uint16_t) tos );
 
  303       std::map <uint32_t, Ptr<EpcTft> >::const_reverse_iterator it;
 
  311           if (tft->Matches (direction, remoteAddressIpv6, localAddressIpv6, remotePort, localPort, tos))
 
Direction
Indicates the direction of the traffic that is to be classified. 
 
Smart pointer class similar to boost::intrusive_ptr. 
 
#define NS_LOG_FUNCTION(parameters)
If log level LOG_FUNCTION is enabled, this macro will output all input parameters separated by "...
 
#define NS_ABORT_MSG(msg)
Unconditional abnormal program termination with a message. 
 
void Add(Ptr< EpcTft > tft, uint32_t id)
add a TFT to the Classifier 
 
#define NS_ASSERT(condition)
At runtime, in debugging builds, if this condition is not true, the program prints the source file...
 
#define NS_LOG_COMPONENT_DEFINE(name)
Define a Log component with a specific name. 
 
uint32_t GetSize(void) const 
Returns the the size in bytes of the packet (including the zero-filled initial payload). 
 
#define NS_LOG_INFO(msg)
Use NS_LOG to output a message of level LOG_INFO. 
 
uint32_t Classify(Ptr< Packet > p, EpcTft::Direction direction)
classify an IP packet 
 
uint32_t Get(void) const 
Get the host-order 32-bit IP address. 
 
static const uint8_t PROT_NUMBER
protocol number (0x6) 
 
Ptr< Packet > Copy(void) const 
performs a COW copy of the packet. 
 
Every class exported by the ns3 library is enclosed in the ns3 namespace. 
 
std::map< uint32_t, Ptr< EpcTft > > m_tftMap
TFT map. 
 
NS_LOG_LOGIC("Net device "<< nd<< " is not bridged")
 
Describes an IPv6 address. 
 
Ipv4 addresses are stored in host order in this class. 
 
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...
 
uint32_t CopyData(uint8_t *buffer, uint32_t size) const 
Copy the packet contents to a byte buffer. 
 
void Delete(uint32_t id)
delete an existing TFT from the classifier 
 
static const uint8_t PROT_NUMBER
protocol number (0x11)