xref: /aosp_15_r20/external/iproute2/README.iproute2+tc (revision de1e4e894b0c224df933550f0afdecc354b238c4)
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