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=1000kbit 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 Workermeter2="police rate $CIR1 burst $CBS2 " 28*de1e4e89SAndroid Build Coastguard Workermeter3="police rate $CIR2 burst $CBS1 " 29*de1e4e89SAndroid Build Coastguard Workermeter4="police rate $CIR2 burst $CBS2 " 30*de1e4e89SAndroid Build Coastguard Workermeter5="police rate $CIR2 burst $CBS2 " 31*de1e4e89SAndroid Build Coastguard Worker# 32*de1e4e89SAndroid Build Coastguard Worker# tag the rest of incoming packets from subnet 10.2.0.0/24 to fw value 1 33*de1e4e89SAndroid Build Coastguard Worker# tag all incoming packets from any other subnet to fw tag 2 34*de1e4e89SAndroid Build Coastguard Worker############################################################ 35*de1e4e89SAndroid Build Coastguard Worker$IPCHAINS -A input -i $INDEV -s 0/0 -m 2 36*de1e4e89SAndroid Build Coastguard Worker$IPCHAINS -A input -i $INDEV -s 10.2.0.0/24 -m 1 37*de1e4e89SAndroid Build Coastguard Worker# 38*de1e4e89SAndroid Build Coastguard Worker############################################################ 39*de1e4e89SAndroid Build Coastguard Worker# install the ingress qdisc on the ingress interface 40*de1e4e89SAndroid Build Coastguard Worker$TC qdisc add dev $INDEV handle ffff: ingress 41*de1e4e89SAndroid Build Coastguard Worker# 42*de1e4e89SAndroid Build Coastguard Worker############################################################ 43*de1e4e89SAndroid Build Coastguard Worker 44*de1e4e89SAndroid Build Coastguard Worker# All packets are marked with a tcindex value which is used on the egress 45*de1e4e89SAndroid Build Coastguard Worker# tcindex 1 maps to AF41, 2->AF42, 3->AF43, 4->BE 46*de1e4e89SAndroid Build Coastguard Worker# 47*de1e4e89SAndroid Build Coastguard Worker############################################################ 48*de1e4e89SAndroid Build Coastguard Worker# 49*de1e4e89SAndroid Build Coastguard Worker# anything with fw tag of 1 is passed on with a tcindex value 1 50*de1e4e89SAndroid Build Coastguard Worker#if it doesnt exceed its allocated rate (CIR/CBS) 51*de1e4e89SAndroid Build Coastguard Worker# 52*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 4 handle 1 fw \ 53*de1e4e89SAndroid Build Coastguard Worker$meter1 \ 54*de1e4e89SAndroid Build Coastguard Workercontinue flowid 4:1 55*de1e4e89SAndroid Build Coastguard Worker# 56*de1e4e89SAndroid Build Coastguard Worker# if it exceeds the above but not the extra rate/burst below, it gets a 57*de1e4e89SAndroid Build Coastguard Worker#tcindex value of 2 58*de1e4e89SAndroid Build Coastguard Worker# 59*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 5 handle 1 fw \ 60*de1e4e89SAndroid Build Coastguard Worker$meter2 \ 61*de1e4e89SAndroid Build Coastguard Workercontinue flowid 4:2 62*de1e4e89SAndroid Build Coastguard Worker# 63*de1e4e89SAndroid Build Coastguard Worker# if it exceeds the above but not the rule below, it gets a tcindex value 64*de1e4e89SAndroid Build Coastguard Worker# of 3 65*de1e4e89SAndroid Build Coastguard Worker# 66*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 6 handle 1 fw \ 67*de1e4e89SAndroid Build Coastguard Worker$meter3 \ 68*de1e4e89SAndroid Build Coastguard Workerdrop flowid 4:3 69*de1e4e89SAndroid Build Coastguard Worker# 70*de1e4e89SAndroid Build Coastguard Worker# Anything else (not from the subnet 10.2.0.24/24) gets discarded if it 71*de1e4e89SAndroid Build Coastguard Worker# exceeds 1Mbps and by default goes to BE if it doesnt 72*de1e4e89SAndroid Build Coastguard Worker# 73*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev $INDEV parent ffff: protocol ip prio 6 handle 2 fw \ 74*de1e4e89SAndroid Build Coastguard Worker$meter5 \ 75*de1e4e89SAndroid Build Coastguard Workerdrop flowid 4:4 76*de1e4e89SAndroid Build Coastguard Worker 77*de1e4e89SAndroid Build Coastguard Worker 78*de1e4e89SAndroid Build Coastguard Worker######################## Egress side ######################## 79*de1e4e89SAndroid Build Coastguard Worker 80*de1e4e89SAndroid Build Coastguard Worker 81*de1e4e89SAndroid Build Coastguard Worker# attach a dsmarker 82*de1e4e89SAndroid Build Coastguard Worker# 83*de1e4e89SAndroid Build Coastguard Worker$TC qdisc add $EGDEV handle 1:0 root dsmark indices 64 84*de1e4e89SAndroid Build Coastguard Worker# 85*de1e4e89SAndroid Build Coastguard Worker# values of the DSCP to change depending on the class 86*de1e4e89SAndroid Build Coastguard Worker#note that the ECN bits are masked out 87*de1e4e89SAndroid Build Coastguard Worker# 88*de1e4e89SAndroid Build Coastguard Worker#AF41 (0x88 is 0x22 shifted to the right by two bits) 89*de1e4e89SAndroid Build Coastguard Worker# 90*de1e4e89SAndroid Build Coastguard Worker$TC class change $EGDEV classid 1:1 dsmark mask 0x3 \ 91*de1e4e89SAndroid Build Coastguard Worker value 0x88 92*de1e4e89SAndroid Build Coastguard Worker#AF42 93*de1e4e89SAndroid Build Coastguard Worker$TC class change $EGDEV classid 1:2 dsmark mask 0x3 \ 94*de1e4e89SAndroid Build Coastguard Worker value 0x90 95*de1e4e89SAndroid Build Coastguard Worker#AF43 96*de1e4e89SAndroid Build Coastguard Worker$TC class change $EGDEV classid 1:3 dsmark mask 0x3 \ 97*de1e4e89SAndroid Build Coastguard Worker value 0x98 98*de1e4e89SAndroid Build Coastguard Worker#BE 99*de1e4e89SAndroid Build Coastguard Worker$TC class change $EGDEV classid 1:4 dsmark mask 0x3 \ 100*de1e4e89SAndroid Build Coastguard Worker value 0x0 101*de1e4e89SAndroid Build Coastguard Worker# 102*de1e4e89SAndroid Build Coastguard Worker# 103*de1e4e89SAndroid Build Coastguard Worker# The class mapping (using tcindex; could easily have 104*de1e4e89SAndroid Build Coastguard Worker# replaced it with the fw classifier instead) 105*de1e4e89SAndroid Build Coastguard Worker# 106*de1e4e89SAndroid Build Coastguard Worker$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \ 107*de1e4e89SAndroid Build Coastguard Worker handle 1 tcindex classid 1:1 108*de1e4e89SAndroid Build Coastguard Worker$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \ 109*de1e4e89SAndroid Build Coastguard Worker handle 2 tcindex classid 1:2 110*de1e4e89SAndroid Build Coastguard Worker$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \ 111*de1e4e89SAndroid Build Coastguard Worker handle 3 tcindex classid 1:3 112*de1e4e89SAndroid Build Coastguard Worker$TC filter add $EGDEV parent 1:0 protocol ip prio 1 \ 113*de1e4e89SAndroid Build Coastguard Worker handle 4 tcindex classid 1:4 114*de1e4e89SAndroid Build Coastguard Worker# 115*de1e4e89SAndroid Build Coastguard Worker 116*de1e4e89SAndroid Build Coastguard Worker# 117*de1e4e89SAndroid Build Coastguard Workerecho "---- qdisc parameters Ingress ----------" 118*de1e4e89SAndroid Build Coastguard Worker$TC qdisc ls dev $INDEV 119*de1e4e89SAndroid Build Coastguard Workerecho "---- Class parameters Ingress ----------" 120*de1e4e89SAndroid Build Coastguard Worker$TC class ls dev $INDEV 121*de1e4e89SAndroid Build Coastguard Workerecho "---- filter parameters Ingress ----------" 122*de1e4e89SAndroid Build Coastguard Worker$TC filter ls dev $INDEV parent ffff: 123*de1e4e89SAndroid Build Coastguard Worker 124*de1e4e89SAndroid Build Coastguard Workerecho "---- qdisc parameters Egress ----------" 125*de1e4e89SAndroid Build Coastguard Worker$TC qdisc ls $EGDEV 126*de1e4e89SAndroid Build Coastguard Workerecho "---- Class parameters Egress ----------" 127*de1e4e89SAndroid Build Coastguard Worker$TC class ls $EGDEV 128*de1e4e89SAndroid Build Coastguard Workerecho "---- filter parameters Egress ----------" 129*de1e4e89SAndroid Build Coastguard Worker$TC filter ls $EGDEV parent 1:0 130*de1e4e89SAndroid Build Coastguard Worker# 131*de1e4e89SAndroid Build Coastguard Worker#deleting the ingress qdisc 132*de1e4e89SAndroid Build Coastguard Worker#$TC qdisc del $INDEV ingress 133