Merges George changes
[p2p-testing-infrastructure.git] / Utils / bw_limit.old.sh
1 #!/bin/bash
2 #
3 # Copyright: George Milescu 2010 - george.milescu@gmail.com
4 #
5 # references:
6 # * http://tldp.org/HOWTO/html_single/Traffic-Control-HOWTO/
7 # * http://lartc.org/howto/lartc.adv-filter.html#LARTC.ADV-FILTER.U32
8 # * http://www.topwebhosts.org/tools/traffic-control.php
9 # * http://atmail.com/kb/2009/throttling-bandwidth/
10 # * http://www.docstoc.com/docs/20252486/Manual-tc-Packet-Filtering-and-netem
11 #
12 # This script needs to be run on the vmware machine, to control the traffic between the openvz containers
13
14
15 if test $# -ne 1; then
16         echo "Usage: $0 set|del"
17         exit 1
18 fi
19
20 case "$1" in
21         "set")
22         # delete all tc on venet0
23         tc qdisc del dev venet0 root handle 1:0
24         
25         # add root(outgress) qdisc on venet0
26         tc qdisc add dev venet0 root handle 1:0 htb default 90
27         
28         # class for coord <-> seeders
29         tc class add dev venet0 parent 1:0 classid 1:1 htb rate 512kbit ceil 512kbit
30         tc class add dev venet0 parent 1:1 classid 1:10 htb rate 512kbit ceil 512kbit #coord <-> seeder1/2/3
31
32         # class for coord <-> helpers
33         tc class add dev venet0 parent 1:0 classid 1:2 htb rate 4096kbit ceil 4096kbit
34         tc class add dev venet0 parent 1:2 classid 1:20 htb rate 4096kbit ceil 4096kbit #coord <-> helper1/2
35
36         # class for helper1 <-> seeders
37         tc class add dev venet0 parent 1:0 classid 1:3 htb rate 8192kbit ceil 8192kbit
38         tc class add dev venet0 parent 1:3 classid 1:30 htb rate 8192kbit ceil 8192kbit #helper1 <-> seeder1/2/3
39         # class for helper2 <-> seeders
40         tc class add dev venet0 parent 1:0 classid 1:4 htb rate 8192kbit ceil 8192kbit
41         tc class add dev venet0 parent 1:4 classid 1:40 htb rate 8192kbit ceil 8192kbit #helper2 <-> seeder1/2/3
42
43         #tc qdisc add dev venet0 parent 1:10 handle 10: sfq perturb 10
44         #tc qdisc add dev venet0 parent 1:20 handle 20: sfq perturb 10
45         #tc qdisc add dev venet0 parent 1:30 handle 30: sfq perturb 10
46         #tc qdisc add dev venet0 parent 1:40 handle 40: sfq perturb 10
47
48         # Filters for coord <-> seeders
49         #coord <-> seeder1
50         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.2.1/32 match ip dst 10.10.5.1/32 flowid 1:10
51         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.5.1/32 match ip dst 10.10.2.1/32 flowid 1:10
52         #coord <-> seeder2
53         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.2.1/32 match ip dst 10.10.6.1/32 flowid 1:10
54         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.6.1/32 match ip dst 10.10.2.1/32 flowid 1:10 
55         #coord <-> seeder3
56         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.2.1/32 match ip dst 10.10.7.1/32 flowid 1:10
57         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.7.1/32 match ip dst 10.10.2.1/32 flowid 1:10
58         
59         # Filters for coord <-> helpers
60         #coord <-> helper1
61         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.2.1/32 match ip dst 10.10.3.1/32 flowid 1:20
62         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.3.1/32 match ip dst 10.10.2.1/32 flowid 1:20
63         #coord <-> helper2
64         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.2.1/32 match ip dst 10.10.4.1/32 flowid 1:20
65         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.4.1/32 match ip dst 10.10.2.1/32 flowid 1:20
66         
67         # Filters for helpers <-> seeders
68         #helper1 <-> seeder1
69         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.3.1/32 match ip dst 10.10.5.1/32 flowid 1:30
70         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.5.1/32 match ip dst 10.10.3.1/32 flowid 1:30
71         #helper1 <-> seeder2
72         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.3.1/32 match ip dst 10.10.6.1/32 flowid 1:30
73         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.6.1/32 match ip dst 10.10.3.1/32 flowid 1:30
74         #helper1 <-> seeder3
75         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.3.1/32 match ip dst 10.10.7.1/32 flowid 1:30
76         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.7.1/32 match ip dst 10.10.3.1/32 flowid 1:30
77         #helper2 <-> seeder1
78         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.4.1/32 match ip dst 10.10.5.1/32 flowid 1:40
79         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.5.1/32 match ip dst 10.10.4.1/32 flowid 1:40
80         #helper2 <-> seeder2
81         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.4.1/32 match ip dst 10.10.6.1/32 flowid 1:40
82         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.6.1/32 match ip dst 10.10.4.1/32 flowid 1:40
83         #helper2 <-> seeder3
84         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.4.1/32 match ip dst 10.10.7.1/32 flowid 1:40
85         tc filter add dev venet0 parent 1:0 protocol ip u32 match ip src 10.10.7.1/32 match ip dst 10.10.4.1/32 flowid 1:40
86         ;;
87
88         "del")
89         tc qdisc del dev venet0 root handle 1:
90         ;;
91
92         *)
93         echo "Usage: $0 set|del"
94         ;;
95 esac