90 lines
2.9 KiB
Text
90 lines
2.9 KiB
Text
|
#!/bin/sh
|
||
|
################################################################################
|
||
|
# test_WAN_triple-isolate__piece_of_cake.qos (Cero3 Shaper)
|
||
|
#
|
||
|
# Abstract:
|
||
|
# This is a one band cake and ipv6 enabled shaping script for Ethernet
|
||
|
# gateways. This exists for the purpose of testing cake's different isolation
|
||
|
# options, specifically the non-directional triple-isolate feature that promises
|
||
|
# to finally tackle the bit-torrent hole in simple.qos.
|
||
|
# This specific version is supposed to be used on WAN interfaces:
|
||
|
# the script's ingress direction equals the internet/WAN download direction
|
||
|
# the script's egress direction equals the internet/WAN upload direction
|
||
|
#
|
||
|
################################################################################
|
||
|
#
|
||
|
# 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-2016
|
||
|
# Michael D. Taht, Toke Høiland-Jørgensen, Sebastian Moeller
|
||
|
#
|
||
|
################################################################################
|
||
|
|
||
|
. ${SQM_LIB_DIR}/defaults.sh
|
||
|
|
||
|
################################################################################
|
||
|
|
||
|
|
||
|
# this will only work with cake as qdisc...
|
||
|
QDISC=cake
|
||
|
|
||
|
|
||
|
# to keep this as simple as possible we ignore the *_CAKE_OPTS from defaults.sh
|
||
|
INGRESS_CAKE_OPTS="besteffort triple-isolate"
|
||
|
EGRESS_CAKE_OPTS="besteffort triple-isolate"
|
||
|
|
||
|
|
||
|
egress() {
|
||
|
sqm_debug "egress"
|
||
|
$TC qdisc del dev $IFACE root 2>/dev/null
|
||
|
$TC qdisc add dev $IFACE root $( get_stab_string ) cake bandwidth ${UPLINK}kbit $( get_cake_lla_string ) ${EGRESS_CAKE_OPTS} ${EQDISC_OPTS}
|
||
|
}
|
||
|
|
||
|
|
||
|
ingress() {
|
||
|
sqm_debug "ingress"
|
||
|
$TC qdisc del dev $IFACE handle ffff: ingress 2>/dev/null
|
||
|
$TC qdisc add dev $IFACE handle ffff: ingress
|
||
|
$TC qdisc del dev $DEV root 2>/dev/null
|
||
|
$TC qdisc add dev $DEV root $( get_stab_string ) cake bandwidth ${DOWNLINK}kbit $( get_cake_lla_string ) ${INGRESS_CAKE_OPTS} ${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_start() {
|
||
|
[ -n "$IFACE" ] || return 1
|
||
|
do_modules
|
||
|
verify_qdisc $QDISC "cake" || return 1
|
||
|
sqm_debug "Starting ${SCRIPT}"
|
||
|
|
||
|
[ -z "$DEV" ] && DEV=$( get_ifb_for_if ${IFACE} )
|
||
|
|
||
|
|
||
|
if [ "${UPLINK}" -ne 0 ];
|
||
|
then
|
||
|
egress
|
||
|
sqm_debug "egress shaping activated"
|
||
|
else
|
||
|
sqm_debug "egress shaping deactivated"
|
||
|
$TC qdisc del dev ${IFACE} root 2> /dev/null
|
||
|
fi
|
||
|
if [ "${DOWNLINK}" -ne 0 ];
|
||
|
then
|
||
|
verify_qdisc ingress "ingress" || return 1
|
||
|
ingress
|
||
|
sqm_debug "ingress shaping activated"
|
||
|
else
|
||
|
sqm_debug "ingress shaping deactivated"
|
||
|
$TC qdisc del dev ${DEV} root 2> /dev/null
|
||
|
$TC qdisc del dev ${IFACE} ingress 2> /dev/null
|
||
|
fi
|
||
|
return 0
|
||
|
}
|