#!/bin/sh ################################################################################ # simplest_tbf.qos (Simple TBF shaper) # # Abstract: # This is a single band fq_codel and ipv6 enabled shaping script for Ethernet # gateways. This is nearly the simplest possible. With FQ_CODEL, the sparseness # priority will work pretty well for a casual network. Flow-hashes should not # overlap much with only a few users. # # Uses TBF instead of HTB as that may give better performance on some # architectures. # # References: # This alternate shaper attempts to go for 1/u performance in a clever way # http://git.coverfire.com/?p=linux-qos-scripts.git;a=blob;f=src-3tos.sh;hb=HEAD # ################################################################################ # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License version 2 as # published by the Free Software Foundation. # # Copyright (C) 2012-2017 # Michael D. Taht, Toke Høiland-Jørgensen, Sebastian Moeller # ################################################################################ . ${SQM_LIB_DIR}/defaults.sh ################################################################################ egress() { MTU=$(get_mtu $IFACE) BURST="$(get_burst ${MTU:-1514} ${UPLINK} ${ESHAPER_BURST_DUR_US})" BURST=${BURST:-1514} SILENT=1 $TC qdisc del dev $IFACE root $TC qdisc add dev $IFACE root handle 1: $(get_stab_string) tbf \ rate ${UPLINK}kbit burst $BURST latency 300ms $(get_htb_adsll_string) $TC qdisc add dev $IFACE parent 1: handle 110: $QDISC \ $(get_limit ${ELIMIT}) $(get_target "${ETARGET}" ${UPLINK}) \ $(get_ecn ${EECN}) $(get_flows ${UPLINK}) ${EQDISC_OPTS} } ingress() { sqm_debug "ingress" SILENT=1 $TC qdisc del dev $IFACE handle ffff: ingress $TC qdisc add dev $IFACE handle ffff: ingress MTU=$(get_mtu $IFACE) BURST="$(get_burst ${MTU:-1514} ${DOWNLINK} ${ISHAPER_BURST_DUR_US})" BURST=${BURST:-1514} SILENT=1 $TC qdisc del dev $DEV root $TC qdisc add dev $DEV root handle 1: $(get_stab_string) tbf \ rate ${DOWNLINK}kbit burst $BURST latency 300ms $(get_htb_adsll_string) $TC qdisc add dev $DEV parent 1: handle 110: $QDISC \ $(get_limit ${ILIMIT}) $(get_target "${ITARGET}" ${DOWNLINK}) \ $(get_ecn ${IECN}) $(get_flows ${DOWNLINK}) ${IQDISC_OPTS} $IP link set dev $DEV up # redirect all IP packets arriving in $IFACE to ifb0 $TC filter add dev $IFACE parent ffff: protocol all prio 10 u32 \ match u32 0 0 flowid 1:1 action mirred egress redirect dev $DEV } sqm_prepare_script() { do_modules verify_qdisc "tbf" || return 1 case $QDISC in cake*) sqm_warn "Cake is not supported with this script; falling back to FQ-CoDel" QDISC=fq_codel ;; esac } ################################################################################