Skip to content

Instantly share code, notes, and snippets.

@smyers119
Created December 28, 2019 15:02
Show Gist options
  • Save smyers119/ccaac822b998b260b4c4da5b464d61fc to your computer and use it in GitHub Desktop.
Save smyers119/ccaac822b998b260b4c4da5b464d61fc to your computer and use it in GitHub Desktop.
#!/bin/bash
### basic settings
WAN_INTF=wan0
WAN_UP_SPEED=5000000
WAN_DOWN_SPEED=100000000
### advanced settings
TQDISC=fq_codel
# Dave Taht's recommendation:
# less than 40mbit: 300
# otherwise: 1514
FQ_CODEL_QUANTUM_UP=300
FQ_CODEL_QUANTUM_DOWN=1514
# Dave Taht's recommendation:
# less than 3mbit: 15ms
# otherwise: 5ms
FQ_CODEL_TARGET_UP=5ms
FQ_CODEL_TARGET_DOWN=5ms
# Dave Taht's recommendation:
# less than 40mbit: 1500
# otherwise: higher (e.g., 8000 or higher for 100mbit etc.)
HTB_QUANTUM_UP=1500
HTB_QUANTUM_DOWN=8000
TQDISC_OPTS_UP=
TQDISC_OPTS_DOWN=
if [ "$TQDISC" == fq_codel ]; then
TQDISC_OPTS_UP+="quantum $FQ_CODEL_QUANTUM_UP "
TQDISC_OPTS_UP+="target $FQ_CODEL_TARGET_UP "
TQDISC_OPTS_DOWN+="quantum $FQ_CODEL_QUANTUM_DOWN "
TQDISC_OPTS_DOWN+="target $FQ_CODEL_TARGET_DOWN "
fi
WAN_IFB="ifb_${WAN_INTF}"
TC=/sbin/tc
IP=/bin/ip
$TC qdisc del dev $WAN_INTF root >/dev/null 2>&1
$TC qdisc del dev $WAN_INTF ingress >/dev/null 2>&1
$TC qdisc del dev $WAN_IFB root >/dev/null 2>&1
[ "$1" == clear ] && exit 0
$TC qdisc add dev $WAN_INTF root handle 1: htb default 10
$TC class add dev $WAN_INTF parent 1: classid 1:1 \
htb quantum $HTB_QUANTUM_UP \
rate $WAN_UP_SPEED ceil $WAN_UP_SPEED
$TC class add dev $WAN_INTF parent 1:1 classid 1:10 \
htb quantum $HTB_QUANTUM_UP \
rate $WAN_UP_SPEED ceil $WAN_UP_SPEED
$TC qdisc add dev $WAN_INTF parent 1:10 handle 100: $TQDISC $TQDISC_OPTS_UP
$IP link add $WAN_IFB type ifb >/dev/null 2>&1
$TC qdisc add dev $WAN_IFB root handle 1: htb default 10
$TC class add dev $WAN_IFB parent 1: classid 1:1 \
htb quantum $HTB_QUANTUM_DOWN \
rate $WAN_DOWN_SPEED ceil $WAN_DOWN_SPEED
$TC class add dev $WAN_IFB parent 1:1 classid 1:10 \
htb quantum $HTB_QUANTUM_DOWN \
rate $WAN_DOWN_SPEED ceil $WAN_DOWN_SPEED
$TC qdisc add dev $WAN_IFB parent 1:10 handle 100: $TQDISC $TQDISC_OPTS_DOWN
$IP link set $WAN_IFB up
$TC qdisc add dev $WAN_INTF handle ffff: ingress
$TC filter add dev $WAN_INTF parent ffff: \
protocol all prio 10 u32 match u32 0 0 flowid 1:1 \
action mirred egress redirect dev $WAN_IFB
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment