3 # A 1 bin tc_codel and ipv6 enabled shaping script for
4 # ethernet gateways. This is nearly the simplest possible
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.
10 # Copyright (C) 2012-4 Michael D. Taht, Toke Høiland-Jørgensen, Sebastian Moeller
12 .
/usr
/lib
/sqm
/functions.sh
13 sqm_logger
"Starting simplest.qos"
17 LQ
="quantum `get_mtu $IFACE ${UPLINK}`"
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}
30 $TC qdisc del dev $IFACE handle ffff: ingress 2>/dev/null
31 $TC qdisc add dev $IFACE handle ffff: ingress
33 LQ="quantum `get_mtu
$IFACE ${DOWNLINK}`"
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
`
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
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}
49 # redirect all IP packets arriving in $IFACE to ifb0
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
58 if [ "$UPLINK" -ne 0 ];
61 sqm_logger
"egress shaping activated"
63 sqm_logger
"egress shaping deactivated"
64 tc qdisc del dev
$IFACE root
2> /dev
/null
66 if [ "$DOWNLINK" -ne 0 ];
69 sqm_logger
"ingress shaping activated"
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
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
82 # This does the right thing with ipv6 traffic.