sqm-scripts-extra: additional experimental test scripts for SQM
Introduce package for additional experimental scripts for sqm-scripts. The target is to provide an opportunity to test QoS scripts and qdiscs still under development. E.g. cake related scripts can be placed here for testing. sqm-scripts and luci-app-sqm will pick up the new scripts automatically. Initially the package contains five cake-related scripts. The package depends on the main sqm-scripts package. Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
This commit is contained in:
parent
4288540e49
commit
4b0e0a378a
11 changed files with 558 additions and 0 deletions
47
net/sqm-scripts-extra/Makefile
Normal file
47
net/sqm-scripts-extra/Makefile
Normal file
|
@ -0,0 +1,47 @@
|
|||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=sqm-scripts-extra
|
||||
PKG_VERSION:=2016-06-08
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPLv2
|
||||
|
||||
PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE).tar.xz
|
||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)-$(PKG_RELEASE)
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define Package/sqm-scripts-extra
|
||||
SECTION:=net
|
||||
CATEGORY:=Base system
|
||||
DEPENDS:=+sqm-scripts
|
||||
TITLE:=SQM Scripts - additional experimental scripts for testing
|
||||
PKGARCH:=all
|
||||
MAINTAINER:=Kevin Darbyshire-Bryant <kevin@darbyshire-bryant.me.uk>, \
|
||||
Sebastian Moeller <moeller0@gmx.de>
|
||||
endef
|
||||
|
||||
define Package/sqm-scripts-extra/description
|
||||
A set of experimental scripts for sqm-scripts QoS package. The contents of this package may
|
||||
change as new qdiscs like 'cake' are developed and tested.
|
||||
endef
|
||||
|
||||
define Package/sqm-scripts-extra/download
|
||||
endef
|
||||
|
||||
define Build/Prepare
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
endef
|
||||
|
||||
define Package/sqm-scripts-extra/install
|
||||
$(INSTALL_DIR) $(1)/usr/lib/sqm
|
||||
$(INSTALL_DATA) ./src/* $(1)/usr/lib/sqm/
|
||||
endef
|
||||
|
||||
$(eval $(call BuildPackage,sqm-scripts-extra))
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
#!/bin/sh
|
||||
################################################################################
|
||||
# test_LAN_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 LAN interfaces:
|
||||
# the script's ingress direction equals the internet/WAN upload direction
|
||||
# the script's egress direction equals the internet/WAN download direction
|
||||
#
|
||||
# NOTE: Shaping on a LAN interface only affects machines connected via that
|
||||
# LAN interface, so typically WIFI/WLAN traffic will not be shaped!
|
||||
#
|
||||
################################################################################
|
||||
#
|
||||
# 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 dual-srchost"
|
||||
EGRESS_CAKE_OPTS="besteffort dual-dsthost"
|
||||
|
||||
|
||||
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() {
|
||||
|
||||
#sm: flip upload and download bandwith so that the GUI values reflect directionality in regard to the ISP
|
||||
#sm: NOTE this is ugly and should be performed in defaults.sh or functions.sh if at all
|
||||
#sm: but for quick and dirty testing this should do
|
||||
local ORIG_UPLINK=${UPLINK}
|
||||
local ORIG_DOWNLINK=${DOWNLINK}
|
||||
UPLINK=${ORIG_DOWNLINK}
|
||||
DOWNLINK=${ORIG_UPLINK}
|
||||
|
||||
|
||||
[ -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
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
test_LAN_dual-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 dual-[src|dst]host feature that promises to finally
|
||||
tackle the bit-torrent hole in simple.qos.
|
||||
This specific version is supposed to be used on LAN interfaces:
|
||||
the script's ingress direction equals the internet/WAN upload direction
|
||||
the script's egress direction equals the internet/WAN download direction
|
||||
NOTE: Shaping on a LAN interface only affects machines connected via that
|
||||
LAN interface, so typically WIFI/WLAN traffic will not be shaped!
|
|
@ -0,0 +1,102 @@
|
|||
#!/bin/sh
|
||||
################################################################################
|
||||
# test_LAN_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 LAN interfaces:
|
||||
# the script's ingress direction equals the internet/WAN upload direction
|
||||
# the script's egress direction equals the internet/WAN download direction
|
||||
#
|
||||
# NOTE: Shaping on a LAN interface only affects machines connected via that
|
||||
# LAN interface, so typically WIFI/WLAN traffic will not be shaped!
|
||||
#
|
||||
################################################################################
|
||||
#
|
||||
# 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() {
|
||||
|
||||
#sm: flip upload and download bandwith so that the GUI values reflect directionality in regard to the ISP
|
||||
#sm: NOTE this is ugly and should be performed in defaults.sh or functions.sh if at all
|
||||
#sm: but for quick and dirty testing this should do
|
||||
local ORIG_UPLINK=${UPLINK}
|
||||
local ORIG_DOWNLINK=${DOWNLINK}
|
||||
UPLINK=${ORIG_DOWNLINK}
|
||||
DOWNLINK=${ORIG_UPLINK}
|
||||
|
||||
|
||||
[ -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
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
test_LAN_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 LAN interfaces:
|
||||
the script's ingress direction equals the internet/WAN upload direction
|
||||
the script's egress direction equals the internet/WAN download direction
|
||||
NOTE: Shaping on a LAN interface only affects machines connected via that
|
||||
LAN interface, so typically WIFI/WLAN traffic will not be shaped!
|
|
@ -0,0 +1,89 @@
|
|||
#!/bin/sh
|
||||
################################################################################
|
||||
# test_WAN_dual-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 directional dual-[src|dst]host 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 dual-dsthost"
|
||||
EGRESS_CAKE_OPTS="besteffort dual-srchost"
|
||||
|
||||
|
||||
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
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
test_WAN_dual-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 directional dual-[src|dst]host 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
|
|
@ -0,0 +1,89 @@
|
|||
#!/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
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
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
|
82
net/sqm-scripts-extra/src/test_triple_isolated_llt_cake.qos
Normal file
82
net/sqm-scripts-extra/src/test_triple_isolated_llt_cake.qos
Normal file
|
@ -0,0 +1,82 @@
|
|||
#!/bin/sh
|
||||
################################################################################
|
||||
# test_triple_isolated_llt_cake.qos
|
||||
# One bin cake shaper for ethernet gateways
|
||||
# using cake qdisc with triple-isolate and diffserv-llt (Latency-Loss-Tradeoff)
|
||||
#
|
||||
################################################################################
|
||||
#
|
||||
# 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="diffserv-llt triple-isolate"
|
||||
EGRESS_CAKE_OPTS="diffserv-llt 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
|
||||
}
|
|
@ -0,0 +1,3 @@
|
|||
Cake qdisc with triple-isolate and diffserv-llt (Latency-Loss-Tradeoff)
|
||||
options as the shaper and fq_codel as leaf qdisc. This script requires
|
||||
that cake is selected as qdisc.
|
Loading…
Reference in a new issue