
Note all these are mere examples which can be customized to your needs

AFCBQ
-----
AF PHB built using CBQ, DSMARK,GRED (default in GRIO mode) ,RED for BE 
and the tcindex classifier with some algorithmic mapping

EFCBQ
-----
EF PHB built using CBQ (for rate control and prioritization), 
DSMARK( to remark DSCPs), tcindex  classifier and  RED for the BE
traffic.

EFPRIO
------
EF PHB using the PRIO scheduler, Token Bucket to rate control EF,
tcindex classifier, DSMARK to remark, and RED for the BE traffic

EDGE scripts
==============

CB-3(1|2)-(u32/chains)
======================


The major differences are that the classifier is u32 on -u32 extension
and IPchains on the chains extension. CB stands for color Blind
and 31 is for the mode where only a CIR and CBS are defined whereas
32 stands for a mode where a CIR/CBS + PIR/EBS are defined.

Color Blind (CB)
==========-----=
We look at one special subnet that we are interested in for simplicty
reasons to demonstrate the capability. We send the packets from that
subnet to AF4*, BE or end up dropping depending on the metering results. 


The algorithm overview is as follows:

*classify:

**case: subnet X
----------------
  if !exceed meter1 tag as AF41
	else
	    if !exceed meter2  tag as AF42
	        else
		  if !exceed meter 3 tag as AF43
		      else 
			 drop 

default case: Any other subnet
-------------------------------
  if !exceed meter 5 tag as AF43
      else
	 drop 


One Egress side change the DSCPs of the packets to reflect AF4* and BE
based on the tags from the ingress.

-------------------------------------------------------------

Color Aware
===========

Define some meters with + policing and give them IDs eg

meter1=police index 1 rate $CIR1 burst $CBS1  
meter2=police index 2 rate $CIR2 burst $CBS2   etc 

General overview:
classify based on the DSCPs and use the policer ids to decide tagging


*classify on ingress:

switch (dscp) {
    case AF41: /* tos&0xfc == 0x88 */
	if (!exceed meter1) break;
    case AF42: /* tos&0xfc == 0x90 */
	if (!exceed meter2) {
	    tag as AF42;
	    break;
	}
    case AF43: /* tos&0xfc == 0x98 */
	if (!exceed meter3) {
	    tag as AF43;
	    break;
	} else
	  drop;
    default:
	if (!exceed meter4) tag as BE;
	else drop;
}

On the Egress side mark the proper AF tags
