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 numQueues ()
virtual int classifyPacket (cMessage *msg)

Private Member Functions

virtual int classifyByDSCP (int dscp)


Member Function Documentation

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

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

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 numQueues()-1 (inclusive).

Implements IQoSClassifier.

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

int BasicDSCPClassifier::numQueues (  )  [virtual]

Returns the largest value plus one classifyPacket() returns.

Implements IQoSClassifier.

00032 {
00033     return 2;
00034 }


The documentation for this class was generated from the following files:
Generated on Wed Apr 4 13:20:19 2007 for INET Framework for OMNeT++/OMNEST by  doxygen 1.4.7