INET Framework for OMNeT++/OMNEST
inet::MultiFieldClassifier::Filter Struct Reference

#include <MultiFieldClassifier.h>

Public Member Functions

 Filter ()
 
bool matches (IPv4Datagram *datagram)
 
bool matches (IPv6Datagram *datagram)
 

Public Attributes

int gateIndex = -1
 
L3Address srcAddr
 
int srcPrefixLength = 0
 
L3Address destAddr
 
int destPrefixLength = 0
 
int protocol = -1
 
int tos = 0
 
int tosMask = 0
 
int srcPortMin = -1
 
int srcPortMax = -1
 
int destPortMin = -1
 
int destPortMax = -1
 

Constructor & Destructor Documentation

inet::MultiFieldClassifier::Filter::Filter ( )
inline
48 {}

Member Function Documentation

bool inet::MultiFieldClassifier::Filter::matches ( IPv4Datagram datagram)
48 {
49  if (srcPrefixLength > 0 && (srcAddr.getType() != L3Address::IPv4 || !datagram->getSrcAddress().prefixMatches(srcAddr.toIPv4(), srcPrefixLength)))
50  return false;
51  if (destPrefixLength > 0 && (destAddr.getType() != L3Address::IPv4 || !datagram->getDestAddress().prefixMatches(destAddr.toIPv4(), destPrefixLength)))
52  return false;
53  if (protocol >= 0 && datagram->getTransportProtocol() != protocol)
54  return false;
55  if (tosMask != 0 && (tos & tosMask) != (datagram->getTypeOfService() & tosMask))
56  return false;
57  if (srcPortMin >= 0 || destPortMin >= 0) {
58  int srcPort = -1, destPort = -1;
59  cPacket *packet = datagram->getEncapsulatedPacket();
60 #ifdef WITH_UDP
61  UDPPacket *udpPacket = dynamic_cast<UDPPacket *>(packet);
62  if (udpPacket) {
63  srcPort = udpPacket->getSourcePort();
64  destPort = udpPacket->getDestinationPort();
65  }
66 #endif // ifdef WITH_UDP
67 #ifdef WITH_TCP_COMMON
68  tcp::TCPSegment *tcpSegment = dynamic_cast<tcp::TCPSegment *>(packet);
69  if (tcpSegment) {
70  srcPort = tcpSegment->getSrcPort();
71  destPort = tcpSegment->getDestPort();
72  }
73 #endif // ifdef WITH_TCP_COMMON
74 
75  if (srcPortMin >= 0 && (srcPort < srcPortMin || srcPort > srcPortMax))
76  return false;
77  if (destPortMin >= 0 && (destPort < destPortMin || destPort > destPortMax))
78  return false;
79  }
80 
81  return true;
82 }
AddressType getType() const
Definition: L3Address.cc:52
L3Address destAddr
Definition: MultiFieldClassifier.h:38
L3Address srcAddr
Definition: MultiFieldClassifier.h:36
int protocol
Definition: MultiFieldClassifier.h:40
int srcPortMax
Definition: MultiFieldClassifier.h:44
int srcPortMin
Definition: MultiFieldClassifier.h:43
int destPortMax
Definition: MultiFieldClassifier.h:46
int tos
Definition: MultiFieldClassifier.h:41
int destPortMin
Definition: MultiFieldClassifier.h:45
int tosMask
Definition: MultiFieldClassifier.h:42
int srcPrefixLength
Definition: MultiFieldClassifier.h:37
IPv4Address toIPv4() const
Definition: L3Address.h:76
int destPrefixLength
Definition: MultiFieldClassifier.h:39
Definition: L3Address.h:46
bool inet::MultiFieldClassifier::Filter::matches ( IPv6Datagram datagram)
88 {
89  if (srcPrefixLength > 0 && (srcAddr.getType() != L3Address::IPv6 || !datagram->getSrcAddress().matches(srcAddr.toIPv6(), srcPrefixLength)))
90  return false;
91  if (destPrefixLength > 0 && (destAddr.getType() != L3Address::IPv6 || !datagram->getDestAddress().matches(destAddr.toIPv6(), destPrefixLength)))
92  return false;
93  if (protocol >= 0 && datagram->getTransportProtocol() != protocol)
94  return false;
95  if (tosMask != 0 && (tos & tosMask) != (datagram->getTrafficClass() & tosMask))
96  return false;
97  if (srcPortMin >= 0 || destPortMin >= 0) {
98  int srcPort = -1, destPort = -1;
99  cPacket *packet = datagram->getEncapsulatedPacket();
100 #ifdef WITH_UDP
101  UDPPacket *udpPacket = dynamic_cast<UDPPacket *>(packet);
102  if (udpPacket) {
103  srcPort = udpPacket->getSourcePort();
104  destPort = udpPacket->getDestinationPort();
105  }
106 #endif // ifdef WITH_UDP
107 #ifdef WITH_TCP_COMMON
108  tcp::TCPSegment *tcpSegment = dynamic_cast<tcp::TCPSegment *>(packet);
109  if (tcpSegment) {
110  srcPort = tcpSegment->getSrcPort();
111  destPort = tcpSegment->getDestPort();
112  }
113 #endif // ifdef WITH_TCP_COMMON
114 
115  if (srcPortMin >= 0 && (srcPort < srcPortMin || srcPort > srcPortMax))
116  return false;
117  if (destPortMin >= 0 && (destPort < destPortMin || destPort > destPortMax))
118  return false;
119  }
120 
121  return true;
122 }
AddressType getType() const
Definition: L3Address.cc:52
L3Address destAddr
Definition: MultiFieldClassifier.h:38
Definition: L3Address.h:47
L3Address srcAddr
Definition: MultiFieldClassifier.h:36
int protocol
Definition: MultiFieldClassifier.h:40
IPv6Address toIPv6() const
Definition: L3Address.h:77
int srcPortMax
Definition: MultiFieldClassifier.h:44
int srcPortMin
Definition: MultiFieldClassifier.h:43
int destPortMax
Definition: MultiFieldClassifier.h:46
int tos
Definition: MultiFieldClassifier.h:41
int destPortMin
Definition: MultiFieldClassifier.h:45
int tosMask
Definition: MultiFieldClassifier.h:42
int srcPrefixLength
Definition: MultiFieldClassifier.h:37
int destPrefixLength
Definition: MultiFieldClassifier.h:39

Member Data Documentation

L3Address inet::MultiFieldClassifier::Filter::destAddr
int inet::MultiFieldClassifier::Filter::destPortMax = -1
int inet::MultiFieldClassifier::Filter::destPortMin = -1
int inet::MultiFieldClassifier::Filter::destPrefixLength = 0
int inet::MultiFieldClassifier::Filter::gateIndex = -1
int inet::MultiFieldClassifier::Filter::protocol = -1
L3Address inet::MultiFieldClassifier::Filter::srcAddr
int inet::MultiFieldClassifier::Filter::srcPortMax = -1
int inet::MultiFieldClassifier::Filter::srcPortMin = -1
int inet::MultiFieldClassifier::Filter::srcPrefixLength = 0
int inet::MultiFieldClassifier::Filter::tos = 0
int inet::MultiFieldClassifier::Filter::tosMask = 0

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