1*de1e4e89SAndroid Build Coastguard Workeriproute2+tc* 2*de1e4e89SAndroid Build Coastguard Worker 3*de1e4e89SAndroid Build Coastguard WorkerIt's the first release of Linux traffic control engine. 4*de1e4e89SAndroid Build Coastguard Worker 5*de1e4e89SAndroid Build Coastguard Worker 6*de1e4e89SAndroid Build Coastguard WorkerNOTES. 7*de1e4e89SAndroid Build Coastguard Worker* csz scheduler is inoperational at the moment, and probably 8*de1e4e89SAndroid Build Coastguard Worker never will be repaired but replaced with h-pfq scheduler. 9*de1e4e89SAndroid Build Coastguard Worker* To use "fw" classifier you will need ipfwchains patch. 10*de1e4e89SAndroid Build Coastguard Worker* No manual available. Ask me, if you have problems (only try to guess 11*de1e4e89SAndroid Build Coastguard Worker answer yourself at first 8)). 12*de1e4e89SAndroid Build Coastguard Worker 13*de1e4e89SAndroid Build Coastguard Worker 14*de1e4e89SAndroid Build Coastguard WorkerMicro-manual how to start it the first time 15*de1e4e89SAndroid Build Coastguard Worker------------------------------------------- 16*de1e4e89SAndroid Build Coastguard Worker 17*de1e4e89SAndroid Build Coastguard WorkerA. Attach CBQ to eth1: 18*de1e4e89SAndroid Build Coastguard Worker 19*de1e4e89SAndroid Build Coastguard Workertc qdisc add dev eth1 root handle 1: cbq bandwidth 10Mbit allot 1514 cell 8 \ 20*de1e4e89SAndroid Build Coastguard Workeravpkt 1000 mpu 64 21*de1e4e89SAndroid Build Coastguard Worker 22*de1e4e89SAndroid Build Coastguard WorkerB. Add root class: 23*de1e4e89SAndroid Build Coastguard Worker 24*de1e4e89SAndroid Build Coastguard Workertc class add dev eth1 parent 1:0 classid 1:1 cbq bandwidth 10Mbit rate 10Mbit \ 25*de1e4e89SAndroid Build Coastguard Workerallot 1514 cell 8 weight 1Mbit prio 8 maxburst 20 avpkt 1000 26*de1e4e89SAndroid Build Coastguard Worker 27*de1e4e89SAndroid Build Coastguard WorkerC. Add default interactive class: 28*de1e4e89SAndroid Build Coastguard Worker 29*de1e4e89SAndroid Build Coastguard Workertc class add dev eth1 parent 1:1 classid 1:2 cbq bandwidth 10Mbit rate 1Mbit \ 30*de1e4e89SAndroid Build Coastguard Workerallot 1514 cell 8 weight 100Kbit prio 3 maxburst 20 avpkt 1000 split 1:0 \ 31*de1e4e89SAndroid Build Coastguard Workerdefmap c0 32*de1e4e89SAndroid Build Coastguard Worker 33*de1e4e89SAndroid Build Coastguard WorkerD. Add default class: 34*de1e4e89SAndroid Build Coastguard Worker 35*de1e4e89SAndroid Build Coastguard Workertc class add dev eth1 parent 1:1 classid 1:3 cbq bandwidth 10Mbit rate 8Mbit \ 36*de1e4e89SAndroid Build Coastguard Workerallot 1514 cell 8 weight 800Kbit prio 7 maxburst 20 avpkt 1000 split 1:0 \ 37*de1e4e89SAndroid Build Coastguard Workerdefmap 3f 38*de1e4e89SAndroid Build Coastguard Worker 39*de1e4e89SAndroid Build Coastguard Workeretc. etc. etc. Well, it is enough to start 8) The rest can be guessed 8) 40*de1e4e89SAndroid Build Coastguard WorkerLook also at more elaborated example, ready to start rsvpd, 41*de1e4e89SAndroid Build Coastguard Workerin rsvp/cbqinit.eth1. 42*de1e4e89SAndroid Build Coastguard Worker 43*de1e4e89SAndroid Build Coastguard Worker 44*de1e4e89SAndroid Build Coastguard WorkerTerminology and advices about setting CBQ parameters may be found in Sally Floyd 45*de1e4e89SAndroid Build Coastguard Workerpapers. 46*de1e4e89SAndroid Build Coastguard Worker 47*de1e4e89SAndroid Build Coastguard Worker 48*de1e4e89SAndroid Build Coastguard WorkerPairs X:Y are class handles, X:0 are qdisc handles. 49*de1e4e89SAndroid Build Coastguard Workerweight should be proportional to rate for leaf classes 50*de1e4e89SAndroid Build Coastguard Worker(I choosed it ten times less, but it is not necessary) 51*de1e4e89SAndroid Build Coastguard Worker 52*de1e4e89SAndroid Build Coastguard Workerdefmap is bitmap of logical priorities served by this class. 53*de1e4e89SAndroid Build Coastguard Worker 54*de1e4e89SAndroid Build Coastguard WorkerE. Another qdiscs are simpler. F.e. let's join TBF on class 1:2 55*de1e4e89SAndroid Build Coastguard Worker 56*de1e4e89SAndroid Build Coastguard Workertc qdisc add dev eth1 parent 1:2 tbf rate 64Kbit buffer 5Kb/8 limit 10Kb 57*de1e4e89SAndroid Build Coastguard Worker 58*de1e4e89SAndroid Build Coastguard WorkerF. Look at all that we created: 59*de1e4e89SAndroid Build Coastguard Worker 60*de1e4e89SAndroid Build Coastguard Workertc qdisc ls dev eth1 61*de1e4e89SAndroid Build Coastguard Workertc class ls dev eth1 62*de1e4e89SAndroid Build Coastguard Worker 63*de1e4e89SAndroid Build Coastguard WorkerG. Install "route" classifier on root of cbq and map destination from realm 64*de1e4e89SAndroid Build Coastguard Worker1 to class 1:2 65*de1e4e89SAndroid Build Coastguard Worker 66*de1e4e89SAndroid Build Coastguard Workertc filter add dev eth1 parent 1:0 protocol ip prio 100 route to 1 classid 1:2 67*de1e4e89SAndroid Build Coastguard Worker 68*de1e4e89SAndroid Build Coastguard WorkerH. Assign routes to 10.11.12.0/24 to realm 1 69*de1e4e89SAndroid Build Coastguard Worker 70*de1e4e89SAndroid Build Coastguard Workerip route add 10.11.12.0/24 dev eth1 via whatever realm 1 71*de1e4e89SAndroid Build Coastguard Worker 72*de1e4e89SAndroid Build Coastguard Workeretc. The same thing can be made with rules. 73*de1e4e89SAndroid Build Coastguard WorkerI still did not test ipchains, but they should work too. 74*de1e4e89SAndroid Build Coastguard Worker 75*de1e4e89SAndroid Build Coastguard Worker 76*de1e4e89SAndroid Build Coastguard WorkerSetup and code example of BPF classifier and action can be found under 77*de1e4e89SAndroid Build Coastguard Workerexamples/bpf/, which should explain everything for getting started. 78*de1e4e89SAndroid Build Coastguard Worker 79*de1e4e89SAndroid Build Coastguard Worker 80*de1e4e89SAndroid Build Coastguard WorkerSetup of rsvp and u32 classifiers is more hairy. 81*de1e4e89SAndroid Build Coastguard WorkerIf you read RSVP specs, you will understand how rsvp classifier 82*de1e4e89SAndroid Build Coastguard Workerworks easily. What's about u32... That's example: 83*de1e4e89SAndroid Build Coastguard Worker 84*de1e4e89SAndroid Build Coastguard Worker 85*de1e4e89SAndroid Build Coastguard Worker#! /bin/sh 86*de1e4e89SAndroid Build Coastguard Worker 87*de1e4e89SAndroid Build Coastguard WorkerTC=/home/root/tc 88*de1e4e89SAndroid Build Coastguard Worker 89*de1e4e89SAndroid Build Coastguard Worker# Setup classifier root on eth1 root (it is cbq) 90*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev eth1 parent 1:0 prio 5 protocol ip u32 91*de1e4e89SAndroid Build Coastguard Worker 92*de1e4e89SAndroid Build Coastguard Worker# Create hash table of 256 slots with ID 1: 93*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev eth1 parent 1:0 prio 5 handle 1: u32 divisor 256 94*de1e4e89SAndroid Build Coastguard Worker 95*de1e4e89SAndroid Build Coastguard Worker# Add to 6th slot of hash table rule to select tcp/telnet to 193.233.7.75 96*de1e4e89SAndroid Build Coastguard Worker# direct it to class 1:4 and prescribe to fall to best effort, 97*de1e4e89SAndroid Build Coastguard Worker# if traffic violate TBF (32kbit,5K) 98*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev eth1 parent 1:0 prio 5 u32 ht 1:6: \ 99*de1e4e89SAndroid Build Coastguard Worker match ip dst 193.233.7.75 \ 100*de1e4e89SAndroid Build Coastguard Worker match tcp dst 0x17 0xffff \ 101*de1e4e89SAndroid Build Coastguard Worker flowid 1:4 \ 102*de1e4e89SAndroid Build Coastguard Worker police rate 32kbit buffer 5kb/8 mpu 64 mtu 1514 index 1 103*de1e4e89SAndroid Build Coastguard Worker 104*de1e4e89SAndroid Build Coastguard Worker# Add to 1th slot of hash table rule to select icmp to 193.233.7.75 105*de1e4e89SAndroid Build Coastguard Worker# direct it to class 1:4 and prescribe to fall to best effort, 106*de1e4e89SAndroid Build Coastguard Worker# if traffic violate TBF (10kbit,5K) 107*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev eth1 parent 1:0 prio 5 u32 ht 1:: \ 108*de1e4e89SAndroid Build Coastguard Worker sample ip protocol 1 0xff \ 109*de1e4e89SAndroid Build Coastguard Worker match ip dst 193.233.7.75 \ 110*de1e4e89SAndroid Build Coastguard Worker flowid 1:4 \ 111*de1e4e89SAndroid Build Coastguard Worker police rate 10kbit buffer 5kb/8 mpu 64 mtu 1514 index 2 112*de1e4e89SAndroid Build Coastguard Worker 113*de1e4e89SAndroid Build Coastguard Worker# Lookup hash table, if it is not fragmented frame 114*de1e4e89SAndroid Build Coastguard Worker# Use protocol as hash key 115*de1e4e89SAndroid Build Coastguard Worker$TC filter add dev eth1 parent 1:0 prio 5 handle ::1 u32 ht 800:: \ 116*de1e4e89SAndroid Build Coastguard Worker match ip nofrag \ 117*de1e4e89SAndroid Build Coastguard Worker offset mask 0x0F00 shift 6 \ 118*de1e4e89SAndroid Build Coastguard Worker hashkey mask 0x00ff0000 at 8 \ 119*de1e4e89SAndroid Build Coastguard Worker link 1: 120*de1e4e89SAndroid Build Coastguard Worker 121*de1e4e89SAndroid Build Coastguard Worker 122*de1e4e89SAndroid Build Coastguard WorkerAlexey Kuznetsov 123*de1e4e89SAndroid Build Coastguard Worker[email protected] 124