1*de1e4e89SAndroid Build Coastguard Worker#! /bin/sh -x 2*de1e4e89SAndroid Build Coastguard Worker# 3*de1e4e89SAndroid Build Coastguard Worker# sample script on using the ingress capabilities 4*de1e4e89SAndroid Build Coastguard Worker# This script fwmark tags(IPchains) based on metering on the ingress 5*de1e4e89SAndroid Build Coastguard Worker# interface the result is used for fast classification and re-marking 6*de1e4e89SAndroid Build Coastguard Worker# on the egress interface 7*de1e4e89SAndroid Build Coastguard Worker# This is an example of a color blind mode marker with no PIR configured 8*de1e4e89SAndroid Build Coastguard Worker# based on draft-wahjak-mcm-00.txt (section 3.1) 9*de1e4e89SAndroid Build Coastguard Worker# 10*de1e4e89SAndroid Build Coastguard Worker#path to various utilities; 11*de1e4e89SAndroid Build Coastguard Worker#change to reflect yours. 12*de1e4e89SAndroid Build Coastguard Worker# 13*de1e4e89SAndroid Build Coastguard WorkerIPROUTE=/root/DS-6-beta/iproute2-990530-dsing 14*de1e4e89SAndroid Build Coastguard WorkerTC=$IPROUTE/tc/tc 15*de1e4e89SAndroid Build Coastguard WorkerIP=$IPROUTE/ip/ip 16*de1e4e89SAndroid Build Coastguard WorkerIPCHAINS=/root/DS-6-beta/ipchains-1.3.9/ipchains 17*de1e4e89SAndroid Build Coastguard WorkerINDEV=eth2 18*de1e4e89SAndroid Build Coastguard WorkerEGDEV="dev eth1" 19*de1e4e89SAndroid Build Coastguard WorkerCIR1=1500kbit 20*de1e4e89SAndroid Build Coastguard WorkerCIR2=500kbit 21*de1e4e89SAndroid Build Coastguard Worker 22*de1e4e89SAndroid Build Coastguard Worker#The CBS is about 60 MTU sized packets 23*de1e4e89SAndroid Build Coastguard WorkerCBS1=90k 24*de1e4e89SAndroid Build Coastguard WorkerCBS2=90k 25*de1e4e89SAndroid Build Coastguard Worker 26*de1e4e89SAndroid Build Coastguard Workermeter1="police rate $CIR1 burst $CBS1 " 27*de1e4e89SAndroid Build Coastguard Workermeter1a="police rate $CIR2 burst $CBS1 " 28*de1e4e89SAndroid Build Coastguard Workermeter2="police rate $CIR1 burst $CBS2 " 29*de1e4e89SAndroid Build Coastguard Workermeter2a="police rate $CIR2 burst $CBS2 " 30*de1e4e89SAndroid Build Coastguard Workermeter3="police rate $CIR2 burst $CBS1 " 31*de1e4e89SAndroid Build Coastguard Workermeter3a="police rate $CIR2 burst $CBS1 " 32*de1e4e89SAndroid Build Coastguard Workermeter4="police rate $CIR2 burst $CBS2 " 33*de1e4e89SAndroid Build Coastguard Workermeter5="police rate $CIR1 burst $CBS2 " 34*de1e4e89SAndroid Build Coastguard Worker# 35*de1e4e89SAndroid Build Coastguard Worker# tag the rest of incoming packets from subnet 10.2.0.0/24 to fw value 1 36*de1e4e89SAndroid Build Coastguard Worker# tag all incoming packets from any other subnet to fw tag 2 37*de1e4e89SAndroid Build Coastguard Worker############################################################ 38*de1e4e89SAndroid Build Coastguard Worker$IPCHAINS -A input -i $INDEV -s 0/0 -m 2 39*de1e4e89SAndroid Build Coastguard Worker$IPCHAINS -A input -i $INDEV -s 10.2.0.0/24 -m 1 40*de1e4e89SAndroid Build Coastguard Worker# 41*de1e4e89SAndroid Build Coastguard Worker############################################################ 42*de1e4e89SAndroid Build Coastguard Worker# install the ingress qdisc on the ingress interface 43*de1e4e89SAndroid Build Coastguard Worker$TC qdisc add dev $INDEV handle ffff: ingress 44*de1e4e89SAndroid Build Coastguard Worker# 45*de1e4e89SAndroid Build Coastguard Worker############################################################ 46*de1e4e89SAndroid Build Coastguard Worker 47*de1e4e89SAndroid Build Coastguard Worker# All packets are marked with a tcindex value which is used on the egress 48*de1e4e89SAndroid Build Coastguard Worker# tcindex 1 maps to AF41, 2->AF42, 3->AF43, 4->BE 49*de1e4e89SAndroid Build Coastguard Worker# 50*de1e4e89SAndroid Build Coastguard Worker############################################################ 51*de1e4e89SAndroid Build Coastguard Worker# 52*de1e4e89SAndroid Build Coastguard Worker# anything with fw tag of 1 is passed on with a tcindex value 1 53*de1e4e89SAndroid Build Coastguard Worker#if it doesnt exceed its allocated rate (CIR/CBS) 54*de1e4e89SAndroid Build Coastguard Worker# 55*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 1 handle 1 fw \ 56*de1e4e89SAndroid Build Coastguard Worker$meter1 \ 57*de1e4e89SAndroid Build Coastguard Workercontinue flowid 4:1 58*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 2 handle 1 fw \ 59*de1e4e89SAndroid Build Coastguard Worker$meter1a \ 60*de1e4e89SAndroid Build Coastguard Workercontinue flowid 4:1 61*de1e4e89SAndroid Build Coastguard Worker# 62*de1e4e89SAndroid Build Coastguard Worker# if it exceeds the above but not the extra rate/burst below, it gets a 63*de1e4e89SAndroid Build Coastguard Worker#tcindex value of 2 64*de1e4e89SAndroid Build Coastguard Worker# 65*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 3 handle 1 fw \ 66*de1e4e89SAndroid Build Coastguard Worker$meter2 \ 67*de1e4e89SAndroid Build Coastguard Workercontinue flowid 4:2 68*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 4 handle 1 fw \ 69*de1e4e89SAndroid Build Coastguard Worker$meter2a \ 70*de1e4e89SAndroid Build Coastguard Workercontinue flowid 4:2 71*de1e4e89SAndroid Build Coastguard Worker# 72*de1e4e89SAndroid Build Coastguard Worker# if it exceeds the above but not the rule below, it gets a tcindex value 73*de1e4e89SAndroid Build Coastguard Worker# of 3 74*de1e4e89SAndroid Build Coastguard Worker# 75*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 5 handle 1 fw \ 76*de1e4e89SAndroid Build Coastguard Worker$meter3 \ 77*de1e4e89SAndroid Build Coastguard Workercontinue flowid 4:3 78*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 6 handle 1 fw \ 79*de1e4e89SAndroid Build Coastguard Worker$meter3a \ 80*de1e4e89SAndroid Build Coastguard Workerdrop flowid 4:3 81*de1e4e89SAndroid Build Coastguard Worker# 82*de1e4e89SAndroid Build Coastguard Worker# Anything else (not from the subnet 10.2.0.24/24) gets discarded if it 83*de1e4e89SAndroid Build Coastguard Worker# exceeds 1Mbps and by default goes to BE if it doesnt 84*de1e4e89SAndroid Build Coastguard Worker# 85*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 7 handle 2 fw \ 86*de1e4e89SAndroid Build Coastguard Worker$meter5 \ 87*de1e4e89SAndroid Build Coastguard Workerdrop flowid 4:4 88*de1e4e89SAndroid Build Coastguard Worker 89*de1e4e89SAndroid Build Coastguard Worker 90*de1e4e89SAndroid Build Coastguard Worker######################## Egress side ######################## 91*de1e4e89SAndroid Build Coastguard Worker 92*de1e4e89SAndroid Build Coastguard Worker 93*de1e4e89SAndroid Build Coastguard Worker# attach a dsmarker 94*de1e4e89SAndroid Build Coastguard Worker# 95*de1e4e89SAndroid Build Coastguard Worker$TC qdisc add $EGDEV handle 1:0 root dsmark indices 64 96*de1e4e89SAndroid Build Coastguard Worker# 97*de1e4e89SAndroid Build Coastguard Worker# values of the DSCP to change depending on the class 98*de1e4e89SAndroid Build Coastguard Worker#note that the ECN bits are masked out 99*de1e4e89SAndroid Build Coastguard Worker# 100*de1e4e89SAndroid Build Coastguard Worker#AF41 (0x88 is 0x22 shifted to the right by two bits) 101*de1e4e89SAndroid Build Coastguard Worker# 102*de1e4e89SAndroid Build Coastguard Worker$TC class change $EGDEV classid 1:1 dsmark mask 0x3 \ 103*de1e4e89SAndroid Build Coastguard Worker value 0x88 104*de1e4e89SAndroid Build Coastguard Worker#AF42 105*de1e4e89SAndroid Build Coastguard Worker$TC class change $EGDEV classid 1:2 dsmark mask 0x3 \ 106*de1e4e89SAndroid Build Coastguard Worker value 0x90 107*de1e4e89SAndroid Build Coastguard Worker#AF43 108*de1e4e89SAndroid Build Coastguard Worker$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \ 109*de1e4e89SAndroid Build Coastguard Worker value 0x98 110*de1e4e89SAndroid Build Coastguard Worker#BE 111*de1e4e89SAndroid Build Coastguard Worker$TC class change $EGDEV classid 1:4 dsmark mask 0x3 \ 112*de1e4e89SAndroid Build Coastguard Worker value 0x0 113*de1e4e89SAndroid Build Coastguard Worker# 114*de1e4e89SAndroid Build Coastguard Worker# 115*de1e4e89SAndroid Build Coastguard Worker# The class mapping (using tcindex; could easily have 116*de1e4e89SAndroid Build Coastguard Worker# replaced it with the fw classifier instead) 117*de1e4e89SAndroid Build Coastguard Worker# 118*de1e4e89SAndroid Build Coastguard Worker$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \ 119*de1e4e89SAndroid Build Coastguard Worker handle 1 tcindex classid 1:1 120*de1e4e89SAndroid Build Coastguard Worker$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \ 121*de1e4e89SAndroid Build Coastguard Worker handle 2 tcindex classid 1:2 122*de1e4e89SAndroid Build Coastguard Worker$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \ 123*de1e4e89SAndroid Build Coastguard Worker handle 3 tcindex classid 1:3 124*de1e4e89SAndroid Build Coastguard Worker$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \ 125*de1e4e89SAndroid Build Coastguard Worker handle 4 tcindex classid 1:4 126*de1e4e89SAndroid Build Coastguard Worker# 127*de1e4e89SAndroid Build Coastguard Worker 128*de1e4e89SAndroid Build Coastguard Worker# 129*de1e4e89SAndroid Build Coastguard Workerecho "---- qdisc parameters Ingress ----------" 130*de1e4e89SAndroid Build Coastguard Worker$TC qdisc ls dev $INDEV 131*de1e4e89SAndroid Build Coastguard Workerecho "---- Class parameters Ingress ----------" 132*de1e4e89SAndroid Build Coastguard Worker$TC class ls dev $INDEV 133*de1e4e89SAndroid Build Coastguard Workerecho "---- filter parameters Ingress ----------" 134*de1e4e89SAndroid Build Coastguard Worker$TC filter ls dev $INDEV parent ffff: 135*de1e4e89SAndroid Build Coastguard Worker 136*de1e4e89SAndroid Build Coastguard Workerecho "---- qdisc parameters Egress ----------" 137*de1e4e89SAndroid Build Coastguard Worker$TC qdisc ls $EGDEV 138*de1e4e89SAndroid Build Coastguard Workerecho "---- Class parameters Egress ----------" 139*de1e4e89SAndroid Build Coastguard Worker$TC class ls $EGDEV 140*de1e4e89SAndroid Build Coastguard Workerecho "---- filter parameters Egress ----------" 141*de1e4e89SAndroid Build Coastguard Worker$TC filter ls $EGDEV parent 1:0 142*de1e4e89SAndroid Build Coastguard Worker# 143*de1e4e89SAndroid Build Coastguard Worker#deleting the ingress qdisc 144*de1e4e89SAndroid Build Coastguard Worker#$TC qdisc del $INDEV ingress 145