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
|
@ -8,8 +8,8 @@
|
||||||
include $(TOPDIR)/rules.mk
|
include $(TOPDIR)/rules.mk
|
||||||
|
|
||||||
PKG_NAME:=sqm-scripts
|
PKG_NAME:=sqm-scripts
|
||||||
PKG_VERSION:=7
|
PKG_VERSION:=8
|
||||||
PKG_RELEASE:=3
|
PKG_RELEASE:=1
|
||||||
PKG_LICENSE:=GPLv2
|
PKG_LICENSE:=GPLv2
|
||||||
|
|
||||||
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
|
||||||
|
@ -46,6 +46,8 @@ endef
|
||||||
define Package/sqm-scripts/install
|
define Package/sqm-scripts/install
|
||||||
$(INSTALL_DIR) $(1)/etc/init.d
|
$(INSTALL_DIR) $(1)/etc/init.d
|
||||||
$(INSTALL_BIN) ./files/etc/init.d/sqm $(1)/etc/init.d/sqm
|
$(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_DIR) $(1)/etc/config
|
||||||
$(INSTALL_DATA) ./files/etc/config/sqm $(1)/etc/config/sqm
|
$(INSTALL_DATA) ./files/etc/config/sqm $(1)/etc/config/sqm
|
||||||
$(INSTALL_DIR) $(1)/usr/lib/sqm
|
$(INSTALL_DIR) $(1)/usr/lib/sqm
|
||||||
|
|
|
@ -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}
|
||||||
|
|
|
@ -9,16 +9,37 @@
|
||||||
|
|
||||||
. /lib/functions.sh
|
. /lib/functions.sh
|
||||||
|
|
||||||
STOP=$1
|
STOP=
|
||||||
ACTIVE_STATE_PREFIX="SQM_active_on_"
|
ACTIVE_STATE_PREFIX="SQM_active_on_"
|
||||||
ACTIVE_STATE_FILE_DIR="/var/run/SQM"
|
ACTIVE_STATE_FILE_DIR="/var/run/SQM"
|
||||||
mkdir -p ${ACTIVE_STATE_FILE_DIR}
|
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
|
# 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.
|
# 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
|
# Currently the .qos scripts start with stopping any existing traffic shaping so this should not
|
||||||
# effectively change anything...
|
# 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
|
for STATE_FILE in ${PROTO_STATE_FILE_LIST} ; do
|
||||||
if [ -f ${STATE_FILE} ] ;
|
if [ -f ${STATE_FILE} ] ;
|
||||||
then
|
then
|
||||||
|
@ -35,6 +56,11 @@ config_load sqm
|
||||||
run_simple_qos() {
|
run_simple_qos() {
|
||||||
local section="$1"
|
local section="$1"
|
||||||
export IFACE=$(config_get "$section" interface)
|
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
|
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
|
[ -f "${ACTIVE_STATE_FILE_FQN}" ] && logger -t SQM -s "Uh, oh, ${ACTIVE_STATE_FILE_FQN} should already be stopped." # Not supposed to happen
|
||||||
|
|
||||||
|
|
|
@ -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
|
# 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" ]
|
if [ "$SQUASH_DSCP" = "1" ]
|
||||||
then
|
then
|
||||||
sqm_logger "Squashing differentiated services code points (DSCP) from ingress."
|
sqm_logger "Squashing differentiated services code points (DSCP) from ingress."
|
||||||
|
|
Loading…
Reference in New Issue