Merge pull request #840 from cjkoenig/update_liburcu
[feed/packages.git] / net / sqm-scripts / files / usr / lib / sqm / simplest.qos
1 #!/bin/sh
2 # Cero3 Simple Shaper
3 # A 1 bin tc_codel and ipv6 enabled shaping script for
4 # ethernet gateways. This is nearly the simplest possible
5
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License version 2 as
8 # published by the Free Software Foundation.
9 #
10 # Copyright (C) 2012-4 Michael D. Taht, Toke Høiland-Jørgensen, Sebastian Moeller
11
12 . /usr/lib/sqm/functions.sh
13 sqm_logger "Starting simplest.qos"
14
15 egress() {
16
17 LQ="quantum `get_mtu $IFACE ${UPLINK}`"
18
19 $TC qdisc del dev $IFACE root 2>/dev/null
20 $TC qdisc add dev $IFACE root handle 1: `get_stab_string` htb default 10
21 $TC class add dev $IFACE parent 1: classid 1:1 htb $LQ rate ${UPLINK}kbit ceil ${UPLINK}kbit `get_htb_adsll_string`
22 $TC class add dev $IFACE parent 1:1 classid 1:10 htb $LQ rate ${UPLINK}kbit ceil ${UPLINK}kbit prio 0 `get_htb_adsll_string`
23 $TC qdisc add dev $IFACE parent 1:10 handle 110: $QDISC `get_limit ${ELIMIT}` `get_target "${ETARGET}" ${UPLINK}` `get_ecn ${EECN}` `get_flows ${UPLINK}` ${EQDISC_OPTS}
24
25 }
26
27
28 ingress() {
29 sqm_logger "ingress"
30 $TC qdisc del dev $IFACE handle ffff: ingress 2>/dev/null
31 $TC qdisc add dev $IFACE handle ffff: ingress
32
33 LQ="quantum `get_mtu $IFACE ${DOWNLINK}`"
34
35 $TC qdisc del dev $DEV root 2>/dev/null
36 $TC qdisc add dev $DEV root handle 1: `get_stab_string` htb default 10
37 $TC class add dev $DEV parent 1: classid 1:1 htb $LQ rate ${DOWNLINK}kbit ceil ${DOWNLINK}kbit `get_htb_adsll_string`
38 $TC class add dev $DEV parent 1:1 classid 1:10 htb $LQ rate ${DOWNLINK}kbit ceil ${DOWNLINK}kbit prio 0 `get_htb_adsll_string`
39
40 # FIXME: I'd prefer to use a pre-nat filter but we need to detect if nat is on this interface
41 # AND we need to permute by a random number which we can't do from userspace filters
42
43 # Most high rate flows are REALLY close. This stomps on those harder, but hurts on high rate long distance
44 #$TC qdisc add dev $DEV parent 1:10 handle 110: $QDISC limit $LIMIT $ECN interval 20ms target 3ms `get_flows ${DOWNLINK}`
45 $TC qdisc add dev $DEV parent 1:10 handle 110: $QDISC `get_limit ${ILIMIT}` `get_target "${ITARGET}" ${DOWNLINK}` `get_ecn ${IECN}` `get_flows ${DOWNLINK}` ${IQDISC_OPTS}
46
47 ifconfig $DEV up
48
49 # redirect all IP packets arriving in $IFACE to ifb0
50
51 $TC filter add dev $IFACE parent ffff: protocol all prio 10 u32 \
52 match u32 0 0 flowid 1:1 action mirred egress redirect dev $DEV
53
54 }
55
56 do_modules
57
58 if [ "$UPLINK" -ne 0 ];
59 then
60 egress
61 sqm_logger "egress shaping activated"
62 else
63 sqm_logger "egress shaping deactivated"
64 tc qdisc del dev $IFACE root 2> /dev/null
65 fi
66 if [ "$DOWNLINK" -ne 0 ];
67 then
68 ingress
69 sqm_logger "ingress shaping activated"
70 else
71 sqm_logger "ingress shaping deactivated"
72 tc qdisc del dev $DEV root 2> /dev/null
73 tc qdisc del dev $IFACE ingress 2> /dev/null
74 fi
75
76
77 # References:
78 # This alternate shaper attempts to go for 1/u performance in a clever way
79 # http://git.coverfire.com/?p=linux-qos-scripts.git;a=blob;f=src-3tos.sh;hb=HEAD
80
81 # Comments
82 # This does the right thing with ipv6 traffic.
83 # Flaws
84 # Many!