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