INET Framework for OMNeT++/OMNEST
ANSAQOS::DSCPClassifier Class Reference

#include <AnsaQosClassifiers.h>

Inheritance diagram for ANSAQOS::DSCPClassifier:
ANSAQOS::Classifier

List of all members.

Public Member Functions

 DSCPClassifier (cXMLElement &clsfrConfig)
unsigned char readDscp (std::string dscpString)
virtual bool classifyPacket (cMessage *msg)
virtual std::string info ()

Private Attributes

std::vector< unsigned char > values
std::string infoString

Detailed Description

Definition at line 106 of file AnsaQosClassifiers.h.


Constructor & Destructor Documentation

ANSAQOS::DSCPClassifier::DSCPClassifier ( cXMLElement &  clsfrConfig)

Definition at line 229 of file AnsaQosClassifiers.cc.

{
  /* Do retazca uklada informacie pre graficke rozhranie */
  infoString = "DSCP:=";

  /* Prechadzanie elementov XML konfiguracie */    
  cXMLElementList dscpDetails = clsfrConfig.getChildren();
  for (cXMLElementList::iterator dscpElemIt = dscpDetails.begin(); dscpElemIt != dscpDetails.end(); ++dscpElemIt) 
  {
    std::string nodeName = (*dscpElemIt)->getTagName();
    if (nodeName == "value")
    {
      std::string val = (*dscpElemIt)->getNodeValue();
      values.push_back(readDscp(val));
      infoString += " ";
      infoString += val;
    }
  }
   
}

Member Function Documentation

bool ANSAQOS::DSCPClassifier::classifyPacket ( cMessage *  msg) [virtual]

Implements ANSAQOS::Classifier.

Definition at line 257 of file AnsaQosClassifiers.cc.

{
  unsigned char tos;
  std::vector<unsigned char>::iterator it;
  cMessage *copy = msg->dup();

  if (dynamic_cast<IPDatagram *>(copy))
  {
    IPDatagram *datagram = (IPDatagram *)copy;
    tos = datagram->getDiffServCodePoint();
  }
  delete copy;
  
  for(it = values.begin(); it != values.end(); ++it )
  {  
    if (*it == tos)
      return true;
   }   
  return false;
}
virtual std::string ANSAQOS::DSCPClassifier::info ( ) [inline, virtual]

Implements ANSAQOS::Classifier.

Definition at line 116 of file AnsaQosClassifiers.h.

{return infoString;}
unsigned char ANSAQOS::DSCPClassifier::readDscp ( std::string  dscpString)

Definition at line 199 of file AnsaQosClassifiers.cc.

{

  if(dscpString.size() == 3)
  {
    std::string prf = dscpString.substr(0,2);
    unsigned char cls = dscpString[2] - '0';
    if((prf == "CS" || prf == "Cs" || prf == "cs") && cls > 0 && cls < 8)
      return cls*32; 
  }
  else if (dscpString.size() == 4)
  {
    std::string prf = dscpString.substr(0,2);
    unsigned char cls =  dscpString[2] - '0';
    unsigned char dp = dscpString[3] - '0';
    if((prf == "AF" || prf == "Af" || prf == "af") && cls > 0 && cls < 5 && dp > 0 && dp < 4)
      return cls*32 + dp*8;
  }
  else if(dscpString == "EF" || dscpString == "Ef" || dscpString == "ef")
    return 184;

  return atoi(dscpString.c_str());
}

Member Data Documentation

std::string ANSAQOS::DSCPClassifier::infoString [private]

Definition at line 110 of file AnsaQosClassifiers.h.

Referenced by info().

std::vector<unsigned char> ANSAQOS::DSCPClassifier::values [private]

Definition at line 109 of file AnsaQosClassifiers.h.


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