#include <BasicDSCPClassifier.h>
Inheritance diagram for BasicDSCPClassifier:
Public Member Functions | |
virtual int | numQueues () |
virtual int | classifyPacket (cMessage *msg) |
Private Member Functions | |
virtual int | classifyByDSCP (int dscp) |
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] |