sqm-scripts: backport from trunk "Teach SQM hotplug tricks"
Backport from trunk the commit that adds support for hotplug action.
5b61cfba07
Signed-off-by: Hannu Nyman <hannu.nyman@iki.fi>
This commit is contained in:
parent
bafecb73ad
commit
17b6911cde
4 changed files with 42 additions and 4 deletions
|
@ -8,8 +8,8 @@
|
|||
include $(TOPDIR)/rules.mk
|
||||
|
||||
PKG_NAME:=sqm-scripts
|
||||
PKG_VERSION:=7
|
||||
PKG_RELEASE:=3
|
||||
PKG_VERSION:=8
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPLv2
|
||||
|
||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||
|
@ -46,6 +46,8 @@ endef
|
|||
define Package/sqm-scripts/install
|
||||
$(INSTALL_DIR) $(1)/etc/init.d
|
||||
$(INSTALL_BIN) ./files/etc/init.d/sqm $(1)/etc/init.d/sqm
|
||||
$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
|
||||
$(INSTALL_BIN) ./files/etc/hotplug.d/iface/11-sqm $(1)/etc/hotplug.d/iface/11-sqm
|
||||
$(INSTALL_DIR) $(1)/etc/config
|
||||
$(INSTALL_DATA) ./files/etc/config/sqm $(1)/etc/config/sqm
|
||||
$(INSTALL_DIR) $(1)/usr/lib/sqm
|
||||
|
|
7
net/sqm-scripts/files/etc/hotplug.d/iface/11-sqm
Normal file
7
net/sqm-scripts/files/etc/hotplug.d/iface/11-sqm
Normal file
|
@ -0,0 +1,7 @@
|
|||
#!/bin/sh
|
||||
|
||||
# teach SQM to re-enable itself when an interface re-appears
|
||||
logger -t SQM -s "hotplug on interface: ${DEVICE} action: ${ACTION}"
|
||||
|
||||
[ "$ACTION" = ifup ] && /usr/lib/sqm/run.sh interface ${DEVICE}
|
||||
|
30
net/sqm-scripts/files/usr/lib/sqm/run.sh
Normal file → Executable file
30
net/sqm-scripts/files/usr/lib/sqm/run.sh
Normal file → Executable file
|
@ -9,16 +9,37 @@
|
|||
|
||||
. /lib/functions.sh
|
||||
|
||||
STOP=$1
|
||||
STOP=
|
||||
ACTIVE_STATE_PREFIX="SQM_active_on_"
|
||||
ACTIVE_STATE_FILE_DIR="/var/run/SQM"
|
||||
mkdir -p ${ACTIVE_STATE_FILE_DIR}
|
||||
PROTO_STATE_FILE_LIST=$( ls ${ACTIVE_STATE_FILE_DIR}/${ACTIVE_STATE_PREFIX}* 2> /dev/null )
|
||||
|
||||
|
||||
case ${1} in
|
||||
stop)
|
||||
logger -t SQM -s "run.sh stop"
|
||||
STOP=$1
|
||||
;;
|
||||
interface)
|
||||
START_ON_IF=$2 # only process this interface
|
||||
logger -t SQM -s "Re/starting sqm on interface ${START_ON_IF}"
|
||||
# TODO if $2 is empty just bail...
|
||||
if [ -z ${START_ON_IF} ] ;
|
||||
then
|
||||
logger -t SQM -s "Interface name missing, nothing to do, bailing out"
|
||||
return 0
|
||||
fi
|
||||
# only try to restart the just hotplugged interface, so reduce the list of interfaces to stop to the specified one
|
||||
PROTO_STATE_FILE_LIST=${ACTIVE_STATE_FILE_DIR}/${ACTIVE_STATE_PREFIX}${START_ON_IF}
|
||||
;;
|
||||
esac
|
||||
|
||||
|
||||
# the current uci config file does not necessarily contain sections for all interfaces with active
|
||||
# SQM instances, so use the ACTIVE_STATE_FILES to detect the interfaces on which to stop SQM.
|
||||
# Currently the .qos scripts start with stopping any existing traffic shaping so this should not
|
||||
# effectively change anything...
|
||||
PROTO_STATE_FILE_LIST=$( ls ${ACTIVE_STATE_FILE_DIR}/${ACTIVE_STATE_PREFIX}* 2> /dev/null )
|
||||
for STATE_FILE in ${PROTO_STATE_FILE_LIST} ; do
|
||||
if [ -f ${STATE_FILE} ] ;
|
||||
then
|
||||
|
@ -35,6 +56,11 @@ config_load sqm
|
|||
run_simple_qos() {
|
||||
local section="$1"
|
||||
export IFACE=$(config_get "$section" interface)
|
||||
|
||||
# If called explicitly for one interface only , so ignore anything else
|
||||
[ -n "${START_ON_IF}" -a "$START_ON_IF" != "$IFACE" ] && return
|
||||
#logger -t SQM -s "marching on..."
|
||||
|
||||
ACTIVE_STATE_FILE_FQN="${ACTIVE_STATE_FILE_DIR}/${ACTIVE_STATE_PREFIX}${IFACE}" # this marks interfaces as active with SQM
|
||||
[ -f "${ACTIVE_STATE_FILE_FQN}" ] && logger -t SQM -s "Uh, oh, ${ACTIVE_STATE_FILE_FQN} should already be stopped." # Not supposed to happen
|
||||
|
||||
|
|
3
net/sqm-scripts/files/usr/lib/sqm/simple.qos
Normal file → Executable file
3
net/sqm-scripts/files/usr/lib/sqm/simple.qos
Normal file → Executable file
|
@ -37,6 +37,9 @@ ipt -t mangle -A QOS_MARK_${IFACE} -m tos --tos Minimize-Delay -j MARK --set-ma
|
|||
|
||||
# Turn it on. Preserve classification if already performed
|
||||
|
||||
#sm: is it correct to do this in $IFACE? Should ingress not be on $DEV? since HTB acts on $DEV?
|
||||
# SQUASH also does not work on $DEV (that is the IFB will still see the incoming ToS bits whether we squash or not)
|
||||
# SQUASH is still useful to protect internal machines...
|
||||
if [ "$SQUASH_DSCP" = "1" ]
|
||||
then
|
||||
sqm_logger "Squashing differentiated services code points (DSCP) from ingress."
|
||||
|
|
Loading…
Reference in a new issue