BasicDSCPClassifier Class Reference

#include <BasicDSCPClassifier.h>

Inheritance diagram for BasicDSCPClassifier:

IQoSClassifier

List of all members.


Detailed Description

Just an example for packet classifiers, based on IPv4 DSCP/IPv6 Traffic class. You'll probably need to implement others if your research interest lies in QoS.

Public Member Functions

virtual int getNumQueues ()
virtual int classifyPacket (cMessage *msg)

Private Member Functions

virtual int classifyByDSCP (int dscp)

Member Function Documentation

int BasicDSCPClassifier::classifyByDSCP ( int  dscp  )  [private, virtual]

Referenced by classifyPacket().

00060 {
00061     // DSCP is 6 bits, mask out all others
00062     dscp = (dscp & 0x3f);
00063 
00064     // DSCP format:
00065     //    xxxxx0: used by standards; see RFC 2474
00066     //    xxxxx1: experimental or local use
00067     // source: Stallings, High-Speed Networks, 2nd Ed, p494
00068 
00069     // all-zero DSCP maps to Best Effort (lowest priority)
00070     if (dscp==0)
00071         return BEST_EFFORT;
00072 
00073     // assume Best Effort service for experimental or local DSCP's too
00074     if (dscp & 1)
00075         return BEST_EFFORT;
00076 
00077     // from here on, we deal with non-zero standardized DSCP values only
00078     int upper3bits = (dscp & 0x3c) >> 3;
00079     //int lower3bits = (dscp & 0x07);  -- we'll ignore this
00080 
00081     // rfc 2474, section 4.2.2: at least two independently forwarded classes of traffic have to be created
00082     if (upper3bits & 0x04)
00083         return 0; // highest priority
00084     else
00085         return 1; // low priority (best effort)
00086 }

int BasicDSCPClassifier::getNumQueues (  )  [virtual]

Returns the largest value plus one classifyPacket() returns.

Implements IQoSClassifier.

00031 {
00032     return 2;
00033 }

int BasicDSCPClassifier::classifyPacket ( cMessage *  msg  )  [virtual]

The method should return the priority (the index of subqueue) for the given packet, a value between 0 and getNumQueues()-1 (inclusive).

Implements IQoSClassifier.

00036 {
00037     if (dynamic_cast<IPDatagram *>(msg))
00038     {
00039         // IPv4 QoS: map DSCP to queue number
00040         IPDatagram *datagram = (IPDatagram *)msg;
00041         int dscp = datagram->getDiffServCodePoint();
00042         return classifyByDSCP(dscp);
00043     }
00044 #ifndef WITHOUT_IPv6
00045     else if (dynamic_cast<IPv6Datagram *>(msg))
00046     {
00047         // IPv6 QoS: map Traffic Class to queue number
00048         IPv6Datagram *datagram = (IPv6Datagram *)msg;
00049         int dscp = datagram->getTrafficClass();
00050         return classifyByDSCP(dscp);
00051     }
00052 #endif
00053     else
00054     {
00055         return BEST_EFFORT; // lowest priority ("best effort")
00056     }
00057 }


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

Generated on Fri Mar 20 18:51:18 2009 for INET Framework for OMNeT++/OMNEST by  doxygen 1.5.5