summaryrefslogtreecommitdiffstats
path: root/shaper
diff options
context:
space:
mode:
authorRaghavendra D Prabhu <raghu.prabhu13@gmail.com>2011-03-13 00:24:47 +0530
committerRaghavendra D Prabhu <raghu.prabhu13@gmail.com>2011-03-13 00:24:47 +0530
commit5ec75ea891c9b44cdd2d7a3e0c29b4d08dff2b2a (patch)
treedeabb15393558ab3a1a629fc0782d8b0c3124c48 /shaper
downloadScripts-5ec75ea891c9b44cdd2d7a3e0c29b4d08dff2b2a.tar.gz
Scripts-5ec75ea891c9b44cdd2d7a3e0c29b4d08dff2b2a.tar.bz2
Scripts-5ec75ea891c9b44cdd2d7a3e0c29b4d08dff2b2a.zip
Initial scripts update
Diffstat (limited to 'shaper')
-rwxr-xr-xshaper77
1 files changed, 77 insertions, 0 deletions
diff --git a/shaper b/shaper
new file mode 100755
index 0000000..6600901
--- /dev/null
+++ b/shaper
@@ -0,0 +1,77 @@
+#!/bin/bash
+
+# The Ultimate Setup For Your Internet Connection At Home
+#
+#
+# Set the following values to somewhat less than your actual download
+# and uplink speed. In kilobits
+DOWNLINK=1920
+UPLINK=490
+DEV=eth0
+
+# clean existing down- and uplink qdiscs, hide errors
+tc qdisc del dev $DEV root 2> /dev/null > /dev/null
+tc qdisc del dev $DEV ingress 2> /dev/null > /dev/null
+
+###### uplink
+
+# install root HTB, point default traffic to 1:20:
+
+tc qdisc add dev $DEV root handle 1: htb default 20
+
+# shape everything at $UPLINK speed - this prevents huge queues in your
+# DSL modem which destroy latency:
+
+tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit burst 6k
+
+# high prio class 1:10:
+
+tc class add dev $DEV parent 1:1 classid 1:10 htb rate ${UPLINK}kbit \
+ burst 6k prio 1
+
+# bulk & default class 1:20 - gets slightly less traffic,
+# and a lower priority:
+
+tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[9*$UPLINK/10]kbit \
+ burst 6k prio 2
+
+# both get Stochastic Fairness:
+tc qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
+tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
+
+# TOS Minimum Delay (ssh, NOT scp) in 1:10:
+tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
+ match ip tos 0x10 0xff flowid 1:10
+
+# ICMP (ip protocol 1) in the interactive class 1:10 so we
+# can do measurements & impress our friends:
+tc filter add dev $DEV parent 1:0 protocol ip prio 10 u32 \
+ match ip protocol 1 0xff flowid 1:10
+
+# To speed up downloads while an upload is going on, put ACK packets in
+# the interactive class:
+
+tc filter add dev $DEV parent 1: protocol ip prio 10 u32 \
+ match ip protocol 6 0xff \
+ match u8 0x05 0x0f at 0 \
+ match u16 0x0000 0xffc0 at 2 \
+ match u8 0x10 0xff at 33 \
+ flowid 1:10
+
+# rest is 'non-interactive' ie 'bulk' and ends up in 1:20
+
+
+########## downlink #############
+# slow downloads down to somewhat less than the real speed to prevent
+# queuing at our ISP. Tune to see how high you can set it.
+# ISPs tend to have *huge* queues to make sure big downloads are fast
+#
+# attach ingress policer:
+
+tc qdisc add dev $DEV handle ffff: ingress
+
+# filter *everything* to it (0.0.0.0/0), drop everything that's
+# coming in too fast:
+
+tc filter add dev $DEV parent ffff: protocol ip prio 50 u32 match ip src \
+ 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1