Home | History | Annotate | Download | only in diffserv
      1 #! /bin/sh 
      2 #
      3 # sample script on using the ingress capabilities using u32 classifier
      4 # This script tags tcindex based on metering on the ingress 
      5 # interface the result is used for fast classification and re-marking
      6 # on the egress interface
      7 # This is an example of a color blind mode marker with PIR configured
      8 # based on draft-wahjak-mcm-00.txt (section 3.2)
      9 #
     10 #path to various utilities;
     11 #change to reflect yours.
     12 #
     13 IPROUTE=/root/DS-6-beta/iproute2-990530-dsing
     14 TC=$IPROUTE/tc/tc
     15 IP=$IPROUTE/ip/ip
     16 INDEV=eth2
     17 EGDEV="dev eth1"
     18 CIR1=1000kbit
     19 CIR2=1000kbit
     20 # The PIR is the excess (in addition to the CIR i.e if always
     21 # going to the PIR --> average rate is CIR+PIR)
     22 PIR1=1000kbit
     23 PIR2=500kbit
     24 
     25 #The CBS is about 60 MTU sized packets
     26 CBS1=90k
     27 CBS2=90k
     28 #the EBS is about 10 max sized packets
     29 EBS1=15k
     30 EBS2=15k
     31 # The meters
     32 meter1=" police rate $CIR1 burst $CBS1 "
     33 meter1a=" police rate $PIR1 burst $EBS1 "
     34 meter2=" police rate $CIR2 burst $CBS1 "
     35 meter2a="police rate $PIR2 burst $CBS1 "
     36 meter3=" police rate $CIR2 burst $CBS2 "
     37 meter3a=" police rate $PIR2 burst $EBS2 "
     38 meter4=" police rate $CIR1 burst $CBS2 "
     39 meter5=" police rate $CIR1 burst $CBS2 "
     40 
     41 
     42 # install the ingress qdisc on the ingress interface
     43 ############################################################ 
     44 $TC qdisc add dev $INDEV handle ffff: ingress
     45 ############################################################ 
     46 #
     47 ############################################################ 
     48 
     49 # All packets are marked with a tcindex value which is used on the egress
     50 # NOTE: tcindex 1 maps to AF41, 2->AF42, 3->AF43, 4->BE
     51 # 
     52 #anything from subnet 10.2.0.2/24 is passed on with a tcindex value 1
     53 #if it doesnt exceed its CIR/CBS + PIR/EBS
     54 # 
     55 $TC filter add dev $INDEV parent ffff: protocol ip prio 1 u32 \
     56 match ip src 10.2.0.0/24 $meter1 \
     57 continue flowid :1
     58 $TC filter add dev $INDEV parent ffff: protocol ip prio 2 u32 \
     59 match ip src 10.2.0.0/24 $meter1a \
     60 continue flowid :1
     61 
     62 #
     63 # if it exceeds the above but not the extra rate/burst below, it gets a 
     64 #tcindex value  of 2
     65 #
     66 $TC filter add dev $INDEV parent ffff: protocol ip prio 3 u32 \
     67 match ip src 10.2.0.0/24 $meter2 \
     68 continue flowid :2
     69 $TC filter add dev $INDEV parent ffff: protocol ip prio 4 u32 \
     70 match ip src 10.2.0.0/24 $meter2a \
     71 continue flowid :2
     72 #
     73 # if it exceeds the above but not the rule below, it gets a tcindex value
     74 # of 3
     75 #
     76 $TC filter add dev $INDEV parent ffff: protocol ip prio 5 u32 \
     77 match ip src 10.2.0.0/24 $meter3 \
     78 continue flowid :3
     79 $TC filter add dev $INDEV parent ffff: protocol ip prio 6 u32 \
     80 match ip src 10.2.0.0/24 $meter3a \
     81 drop flowid :3
     82 #
     83 #
     84 # Anything else (not from the subnet 10.2.0.24/24) gets discarded if it 
     85 # exceeds 1Mbps and by default goes to BE if it doesnt
     86 #
     87 $TC filter add dev $INDEV parent ffff: protocol ip prio 7 u32 \
     88 match ip src 0/0 $meter5 \
     89 drop flowid :4
     90 
     91 
     92 ######################## Egress side ########################
     93 
     94 
     95 # attach a dsmarker
     96 #
     97 $TC qdisc add $EGDEV handle 1:0 root dsmark indices 64
     98 #
     99 # values of the DSCP to change depending on the class
    100 #note that the ECN bits are masked out
    101 #
    102 #AF41 (0x88 is 0x22 shifted to the right by two bits)
    103 #
    104 $TC class change $EGDEV classid 1:1 dsmark mask 0x3 \
    105        value 0x88
    106 #AF42
    107 $TC class change $EGDEV classid 1:2 dsmark mask 0x3 \
    108        value 0x90
    109 #AF43
    110 $TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
    111        value 0x98
    112 #BE
    113 $TC class change $EGDEV classid 1:3 dsmark mask 0x3 \
    114        value 0x0
    115 #
    116 #
    117 # The class mapping
    118 #
    119 $TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
    120           handle 1 tcindex classid 1:1
    121 $TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
    122           handle 2 tcindex  classid 1:2
    123 $TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
    124           handle 3 tcindex  classid 1:3
    125 $TC filter add $EGDEV parent 1:0 protocol ip prio 1 \
    126           handle 4 tcindex  classid 1:4
    127 #
    128 
    129 #
    130 echo "---- qdisc parameters Ingress  ----------"
    131 $TC qdisc ls dev $INDEV
    132 echo "---- Class parameters Ingress  ----------"
    133 $TC class ls dev $INDEV
    134 echo "---- filter parameters Ingress ----------"
    135 $TC filter ls dev $INDEV parent ffff:
    136 
    137 echo "---- qdisc parameters Egress  ----------"
    138 $TC qdisc ls $EGDEV
    139 echo "---- Class parameters Egress  ----------"
    140 $TC class ls $EGDEV
    141 echo "---- filter parameters Egress ----------"
    142 $TC filter ls $EGDEV parent 1:0
    143 #
    144 #deleting the ingress qdisc
    145 #$TC qdisc del $INDEV ingress
    146