xref: /aosp_15_r20/external/iproute2/examples/diffserv/afcbq (revision de1e4e894b0c224df933550f0afdecc354b238c4)
1*de1e4e89SAndroid Build Coastguard Worker#!/usr/bin/perl
2*de1e4e89SAndroid Build Coastguard Worker#
3*de1e4e89SAndroid Build Coastguard Worker#
4*de1e4e89SAndroid Build Coastguard Worker# AF using CBQ for a single interface eth0
5*de1e4e89SAndroid Build Coastguard Worker# 4 AF classes using GRED and one BE using RED
6*de1e4e89SAndroid Build Coastguard Worker# Things you might want to change:
7*de1e4e89SAndroid Build Coastguard Worker#	- the device bandwidth (set at 10Mbits)
8*de1e4e89SAndroid Build Coastguard Worker#	- the bandwidth allocated for each AF class and the BE class
9*de1e4e89SAndroid Build Coastguard Worker#	- the drop probability associated with each AF virtual queue
10*de1e4e89SAndroid Build Coastguard Worker#
11*de1e4e89SAndroid Build Coastguard Worker# AF DSCP values used (based on AF draft 04)
12*de1e4e89SAndroid Build Coastguard Worker# -----------------------------------------
13*de1e4e89SAndroid Build Coastguard Worker# AF DSCP values
14*de1e4e89SAndroid Build Coastguard Worker# AF1 1. 0x0a 2. 0x0c 3. 0x0e
15*de1e4e89SAndroid Build Coastguard Worker# AF2 1. 0x12 2. 0x14 3. 0x16
16*de1e4e89SAndroid Build Coastguard Worker# AF3 1. 0x1a 2. 0x1c 3. 0x1e
17*de1e4e89SAndroid Build Coastguard Worker# AF4 1. 0x22 2. 0x24 3. 0x26
18*de1e4e89SAndroid Build Coastguard Worker
19*de1e4e89SAndroid Build Coastguard Worker#
20*de1e4e89SAndroid Build Coastguard Worker#
21*de1e4e89SAndroid Build Coastguard Worker# A simple DSCP-class relationship formula used to generate
22*de1e4e89SAndroid Build Coastguard Worker# values in the for loop of this script; $drop stands for the
23*de1e4e89SAndroid Build Coastguard Worker# DP
24*de1e4e89SAndroid Build Coastguard Worker#	$dscp = ($class*8+$drop*2)
25*de1e4e89SAndroid Build Coastguard Worker#
26*de1e4e89SAndroid Build Coastguard Worker#  if you use GRIO buffer sharing, then GRED priority is set as follows:
27*de1e4e89SAndroid Build Coastguard Worker#  $gprio=$drop+1;
28*de1e4e89SAndroid Build Coastguard Worker#
29*de1e4e89SAndroid Build Coastguard Worker
30*de1e4e89SAndroid Build Coastguard Worker$TC = "/usr/src/iproute2-current/tc/tc";
31*de1e4e89SAndroid Build Coastguard Worker$DEV = "dev lo";
32*de1e4e89SAndroid Build Coastguard Worker$DEV = "dev eth1";
33*de1e4e89SAndroid Build Coastguard Worker$DEV = "dev eth0";
34*de1e4e89SAndroid Build Coastguard Worker# the BE-class number
35*de1e4e89SAndroid Build Coastguard Worker$beclass = "5";
36*de1e4e89SAndroid Build Coastguard Worker
37*de1e4e89SAndroid Build Coastguard Worker#GRIO buffer sharing on or off?
38*de1e4e89SAndroid Build Coastguard Worker$GRIO = "";
39*de1e4e89SAndroid Build Coastguard Worker$GRIO = "grio";
40*de1e4e89SAndroid Build Coastguard Worker# The bandwidth of your device
41*de1e4e89SAndroid Build Coastguard Worker$linerate="10Mbit";
42*de1e4e89SAndroid Build Coastguard Worker# The BE and AF rates
43*de1e4e89SAndroid Build Coastguard Worker%rate_table=();
44*de1e4e89SAndroid Build Coastguard Worker$berate="1500Kbit";
45*de1e4e89SAndroid Build Coastguard Worker$rate_table{"AF1rate"}="1500Kbit";
46*de1e4e89SAndroid Build Coastguard Worker$rate_table{"AF2rate"}="1500Kbit";
47*de1e4e89SAndroid Build Coastguard Worker$rate_table{"AF3rate"}="1500Kbit";
48*de1e4e89SAndroid Build Coastguard Worker$rate_table{"AF4rate"}="1500Kbit";
49*de1e4e89SAndroid Build Coastguard Worker#
50*de1e4e89SAndroid Build Coastguard Worker#
51*de1e4e89SAndroid Build Coastguard Worker#
52*de1e4e89SAndroid Build Coastguard Workerprint "\n# --- General setup  ---\n";
53*de1e4e89SAndroid Build Coastguard Workerprint "$TC qdisc add $DEV handle 1:0 root dsmark indices 64 set_tc_index\n";
54*de1e4e89SAndroid Build Coastguard Workerprint "$TC filter add $DEV parent 1:0 protocol ip prio 1 tcindex mask 0xfc " .
55*de1e4e89SAndroid Build Coastguard Worker   "shift 2 pass_on\n";
56*de1e4e89SAndroid Build Coastguard Worker   #"shift 2\n";
57*de1e4e89SAndroid Build Coastguard Workerprint "$TC qdisc add $DEV parent 1:0 handle 2:0 cbq bandwidth $linerate ".
58*de1e4e89SAndroid Build Coastguard Worker  "cell 8 avpkt 1000 mpu 64\n";
59*de1e4e89SAndroid Build Coastguard Workerprint "$TC filter add $DEV parent 2:0 protocol ip prio 1 tcindex ".
60*de1e4e89SAndroid Build Coastguard Worker  "mask 0xf0 shift 4 pass_on\n";
61*de1e4e89SAndroid Build Coastguard Workerfor $class (1..4) {
62*de1e4e89SAndroid Build Coastguard Worker    print "\n# --- AF Class $class specific setup---\n";
63*de1e4e89SAndroid Build Coastguard Worker    $AFrate=sprintf("AF%drate",$class);
64*de1e4e89SAndroid Build Coastguard Worker    print "$TC class add $DEV parent 2:0 classid 2:$class cbq ".
65*de1e4e89SAndroid Build Coastguard Worker      "bandwidth $linerate rate $rate_table{$AFrate} avpkt 1000 prio ".
66*de1e4e89SAndroid Build Coastguard Worker      (6-$class)." bounded allot 1514 weight 1 maxburst 21\n";
67*de1e4e89SAndroid Build Coastguard Worker    print "$TC filter add $DEV parent 2:0 protocol ip prio 1 handle $class ".
68*de1e4e89SAndroid Build Coastguard Worker      "tcindex classid 2:$class\n";
69*de1e4e89SAndroid Build Coastguard Worker    print "$TC qdisc add $DEV parent 2:$class gred setup DPs 3 default 2 ".
70*de1e4e89SAndroid Build Coastguard Worker      "$GRIO\n";
71*de1e4e89SAndroid Build Coastguard Worker#
72*de1e4e89SAndroid Build Coastguard Worker# per DP setup
73*de1e4e89SAndroid Build Coastguard Worker#
74*de1e4e89SAndroid Build Coastguard Worker    for $drop (1..3) {
75*de1e4e89SAndroid Build Coastguard Worker    print "\n# --- AF Class $class DP $drop---\n";
76*de1e4e89SAndroid Build Coastguard Worker	$dscp = $class*8+$drop*2;
77*de1e4e89SAndroid Build Coastguard Worker	$tcindex = sprintf("1%x%x",$class,$drop);
78*de1e4e89SAndroid Build Coastguard Worker	print "$TC filter add $DEV parent 1:0 protocol ip prio 1 ".
79*de1e4e89SAndroid Build Coastguard Worker	  "handle $dscp tcindex classid 1:$tcindex\n";
80*de1e4e89SAndroid Build Coastguard Worker	$prob = $drop*0.02;
81*de1e4e89SAndroid Build Coastguard Worker        if ($GRIO) {
82*de1e4e89SAndroid Build Coastguard Worker	$gprio = $drop+1;
83*de1e4e89SAndroid Build Coastguard Worker	print "$TC qdisc change $DEV parent 2:$class gred limit 60KB min 15KB ".
84*de1e4e89SAndroid Build Coastguard Worker	  "max 45KB burst 20 avpkt 1000 bandwidth $linerate DP $drop ".
85*de1e4e89SAndroid Build Coastguard Worker	  "probability $prob ".
86*de1e4e89SAndroid Build Coastguard Worker          "prio $gprio\n";
87*de1e4e89SAndroid Build Coastguard Worker        } else {
88*de1e4e89SAndroid Build Coastguard Worker	print "$TC qdisc change $DEV parent 2:$class gred limit 60KB min 15KB ".
89*de1e4e89SAndroid Build Coastguard Worker	  "max 45KB burst 20 avpkt 1000 bandwidth $linerate DP $drop ".
90*de1e4e89SAndroid Build Coastguard Worker	  "probability $prob \n";
91*de1e4e89SAndroid Build Coastguard Worker	}
92*de1e4e89SAndroid Build Coastguard Worker    }
93*de1e4e89SAndroid Build Coastguard Worker}
94*de1e4e89SAndroid Build Coastguard Worker#
95*de1e4e89SAndroid Build Coastguard Worker#
96*de1e4e89SAndroid Build Coastguard Workerprint "\n#------BE Queue setup------\n";
97*de1e4e89SAndroid Build Coastguard Workerprint "$TC filter add $DEV parent 1:0 protocol ip prio 2 ".
98*de1e4e89SAndroid Build Coastguard Worker          "handle 0 tcindex mask 0 classid 1:1\n";
99*de1e4e89SAndroid Build Coastguard Workerprint "$TC class add $DEV parent 2:0 classid 2:$beclass cbq ".
100*de1e4e89SAndroid Build Coastguard Worker      "bandwidth $linerate rate $berate avpkt 1000 prio 6 " .
101*de1e4e89SAndroid Build Coastguard Worker      "bounded allot 1514 weight 1 maxburst 21 \n";
102*de1e4e89SAndroid Build Coastguard Workerprint "$TC filter add $DEV parent 2:0 protocol ip prio 1 handle 0 tcindex ".
103*de1e4e89SAndroid Build Coastguard Worker  "classid 2:5\n";
104*de1e4e89SAndroid Build Coastguard Workerprint "$TC qdisc add $DEV parent 2:5 red limit 60KB min 15KB max 45KB ".
105*de1e4e89SAndroid Build Coastguard Worker  "burst 20 avpkt 1000 bandwidth $linerate probability 0.4\n";
106